在Jetson平台上直接编译内核的好处是不存在交叉编译,编译非常顺利。但是慢!
适用于想在Jetson平台上一步到位,干所有事的玩家
本期内核版本L4T 32.1,使用Jetpack4.2刷机
官网教程有点confuse,因为没说明白是在哪编译,对于初学者不太友好,老规矩放上官网教程
https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fkernel_custom.html%23
- 下载内核源码
官网上有通过git获取源码的方式,这里我不建议这么做,直接到网站上下载更好。
打开NVIDIA Jetson的下载中心
https://developer.nvidia.com/embedded/downloads
进入下载中心后确认一下版本和产品,32.1,JAX and TX2。
这个版本一定要和你手上的Jetson上运行的版本一致,不然会搞挂你jetson上的系统。
以后的新版本源码下载也是如此,版本号和产品务必对应。 - 解压源码
把下载好的文件拷到一个位置,我建议新建一个存放源码的文件夹,并且固定下来不要移动
在新建目录下,解压第一层文件,下载的文件不一样文件名也不一样
tar -xjf JAX-TX2-public_sources.tbz2
第一层解压之后会出现一个public_sources的文件夹,继续解压第二层文件
tar -xjf public_sources/kernel_src.tbz2
解压完这层以后,目录下会出现kernel的文件夹,这个就是源码了。打开kernel会看到kernel-4.9 nvgpu nvidia三个文件,kernel-4.9是Linux4.9的源码。
注意:后边所有的步骤要在一个terminal下完成!不要打开多个命令窗
- 配置.config文件
设置编译输出路径,我在这里用的是 /home/xavier/kernel 随便搞一个就行
这个目录将会存储你从kernel编译出来的所有内容
TKOUT=/home/xavier/okernel
检查一下路径设置的对不对,注意下面代码里的$是要写上的
$TKOUT
会显示TKOUT=/home/xavier/okernel is a directory,意味着你的路径设置成功了,其实这个主要是为了后边写make参数时更方便,所以用变量代替。
打开源码路径
cd /home/xavier/kernel/kernel-4.9
确认一下编译输出路径
sudo mkdir -p $TKOUT
配置.config文件
sudo make ARCH=arm64 O=$TKOUT tegra_defconfig
成功后会提示你生成了.config文件。
注意,tegra_defconfig在每个版本或者每个产品里叫法都不一样,TX2好像是tegra18_defconfig
- 编译内核
还是在kernel-4.9的目录下,使用
sudo make ARCH=arm64 O=$TKOUT -j4
j4是选择用几个核进行编译,Xavier有4个核,如何查询核的数量可以看我的前边的一篇jetson常用命令的博文。