1. 解压、打补丁
解压打补丁的操作同uboot 一致,可以参考这里。
2. 配置
2.1 配置的目的
在编译内核前,在源码根目录下应有一个.config ,里边定义了许多宏,用来控制内核许多功能的开启与否。如下为一个 .config 文件的部分截图:
如红框所示的 宏CONFIG_MMU 表示使用mmu 功能,在源码中搜索该宏,可以看到该宏控制着许多代码是否编译:
2.2 配置方法
由于linux 源码可以配置的功能非常多,我这里可以看到.config 有一千多行,如果自己一条条配置不现实,并且我感觉也很难有人能记得住所有的配置项的具体功能。因此,这里直接使用厂家提供的 .config 文件,在此基础上使用 make menuconfig
命令做更较小的调整。
首先,将厂家提供的配置文件放到源码根目录下,并改名为.config
。然后执行 make menuconfig
命令。弹出的交互式配置界面如下:
在交互式页面中的修改的结果将体现在 .config 文件中。
我执行的时候遇到了点问题,不过参照这里,安装了sudo apt-get install libncurses5-dev
解决了。
2.3 自定义menuconfig
值得一提的是,menuconfig 的内容可以自己编辑,这些内容都保存在对应的Kconfig 中,如下:
Kconfig 中的宏(如上图中的LOCALVERSION
)在 make menuconfig 后在.config 中会自动添加一个CONFIG_
前缀(如下图中的CONFIG_LOCALVERSION
)。
2.4 .config 文件的作用
2.4.1 生成autoconfig.h
在编译时,make 会自动根据.cofig文件生成autoconfig.h,从而使得该宏可以在c 文件使用。(c文件中只能使用.h 和.c 文件)
include/linux/autoconf.h:230:#define CONFIG_LOCALVERSION "hello_menuconfig"
在.c文件中使用这个宏的时候,主要要加上这个前缀。
2.4.2 生成auto.cofig
例如,对于网卡芯片 DM9000的支持,可以编译进内核(y),也可以不编进内核(n),还可以编做模块(m)。make 是会生成 auto.config 供子目录的Makefile 使用。auto.config 中有如下定义:
include/config/auto.conf:144:CONFIG_DM9000=y
子目录中的Makefile 会通过下面的方式使用auto.config 中的CONFIG_DM9000
来控制如何编译:
drivers/net/Makefile:197:obj-$(CONFIG_DM9000) += dm9dev9000c.o
3. 编译
直接make
。我make的时候遇到了个小问题,好赖也解决了,记在了这里。
不过为了将内核给uboot使用,需要将内核编译成uImage,执行make uImage
即可。
4. 下载内核
单板上启动 uboot ,输入k 来等待pc 端传输。
单板使用usb线连接pc,并在pc上安装好usb的驱动,使用DNW工具即可下载 uImage 到flash 。