一、准备源码和交叉编译工具链
- 下载链接:Jetson Linux R32.6. Release Page | NVIDIA Developer
下载如下图所示的文件:
二、配置内核以及交叉编译环境
2. 解压源码:
2.1 解压“public_sources.tbz2”,生成Linux_for_Tegra文件夹
$ tar -xjf public_sources.tbz2
2.2 解压内核源码
$ cd Linux_for_Tegra/source/public
$ tar –xjf kernel_src.tbz2
2.3 解压“Jetson_Linux_R32.6.1_aarch64.tbz2”“Tegra_Linux_Sample-Root-Filesystem_R32.6.1_aarch64.tbz2”
将“Jetson_Linux_R32.6.1_aarch64.tbz”解压在Linux_for_Tegra目录内:
将“Tegra_Linux_Sample-Root-Filesystem_R32.6.1_aarch64.tbz2”解压在/Linux_for_Tegra/rootfs目录内
$ tar xf Jetson_Linux_R32.6.1_aarch64.tbz2
$ cd Linux_for_Tegra/rootfs/
$ sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R32.6.1_aarch64.tbz2
$ cd ..
$ sudo ./apply_binaries.sh
2.4 解压gcc交叉编译工具链
$ tar xjf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
3 构建NVIDIA kernel
3.1 必须下载内核源码,安装“utilities ”
$ sudo apt install build-essential bc
3.2 在~/Linux_for_Tegra/source/public/kernel路径下新建output文件夹。
3.3 设置环境变量
(需要在:~/Jetson_AGX_Xavier/Linux_for_Tegra/source/public/kernel/kernel-4.9/路径下执行)
$ TEGRA_KERNEL_OUT=/home/idriver/Jetson_AGX_Xavier/Linux_for_Tegra/source/public/kernel/output/
如果在非Jetson 系统下,需要设置交叉编译链接
$ export CROSS_COMPILE=<cross_prefix>
$ export LOCALVERSION=-tegra
3.4 执行以下命令创建.config文件
$ cd <kernel-4.9/>
$ mkdir -p $TEGRA_KERNEL_OUT
$ make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_defconfig
3.5 执行脚本,向Linux kernel打入实时补丁
$ scripts/rt-patch.sh apply-patches
3.6 执行以下命令来构建包含所有dtb和模块的内核
$ make mrproper 注:[首先清除所有的.o文件和依赖关系]
$ make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j<n>
执行以上命令后会出现如下选择,选择5,之后的所有选项都选择“Y”。
注意:如果需要修改内核配置时,需要指定好编译平台和交叉编译工具链:
$ make ARCH=64 CROSS_COMPILE=/home/idriver/Jetson_AGX_Xavier/gcc-linaro/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- menuconfig
等待编译完成……
编译成功:
3.7 编译完成之后,替换两个文件
$ cd $TEGRA_AGX_KERNEL_OUT
$ cp arch/arm64/boot/Image /home/idriver/Jetson_AGX_Xavier/Linux_for_Tegra/kernel/Image
$ cp arch/arm64/boot/dts/*dtb /home/idriver/Jetson_AGX_Xavier/Linux_for_Tegra/kernel/dtb/
$ cp arch/arm64/boot/dts/*dtbo /home/idriver/Jetson_AGX_Xavier/Linux_for_Tegra/kernel/dtb/
$ make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_defconfig
3.8 执行以下命令,安装内核模块。
$ sudo make ARCH=arm64 O=$TEGRA_KERNEL_OUT modules_install INSTALL_MOD_PATH=/home/idriver/Jetson_AGX_Xavier/Linux_for_Tegra/rootfs/
3.9 执行以下命令
$ cd Linux_for_Tegra/
$ sudo ./apply_binaries.sh
注意:如果报错,请安装” qemu-user-static”
$ sudo apt-get install qemu-user-static
4 进入强制恢复模式
4.1 关闭AGX所有电源
4.2 接好三个按键旁边的typeC到PC上
4.3 接上电源按住中间的recovery不放,按一下电源,灯亮。
4.4 输入lsusb,查看是否进入强制恢复模式,
lsusb
显示为nvidia corp设备即可,如果显示为L4T是正常连接,没有进入恢复模式
4.5 输入以下命令
$ sudo ./flash.sh jetson-agx-xavier-devkit mmcblk0p1
等待刷写完毕,刷写成功后,显示如下:
注意:如果系统启动失败,请从3.6章节开始重新操作直至4.5。
三、测试带有实时补丁的系统
3.1 查看带有实时补丁的系统,有如下红框内信息的为成功打入实时补丁的系统
3.2 安装实时测试工具
sudo apt-get install rt-tests
3.2.1 运行测试程序,注:运行五个线程,线程优先级为50,无限循环
sudo cyclictest -t 10 -p 50 -n
3.2.2 测试结果
3.2.3 参数解释
T: 0 序号为0的线程
P: 0 线程优先级为0
C: 9397 计数器。线程的时间间隔每达到一次,计数器加1
I: 1000 时间间隔为1000微秒(us)
Min: 最小延时(us)
Act: 最近一次的延时(us)
Avg: 平均延时(us)
Max: 最大延时(us)