1.准备工作
版本:jetpack4.5.1,L4T R32.5.1,TX2
drivers:驱动包,并不是平时意义上的内核驱动,后续这里面的镜像,设备树被新编译的替换。里面有烧写脚本
source:源代码
以上两部分都要下载,传递到ubuntu主机
2.编译脚本
在此之前要先建立rootfs,否则编译会报错,参考建立rootfs以及NFS挂载
并且主机需要安装一些库
build_kernel.sh内容如下,可以统计耗时
#!/bin/sh
SYSTEM_TIME_START=$(date +%s.%N)
TARGET_KERNEL_OUT=~/output #输出路径,避免污染内核
export LOCALVERSON=-tegra
export CROSS_COMPILE=/usr/local/arm/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
export ARCH=arm64
mkdir -p $TARGET_KERNEL_OUT
make distclean
make O=$TARGET_KERNEL_OUT tegra_defconfig
make O=$TARGET_KERNEL_OUT menuconfig
make O=$TARGET_KERNEL_OUT -j8
SYSTEM_TIME_END=$(date +%s.%N)
USE_TIME_SECOND=$(echo 'scale=2; ('$SYSTEM_TIME_END '-' $SYSTEM_TIME_START')/1' | bc)
USE_TIME_MIN=$(echo 'scale=2; ('$USE_TIME_SECOND '/60)/1' | bc)
echo "编译耗时:" $USE_TIME_MIN "min" $USE_TIME_SECOND "s"
3.拷贝与替换
进入内核根目录下,执行以上脚本即可
到指定编译生成路径下:
拷贝Image文件替换Jetpack安装包目录
到指定编译生成路径下:
拷贝所有的dtb文件替换Jetpack安装包目录
执行以下语句安装模块
sudo make ARCH=arm64 O=$TEGRA_KERNEL_OUT modules_install \ INSTALL_MOD_PATH=<top>/Linux_for_Tegra/rootfs/
到刚刚指定安装modules的目录下打包文件:
cd <modules_install_path>
tar --owner root --group root -cjf kernel_supplements.tbz2 lib/modules
拷贝打包文件替换Jetpack安装包目录
4.烧写
进入此目录Linux_for_Tegra_tx2(驱动包)
sudo ./flash.sh jetson-tx2 mmcblk0p1 #烧录
sudo ./flash.sh -r -k APP -G system.img jetson-tx2 mmcblk0p1 #备份镜像
#烧写备份的镜像时,需要将system.img文件复制到Liunx_for_Tegra/bootloader/目录下,在Liunx_for_Tegra目录下执行
sudo ./flash.sh -r jetson-xxx mmcblk0p1
#-r选项会使用bootloader下存在的镜像
sudo ./flash.sh -k kernel jetson-tx2 mmcblk0p1#单独更新kernel,不一定有用,可以试试-K <Image完整路径+Image>
#设备树文件在Linux_for_Tegra/kernel/dtb目录下,更改之后需要让工具重新执行编译烧录才会生效
sudo ./flash.sh -r -k kernel-dtb jetson-tx2 mmcblk0p1 #单独烧写dtb,