环境
tx2:内核4.9.140 L4T 32.3.1
Linux kernel没有4.9.140的rt补丁,查阅发现英伟达官方内核源码提供了RT补丁,需编译内核。
开发板上剩余空间不多,所以采用交叉编译方式。
准备工作
- 从英伟达官方下载内核源码和Jetson Driver Package:
https://developer.nvidia.com/embedded/download
2.下载交叉编译工具链
http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-i686_aarch64-linux-gnu.tar.xz
3.将public_sources里kernel_src.tbz2和交叉编译工具链解压到主机上。
步骤
1.配置环境变量:
export PATH=<交叉编译环境路径>/bin/:$PATH
export LOCALVERSION=-tegra
export CROSS_COMPILE=aarch64-linux-gnu-
2.切换到内核源码路径并创建一个输出文件夹:
cd <内核源码路径>/kernel/kernel-4.9
mkdir kernel_out
3.打RT补丁并编译内核:
1. ./scripts/rt-patch.sh apply-patches #打实时补丁
2. make ARCH=arm64 O=<内核源码路径>/kernel/kernel-4.9/kernel_out tegra_defconfig
3. *make ARCH=arm64 O=<内核源码路径>/kernel/kernel-4.9/kernel_out menuconfig #无需修改内核可跳过这步直接执行4
4. make ARCH=arm64 O=<内核源码路径>/kernel/kernel-4.9/kernel_out -j4
若执行了3会出现以下界面:
Kernel Features->Preemption Model(Fully Preemptible Kernel(RT))没有此项代表实时补丁没打上
4.编译输出modules
make O=<内核源码路径>/kernel/kernel-4.9/kernel_out modules
make O=<内核源码路径>/kernel/kernel-4.9/kernel_out modules_install INSTALL_MOD_PATH=<your_destination>//安装路径
5.更新内核和modules
把输出路径下/arch/arm64/boot/Image复制到TX2上/boot/ (先备份原Image)
把输出路径下modules复制到TX上/lib路径下
6.重启uname -a查看
更新前: