现在的芯片功能越来越强大,功能也更加的丰富,为了推广自己的产品,一般芯片厂商都会提供一个包含Uboot,Kernel,Rootfs,以及芯片模块功能的SDK。一般在SDK中会有多个文件夹,比如uboot,kernel等,只需要在SDK的根目录执行一个编译脚本就可以完成各个模块的编译了。这样的好处是我们不用自己去费力解决三大件的适配了,但是很明显也会带来另一个问题,那就是对各个模块的编译理解不深刻。另外有时候可能想要尝试其它版本的内核,或项目要求必须指定内核版本,因此,最好还是了解一下如何去单独编译内核。
关于内核单独编译,这里建议还是找已经明确支持你所用芯片的版本,虽然理论上更旧的版本也是可用的,但适配工作将更加繁琐。
首先是内核源码的下载
https://www.kernel.org/https://www.kernel.org/ 解压后得到一个包含诸多文件夹及文件的内核源码,里面很多文件,这里列举几个比较重要或常用的做说明。
makefile文件:里面记录着编译流程和编译内容,它指定的整个编译过程的规则。当然子文件夹中还会有makefile文件,里面是针对子文件夹源码的编译规则。
arch文件夹:里面针对各个架构做分类,不同架构下面也会有芯片厂商的分类。这里面有很多芯片的开发板的一些配置文件,以及各芯片所对应开发板的设备树文件。
我们在编译时必须得安装一些工具软件,这个在编译时如果报错了再去解决,当然交叉编译器和make工具肯定得提前搞定。
我们在进行内核编译时有两种方法,一种是直接通过make menuconfig进入图形化配置界面,然后勾选需要的配置,确定好之后使用make进行编译。但是,我们知道Linux内核中的配置项是特别多的,一项项去配置几乎是不可能的,不仅是因为参数功能不了解,而且也浪费时间。所以可以利用内核中已有的同款芯片开发板的配置文件,先make xx_defconfig,然后再使用make menuconfig进入图形化界面去调整,这样需要配置的就不多了。
事实上,以上两种方式最终都会生成一个隐藏文件.config,在编译时会读取这个文件来进行编译。这个文件就是编译中的参数列表,大多数是各种配置功能的开或关,也有少部分是参数。如果很清楚自己需要的配置,也可以直接修改该文件,事实上.config与xx_defconfig的内容格式是一样的。
在配置好编译参数后就可以进行编译了,输入make后等待编译完成,会在对应arch的boot文件夹下生成镜像文件,输入make modules_install可以进行内核模块的安装。