内核启动流程分析(二)配置详解
总体概述
配置详解
配置的最终目的,是生成了.config
文件,查看下这个文件,
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.22.6
# Wed Dec 30 18:30:33 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_GENERIC_GPIO=y
# CONFIG_GENERIC_TIME is not set
# CONFIG_GENERIC_CLOCKEVENTS is not set
CONFIG_MMU=y
CONFIG_NO_IOPORT=y
CONFIG_GENERIC_HARDIRQS=y
.....
CONFIG_DM9000=y #来分析这个配置项目
其中都是一些xxx=y,yyy=m,zzz=一个数值等配置项这些,区别:若是=y的话,该项会被编译进内核;若是=m的话,该项会被编译为一个模块,这个模块以后可以动态加载。下面取其中一行 CONFIG_DM9000=y
来分析,先搜索下包含CONFIG_DM9000
文件内容
grep "CONFIG_DM9000" * -nwR
搜索后会发现含有“CONFIG_DM9000”配置项的文件主要是:
①c源码里有:CONFIG_DM9000
②子目录的Makefile(drivers/net/Makefile)里有:CONFIG_DM9000
③include/config/auto.conf里有:CONFIG_DM9000
④include/linux/autoconf.h里有:CONFIG_DM9000
这些文件之间以及与.config配置文件之间的关系是怎样的?下面逐一分析:
- 1、忽略掉默认配置文件(以defconfig命名的),可以看到c代码含有
CONFIG_DM9000
,从c语言语法上可知CONFIG_DM9000应该是一个宏,
这些宏肯定是在c文件中或者头文件中定义,这里的宏其实是来源于下面第4点中的include/linux/autoconf.h
arch/arm/plat-s3c24xx/common-smdk.c:46:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
arch/arm/plat-s3c24xx/common-smdk.c:162:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
arch/arm/plat-s3c24xx/common-smdk.c:200:#endif /* CONFIG_DM9000 */
arch/arm/plat-s3c24xx/common-smdk.c:250:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
- 2、子目录下的Makefile(drivers/net/Makefile)中含有
CONFIG_DM9000,下面
第4点中对于=Y和=M的差别体现不出来,其实这些差别是在这里的makefile(子目录下的makefile)中体现的,这里会区分是编译为模块(=M)还是编译为内核(=Y),这里子目录下的CONFIG_DM9000是在下面第3点
include/config/auto.conf中定义的。
drivers/net/Makefile:197:obj-$(CONFIG_DM9000) += dm9dev9000c.o
drivers/net/Makefile:198:#obj-$(CONFIG_DM9000) += dm9000.o
drivers/net/Makefile:199:#obj-$(CONFIG_DM9000) += dm9ks.o
插讲:子目录下的Makefile格式:
子目录的Makefile格式比较简单,一般都是obj_y += xxx.o或者obj_m += yyy.o,这表示该子目录下的xxx.c会被编译进内核去,yyy.c会被编译为yyy.ko作为一个可加载的模块。比如obj-$(CONFIG_DM9000) +=dm9dev9000c.o,若这里CONFIG_DM9000被第3点
include/config/auto.conf定义为CONFIG_DM9000=y的话,则有obj-y +=dm9dev9000c.o,dm9dev9000c.c会被编译进内核。
- 3、在include/config/auto.conf下含有
CONFIG_DM9000,
这个文件是自动生成的,内容很明显来源于.config
,上面第2点中根据这个编译模块还是内核.这个文件会被顶层makefile包含,里面的内容最终会被第2点中子目录下的makefile拿来使用。
include/config/auto.conf:144:CONFIG_DM9000=y
- 4、include/linux/autoconf.h里含有
CONFIG_DM9000配置项,这个
头文件是在make内核时,make机制根据.config自动产生的,它里面的内容来源于.config,在.config文件中不论配置项为=Y或者为=M(模块),在autoconf.h中这些配置项都被定义为1,autoconf.h被第1点中提到的源代码所使用,这里体现不出=M与=Y的区别,是在子目录下的Makefile中体现的。
include/linux/autoconf.h:145:#define CONFIG_DM9000 1
//该文件下的内容都是类似的如下
#define CONFIG_DM9000 1
#define CONFIG_SOLARIS_X86_PARTITION 1
#define CONFIG_SERIAL_NONSTANDARD 1
#define CONFIG_BLK_DEV_RAM_BLOCKSIZE 1024
转载:https://www.cnblogs.com/zongzi10010/p/10023694.html
内核启动流程分析(二)配置详解相关推荐
- php-fpm 启动参数及重要配置详解
2019独角兽企业重金招聘Python工程师标准>>> php-fpm 启动参数及重要配置详解 约定几个目录 /usr/local/php/sbin/php-fpm /usr/loc ...
- 一起分析Linux系统设计思想——03内核启动流程分析(六)
在学习资料满天飞的大环境下,知识变得非常零散,体系化的知识并不多,这就导致很多人每天都努力学习到感动自己,最终却收效甚微,甚至放弃学习.我的使命就是过滤掉大量的垃圾信息,将知识体系化,以短平快的方式直 ...
- Linux内核启动流程分析(一)【转】
转自:http://blog.chinaunix.net/uid-25909619-id-3380535.html 很久以前分析的,一直在电脑的一个角落,今天发现贴出来和大家分享下.由于是word直接 ...
- 低温linux内核启动readl,Linux内核启动流程分析(一)
很久以前分析的,一直在电脑的一个角落,今天发现贴出来和大家分享下.由于是word直接粘过来的有点乱,敬请谅解! S3C2410 Linux 2.6.35.7启动分析(第一阶段) 1.依据arch/ar ...
- Android Telephony分析(二) ---- RegistrantList详解
前言 本文主要讲解RegistrantList的原理,以及如何快速分析RegistrantList相关的代码流程. 在Telephony模块中,在RIL.Tracker(ServiceStateTr ...
- Linux内核启动流程分析(二)【转】
转自:http://blog.chinaunix.net/uid-25909619-id-3380544.html S3C2410 Linux 2.6.35.7启动分析(第二阶段) 接着上面的分析,第 ...
- 内核启动流程分析(一)编译体验
目录 2.打补丁 3.配置 总结 配置方式 配置体验 4.编译 链接 链接脚本 5.烧写内核 1.总体概述 2.打补丁 解压 tar xjf linux-2.6.22.6.tar.bz2 打补丁,ca ...
- 韦东山衔接班——3.4_linux内核启动流程分析之内核启动
作者:GWD 时间:2018.8.25 一.汇编部分到第一个C之前准备 1.问:内核的工作 答 2.问:为什么有两个head.S 答:其中一个是自解压代码,运行时先解压内核 3.uboot中将参数写入 ...
- PHP性能调优---php-fpm - 启动参数及重要配置详解
一,php-fpm的启动参数 #测试php-fpm配置 /usr/local/php/sbin/php-fpm -t /usr/local/php/sbin/php-fpm -c /usr/loc ...
最新文章
- Unable to instantiate Action, MenuAction, defined for 'QueryMenuAll' in namespace '/'MenuAction
- 10款微信公众平台相关的开源软件(转)
- https open api_Web上的分享(Share)API
- mysql查看锁表锁进程
- android消息发送字符串,Android aSmack-如何对文件发送进行自定义消息...
- 如何解决Maven导入Oracle驱动出现Missing artifact com.oracle:ojdbc14:jar:10.2.0.2.0,Mvaen:com.oracle:ojdbc14:10.
- 冰蝎工具的最新检测特征
- Zbrush curve Tube ,Move topologica笔刷的使用
- 伦斯勒理工学院计算机科学专业强吗,伦斯勒理工大学CS专业好吗?
- 原创超简单代码(1.21.50)
- 怎么修复网站漏洞 骑士cms的漏洞修复方案
- 你尿尿的时长是不是21秒?2次登上Nature封面的他,靠研究拉尿获得“诺贝尔奖”.........
- 基于html+js实现轮播图(自动轮播、左右按钮、小圆点点击及切换图片)
- Word2013论文的目录和页眉页脚设置
- 【项目分享】使用 PointNet 进行点云分割
- CAN通信标准帧和扩展帧(全网最透彻解答)
- Kmeans聚类K值选择Parametric Bootstrap方法,以及数据重抽样方法Bootstrapping
- 磁盘大于16TB如何做ext4的文件系统
- r语言找不到cochrane函数_网状meta必备技能之6-利用R中的meta包实现meta分析
- 新南威语言班C加,2020年新南威尔士大学语言班学习攻略