您的位置:首页 > 其它

内核配置与编译宏观分析

2016-07-31 16:20 211 查看

内核配置与编译宏观分析

通过配置,我们可以控制各功能是否被使用,以及配置一些参数给内核

主要涉及Kconfig、.config、menuconfig、Makefile

1.涉及文件详览

Kconfig位于kernel源码内大部分的文件夹中,是一种特殊格式的文件,负责提供kernel各个功能的配置选项,需要注意的是,Kconfig仅仅负责提供配置选项本身,而不提供各选项的值。其具体语法分析详见kernel中的Kconfig详尽分析

.config产生于配置阶段,是arch/arm/configs/xxx_defconfig的复制品,而xxx_defconfig是原厂提供的各个配置项的值,里面都是CONFIG_开头的变量,以CONFIG_DM9000为例,其默认值为y:

CONFIG_DM9000=y


menuconfig是kernel提供的一个工具,可以方便的阅读所有Kconfig、可以方便的修改.config,如果分别在menuconfig中修改配置选项的值为:Y或N或M,则.config中的变量会自动变为:值为y或未被定义或值为m

主Makefile没什么好多说的,里面的伪目标是所有配置操作的入口;各个子Makefile根据 .config中CONFIG_开头的变量来判断各个文件是否被编译。例:

obj-$(CONFIG_DM9000) += dm9000.o


这句表示,如果CONFIG_DM9000变量值为y,则obj += dm9000.o,因此dm9000.c会被编译;如果CONFIG_DM9000变量未定义,则dm9000.c不会被编译。如果CONFIG_DM9000变量的值为m则会被连接成模块

下面是整个流程图



2.设备树的编译

对于3.x版本后的内核,还需要增加一步编译设备树,编译过程很简单:

make xxx.dtb


其中,xxx是arch/arm/boot/dts下我们要选用的dts的名字

3.保存.config为defconfig

其实执行过make xxx_defconfig后产生的.config会比原来的defconfig多近2000行配置,这些配置在执行make xxx_defconfig自动添加进去的。

那我们用menuconfig修改了.config后,如何将其正确的保存为defconfig呢?使用如下命令即可

make savedefconfig && mv defconfig arch/arm/configs/xxx_defconfig


4.编译并导出module

make modules


编译完的ko文件被分散在各个目录中,此时我们可以使用如下命令,将其集中导出到/lib/modules/xxxx

make modules_install INSTALL_MOD_PATH=./modules
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息