在项目初期,NXP提供了i.MX7ul的BSP包,里面包含了大量第三方平台的配置以及本项目未使用的功能。因此,需要在此基础上进行kernel的裁剪。
本文主要讲在不影响主要功能的前提下进行Linux Kernel裁剪的步骤。
开发平台
SOC: i.MX7ul
Kernel: 4.9.51
porting
porting uboot和kernel,保证kernel能够正常启动和串口能够正常使用。
替换.config为defconfig
将 kernel_imx7/
目录下的.config
拷贝到 arch/arm64/configs/xxx_defconfig
做这一步是为了后面使用 make menuconfig
图形化配置生成的.config
和xxx_defconfig
直接对比,对比的内容可以保证是自己通过图形化配置修改过的。
上面的方式通常是不标准的,make CROSS_COMPILE=XXX ARCH=arm64 xxx_defconfig
会将arch/arm64/configs/xxx_defconfig
文件根据依赖关系生成.config
文件。make CROSS_COMPILE=XXX ARCH=arm64 savedefconfig
就可以将当前的.config
文件生成与之对应的defconfig
文件。
图形化配置
操作命令
执行 make menuconfig ARCH=arm xxx_defconfig
这里会将xxx_defconfig
和kernel_imx7/
下所有的Kconfig
生成图形化配置。
操作方式如下:
1 | Arrow keys navigate the menu. <Enter> selects submenus ---> (or empty submenus ----). Highlighted letters are hotkeys. |
比如说,这里面的Device Drivers
下,有个USB support
,我们的项目中不需要这个功能,可以将其设置为N,然后保存到.config
中。
这样,我们就可以将更新后的.config
文件再次替换xxx_defconfig
,这次修改的,就是去掉USB support
相关的配置。或者使用make savedefconfig
命令将.config
转换为对应的defconfig
文件。
查找
比如说我们知道某个配置,想要将其使能,但是不知道它的依赖关系以及在图形化配置下的哪个位置,那么可以使用/
来进行搜索。比如说我们要使能CONFIG_USB_LIBCOMPOSITE
,使用\
搜索,然后使用数字键跳转到对应的内容上。
建议每次按照机能修改,每改一次做一次提交,保证kernel能正常的启动,并进行详细的说明。不要一次性改太多,免得以后调查问题回退不好定位。多次执行第4步,直至初步将kernel大致裁剪完毕。