JetPack 7.0 (L4T R38.2.1) 内核源代码仓库

项目概述

本仓库包含 NVIDIA JetPack 7.0 对应的 Jetson Linux (L4T) R38.2.1 版本的 Linux 内核源代码。该版本基于 Linux Kernel 6.8.12 LTS,并针对 NVIDIA Jetson 平台(特别是 Jetson Thor 系列)进行了深度优化和定制,包括 NVIDIA 专有的驱动补丁、设备树支持以及预占式实时内核选项。

JetPack 7.0 是 NVIDIA 为边缘 AI、机器人和嵌入式应用推出的最新软件开发套件,支持 Ubuntu 24.04 LTS、多实例 GPU (MIG)、增强的安全特性等。

版本信息

  • JetPack 版本:7.0
  • Jetson Linux (L4T) 版本:R38.2.1
  • Linux Kernel 版本:6.8.12 LTS(含 NVIDIA Tegra 特定补丁)
  • 基础系统:Ubuntu 24.04 LTS
  • 主要支持平台:NVIDIA Jetson Thor 系列(不支持 Orin 系列)

获取源代码

  1. 从官方下载中心获取:
    https://github.com/edgehook/MIC-NVJTHS-jp7.0-kernelsource.git
    
  2. 获取交叉编译工具链 访问[https://developer.nvidia.com/downloads/embedded/L4T/r38_Release_v2.0/release/x-tools.tbz2]

推荐主机环境

  • 操作系统: Ubuntu 22.04 LTS 或 Ubuntu 24.04 LTS (x86_64)
  • 内存: 至少 16GB RAM
  • 存储空间: 至少 100GB 可用磁盘空间

主机安装编译依赖包

sudo apt install build-essential bc flex bison libssl-dev zstd

设置环境变量

export CROSS_COMPILE=x-tools/aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-
export KERNEL_HEADERS=/kernel/kernel-noble
export kernel_name=noble
export KERNEL_OUTPUT=output
export INSTALL_MOD_PATH=Linux_for_Tegra/rootfs

编译非实时内核

# Enable RT Configuration
./generic_rt_build.sh disable

# Build the Kernel
make -C kernel

# Install Kernel and In-tree Modules
make install -C kernel

# Build NVIDIA Out-of-Tree Modules
make modules

# Install Out-of-Tree Modules  
make modules_install

# Update Initramfs
cd Linux_for_Tegra/
./tools/l4t_update_initrd.sh

# Build Device Tree Blobs
make dtbs
 

HDMI显示功能

  1. 配置Pinmux,设置HDMI接口相关引脚功能:

    • 将dp_aux_ch0_hpd_pf3引脚配置为GPIO模式,用于热插拔检测
    • 设置dp_aux_ch0_p引脚为i2c6_clk功能,用于DDC时钟信号
    • 设置dp_aux_ch0_n引脚为i2c6_dat功能,用于DDC数据信号
                        dp_aux_ch0_hpd_pf3 {
                                 nvidia,pins = "dp_aux_ch0_hpd_pf3";
                                 nvidia,function = "rsvd1";
                                 nvidia,pull = <TEGRA_PIN_PULL_NONE>;
                                 nvidia,tristate = <TEGRA_PIN_ENABLE>;
                                 nvidia,enable-input = <TEGRA_PIN_ENABLE>;
                                 nvidia,drv-type = <TEGRA_PIN_1X_DRIVER>;
                                 nvidia,e-io-od = <TEGRA_PIN_DISABLE>;
                                 nvidia,e-lpbk = <TEGRA_PIN_DISABLE>;
                         };

                        dp_aux_ch0_p {
                                 nvidia,pins = "dp_aux_ch0_p";
                                 nvidia,function = "i2c6_clk";
                                 nvidia,pull = <TEGRA_PIN_PULL_NONE>;
                                 nvidia,tristate = <TEGRA_PIN_DISABLE>;
                                 nvidia,enable-input = <TEGRA_PIN_ENABLE>;
                                 nvidia,drv-type = <TEGRA_PIN_1X_DRIVER>;
                                 nvidia,e-io-od = <TEGRA_PIN_DISABLE>;
                                 nvidia,e-lpbk = <TEGRA_PIN_DISABLE>;
                         };

                         dp_aux_ch0_n {
                                 nvidia,pins = "dp_aux_ch0_n";
                                 nvidia,function = "i2c6_dat";
                                 nvidia,pull = <TEGRA_PIN_PULL_NONE>;
                                 nvidia,tristate = <TEGRA_PIN_DISABLE>;
                                 nvidia,enable-input = <TEGRA_PIN_ENABLE>;
                                 nvidia,drv-type = <TEGRA_PIN_1X_DRIVER>;
                                 nvidia,e-io-od = <TEGRA_PIN_DISABLE>;
                                  nvidia,e-lpbk = <TEGRA_PIN_DISABLE>;
                          };
  1. 配置GPIO,添加TEGRA264_MAIN_GPIO(F, 3):

    • 在GPIO驱动配置文件中声明该GPIO
    • 设置GPIO方向为输入模式,用于检测HDMI热插拔信号
    • 配置中断触发方式(如边沿触发),以便及时响应热插拔事件
    • 示例配置代码:
      gpio@ac300000 {
                 default {
                       gpio-input = <
                               TEGRA264_MAIN_GPIO(F, 3)
                               TEGRA264_MAIN_GPIO(H, 5)
                               TEGRA264_MAIN_GPIO(P, 1)
                               TEGRA264_MAIN_GPIO(Q, 7)
                               TEGRA264_MAIN_GPIO(S, 0)
                               TEGRA264_MAIN_GPIO(S, 1)
                               TEGRA264_MAIN_GPIO(T, 6)
                               TEGRA264_MAIN_GPIO(U, 0
      
      

  2. 修改设备树文件tegra264-p4071-0000.dtsi:

    • 定位到display@8808c00000节点
    • 将热插拔GPIO从原来的os_gpio_hotplug_a(F, 4)修改为(F, 3)
    • 确保修改后的GPIO编号与硬件连接一致
    • 修改示例如下:
              display@8808c00000 {
                      status = "okay";
      -               os_gpio_hotplug_a = <&gpio_main TEGRA264_MAIN_GPIO(F, 4) GPIO_ACTIVE_LOW>;
      +               os_gpio_hotplug_a = <&gpio_main TEGRA264_MAIN_GPIO(F, 3) GPIO_ACTIVE_LOW>;
                      nvdisplay-niso {
                              status = "okay";
                      };
      

  3. 使用DCB工具生成配置并更新设备树:

    • 运行tools/dcb_tool/dcb_tool工具生成修改后的DCB文件
    • 该工具会根据硬件配置生成显示相关的参数
    • 在tegra264-p4071-0000.dtsi文件开头添加包含语句:
      #include <dt-bindings/input/linux-event-codes.h>
      #include <dt-bindings/input/gpio-keys.h>
      #include <dt-bindings/sound/rt5640.h>
      //#include "tegra264-p4071-0080-p3834-0008-dcb.dtsi"
      #include "tegra264-p4071-0080-p3834-0008-dcb.dtsi-modified.dtsi"
      
    • 使用设备树编译器(dtc)重新编译生成DTB文件
    • 将新生成的DTB文件烧录到目标设备进行测试验证

启用PCIE C3功能

注意:THor-T5000公版使用的NVME SSD在C5上,因此不用修改DTB和BPMP,其他自定义载板在C3控制器上面就需要修改DTB和BPMP了。

配置设备树(Device Tree)

配置步骤:

  1. 设置PCIe C3 Enable:

    • 打开对应的设备树源文件(如tegra264-p4071-0000.dtsi)。
    • 添加或修改PCIe相关节点,确保PCIe控制器和电源管理配置正确。
    • 示例:
                      /* PCIe C1 for Wifi Realtek */
                       pcie@a808400000 {
                               status = "okay";
                       };
      
                       /* PCIe C2 for WWAN 5G */
                       pcie@a808420000 {
                               status = "okay";
                       };
      
                       /* PCIe C3 is SNN on Jedha */
                       pcie@a808440000 {
                               status = "okay";
                       };
      
                       /* PCIe C4 is SNN on Jedha */
                       pcie@a808460000 {
                               status = "okay";
                       };
      
                       /* PCIe C5 to enable NVME */
                       pcie@a808480000 {
                               status = "disabled";
                       };
      

  2. 部署设备树:

    • 将生成的.dtb文件复制到目标系统的Linux_for_Tegrakernel/dtb/指定的设备树加载路径。

配置BPMP(Boot and Power Management Processor)

BPMP是NVIDIA Tegra平台上的一个协处理器,负责电源管理和低级别硬件控制。配置BPMP通常涉及与设备树的交互和固件更新。

配置步骤:
  1. 主要修改tegra264-bpmp-3834-0008-4071-xxxx.dtb文件

    1. sudo fdtput -t i bootloader/generic/tegra264-bpmp-3834-0008-4071-xxxx.dtb /uphy uphy0-config 6
    2. sudo fdtput -t i bootloader/generic/tegra264-bpmp-3834-0008-4071-xxxx.dtb /uphy uphy1-config 0
    3. sudo fdtput -t s bootloader/generic/tegra264-bpmp-3834-0008-4071-xxxx.dtb /pcie/pcie@3 status okay
    4. sudo fdtput -t s bootloader/generic/tegra264-bpmp-3834-0008-4071-xxxx.dtb /pcie/pcie@4 status okay
    5. sudo fdtput -t s bootloader/generic/tegra264-bpmp-3834-0008-4071-xxxx.dtb /pcie/pcie@5 status disabled
    6. sudo fdtput -t s kernel/dtb/tegra264-p4071-0000+p3834-0008-nv.dtb /bus@0/pcie@a808440000 status okay
    7. sudo fdtput -t s kernel/dtb/tegra264-p4071-0000+p3834-0008-nv.dtb /bus@0/pcie@a808460000 status okay
    8. sudo fdtput -t s kernel/dtb/tegra264-p4071-0000+p3834-0008-nv.dtb /bus@0/pcie@a808480000 status disabled

配置Borad.conf文件

# cat  jetson-agx-thor-devkit.conf

source "${LDK_DIR}/t264.conf.common";

DTB_FILE="tegra264-p4071-0000+p3834-0008-nv.dtb";
TBCDTB_FILE="${DTB_FILE}";
BPFDTB_FILE="tegra264-bpmp-3834-0008-4071-xxxx.dtb";
BPFFILE="bootloader/bpmp_t264-TA1090SA-A1_prod.bin";

EXTERNAL_PT_LAYOUT="tools/kernel_flash/flash_l4t_t264_nvme.xml";
EMC_BCT="tegra264-p3834-0008-sdram-bct-l4t.dts";
WB0SDRAM_BCT="tegra264-p3834-0008-sdram-bct-warmboot-l4t.dts";
BPMP_MEM_CONFIG="tegra264-p3834-0008-sdram-dfs.dts";
MISC_CONFIG="tegra264-mb1-bct-misc-p3834-xxxx-p4071-0000.dts";
SCR_CONFIG="tegra264-mb2-bct-firewall-p3834-xxxx-p4071-0000.dts";
PINMUX_CONFIG="tegra264-mb1-bct-pinmux-p3834-xxxx-p4071-0000.dts";
PMIC_CONFIG="tegra264-mb1-bct-pmic-p3834-0008-p4071-0000.dts";
PMC_CONFIG="tegra264-mb1-bct-padvoltage-p3834-xxxx-p4071-0000.dts";
DEVICEPROD_CONFIG="tegra264-mb1-bct-cprod-p3834-xxxx-p4071-0000.dts";
PROD_CONFIG="tegra264-mb1-bct-prod-p3834-xxxx-p4071-0000.dts";
MB2_BCT="tegra264-mb2-bct-misc-p3834-xxxx-p4071-0000.dts";
# Rollback protection
MINRATCHET_CONFIG="tegra264-mb1-bct-ratchet-p3834-xxxx-p4071-0000.dts";
GPIOINT_CONFIG="tegra264-mb1-bct-gpioint-p3834-xxxx-p4071-0000.dts";
UPHY_CONFIG="";
RAMCODE=12;

EXTERNAL_DEVICE="nvme0n1p1";
OVERLAY_DTB_FILE="L4TConfiguration.dtbo,tegra264-p4071-0000+p3834-xxxx-dynamic.dtbo";

至此,Jetson Thor平台的系统移植工作已初步完成。目前实现的基础功能包括:

  1. 系统烧录功能
  2. NVME SSD存储支持
  3. HDMI屏幕显示

系统已实现正常上电启动和显示功能。后续将持续更新更多功能,敬请期待!

至此,Jetson Thor平台的系统移植工作已初步完成。目前实现的基础功能包括:

  1. 系统烧录功能

  • 已建立完整的系统镜像烧录流程
  • 支持通过Micro-USB接口进行系统烧录
  • 烧录速度可达300MB/s
  • 提供烧录进度实时显示
  1. NVME SSD存储支持

  • 完美兼容主流NVME协议SSD
  • 支持PCIe 5.0 接口
  • PCIE C3控制器支持

  1. HDMI屏幕显示

  • 支持4K@60Hz高清输出
  • 兼容HDMI 2.1标准
  • 支持热插拔检测

系统状态:

  • 已实现正常上电启动
  • 显示功能稳定运行超过72小时
  • 系统温度控制在合理范围内
  • 功耗表现符合预期

后续开发计划:

  1. 完善GPU加速功能
  2. 增加网络模块支持
  3. 优化电源管理系统
  4. 开发更多外设驱动
  5. 提升系统稳定性

我们将持续更新更多功能,敬请期待!!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐