Linux内核中Makefile、Kconfig和.config的关系

转载:http://emb.hqyj.com/Column/7565.html
1、Linux内核如此庞大(几万个文件),目录又分为很多层,它是如何将各层目录下的文件关联起来的?

linux内核通过层层目录管理,形成了一个树形目录[内核源码树],这是一个树形结构。从数据结构管理方面看,对于一颗非标准树,还是有办法将其进行遍历的,只是算法比较复杂而已。那么在linux内核源码的这棵树,就是
就是通过Kconfig文件建立各层子目录之间的连接,通过Makefile文件来选择各个目录下的对应的文件是否被编译,而.config文件就是总控制台,控制Makefile文件去编译指定的程序代码文件。而这一切控制关系是有Kconfig文件建立起来的。

2、Linux支持如此多的架构(X86、ARM、AVR、mips等等),为何我们在使用某一架构的芯片,比如x210时,其他架构的代码不会被编译?并且同为ARM架构下的其他系列SOC架构相关的代码不被编译?

make xx_defconfig和make menuconfig结合生成正确的.config文件
make xx_defconfig生成一个基础的。默认的.config文件,此文件的内容就包含了架构相关的东西,所以在进行linux内核源码编译时,根据.config文件的基本配置,寻找架构相关的代码进行编译和设置相关的代码进行编译。总之以.config这个控制台为准。
make menuconfig只是为了修改一些驱动模块和要编译的一些程序,没有架构相关。

3、在编译内核前,执行命令:make menuconfig的意义为何?
make menuconfig就是以菜单的形式打开内核源码的树形结构,然后程序员在默认配置的基础上自行配置和选择需要编译的模块代码。

其实能做这个工作的命令有很多,比如:
•make config:基于文本的最为传统的配置界面,太复杂,不直观,不推荐使用。
•make xconfig:基于图形窗口模式的配置界面,直观明了,Xwindow界面下推荐使用。
•make oldconfig:如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦,可以使用。
•make menuconfig:基于文本选单的配置界面,直观明了,字符终端下推荐使用。

大概好像这几种吧,其实还有一种就是,手动修改.config文件,呵呵!相信基本上没人会去干这种事的。

4.编译内核时,执行命令:make zImage的意义为何?
*
目的:生成zImage或者uImage的内核镜像。

当然,有人在疑问了,在编译Firefly的RK3288开发板时,执行的命令是make firefly-rk3288.img ,而不是上面的任何一个,其实这是Firefly修改过的方法了,其实说白了也就是一个名字而已。这个不要太过纠结,想具体了解的话,答案就在Firefly提供的内核源码内。

猜你喜欢

转载自www.cnblogs.com/Ocean-Star/p/9235837.html
今日推荐