为什么用脚本方式编译linux内核

        首先我们可以把编译内核分为入侵式和非入侵式,以jetson Nano 这款英伟达的板子为例,官网给的编译方式为侵入式,即将编译后的文件输出到指定输出目录。

        实际操作中由于输出到指定的目录,每次都需要重编,所有的文件都会重新编译,时间非常长,这里 我们可以使用脚本的方式去编译linux内核


        例如工作中常见的Makefile文件,直接修改 Makefile 可能会导致编译系统认为需要重新构建更多目标,从而触发全量编译,花费很多时间。

        而脚本通常只修改或执行必要的步骤,利用内核编译系统的增量编译特性,只编译变化的部分,从而缩短编译时间。这种方式可以减少不必要的全量重编译,从而大大缩短编译时间。同时,脚本还能自动将生成的镜像和模块复制到烧写目录,避免手动拷贝的繁琐步骤。

        下面这段Shell命令就是建立一个脚本,修改所需的变量参数后,复制到目标路径,并让其实现自动编译,可以省去每次修改时的时间。

vim bulid.sh /* 创建脚本

export CROSS_COMPILE=aarch64-linux-gnu-
export LOCALVERSION=-tegra 
make ARCH=arm64 tegra_defconfig 
make ARCH=arm64 -j4 
cp arch/arm64/boot/Image ~/Linux_for_Tegra/kernel/ 
cp -rf arch/arm64/boot/dts/*.dt* ~/Linux_for_Tegra/kernel/dtb/ 
sudo make ARCH=arm64 modules_install INSTALL_MOD_PATH=~/Linux_for_Tegra/rootfs */ 	
$ sudo chmod 777 bulid.sh $ ./bulid.sh //运行脚本,自动完成编译和拷贝到烧写目录

       究其原因,牵涉到Linux中的增量编译模式,这个模式和文件依赖关系和时间戳(timestamp)检测  

        一、文件依赖关系

                在 Makefile 中,你会为每个目标文件(如可执行文件、库或中间目标)定义它所依赖的源文件和头文件。例如,一个目标文件 main.o 可能依赖于 main.c 和 utils.h。当这些依赖关系在 Makefile 中明确列出后,make 知道如果某个依赖文件发生变化,相关目标就需要重新生成。

         二 时间戳检测

                 每个文件都有一个最后修改时间戳。make 在构建过程中会比较目标文件与它依赖文件的时间戳。如果依赖文件的时间戳比目标文件更新(即依赖文件被修改过),make 会判断目标文件过时,需要重新编译生成。例如,如果 utils.h 的时间戳比 main.o 更新,那么 make 会重新编译 main.c 来生成新的 main.o。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值