总体概述

配置详解

配置的最终目的,是生成了.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

内核启动流程分析(二)配置详解相关推荐

  1. php-fpm 启动参数及重要配置详解

    2019独角兽企业重金招聘Python工程师标准>>> php-fpm 启动参数及重要配置详解 约定几个目录 /usr/local/php/sbin/php-fpm /usr/loc ...

  2. 一起分析Linux系统设计思想——03内核启动流程分析(六)

    在学习资料满天飞的大环境下,知识变得非常零散,体系化的知识并不多,这就导致很多人每天都努力学习到感动自己,最终却收效甚微,甚至放弃学习.我的使命就是过滤掉大量的垃圾信息,将知识体系化,以短平快的方式直 ...

  3. Linux内核启动流程分析(一)【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-3380535.html 很久以前分析的,一直在电脑的一个角落,今天发现贴出来和大家分享下.由于是word直接 ...

  4. 低温linux内核启动readl,Linux内核启动流程分析(一)

    很久以前分析的,一直在电脑的一个角落,今天发现贴出来和大家分享下.由于是word直接粘过来的有点乱,敬请谅解! S3C2410 Linux 2.6.35.7启动分析(第一阶段) 1.依据arch/ar ...

  5. Android Telephony分析(二) ---- RegistrantList详解

    前言 本文主要讲解RegistrantList的原理,以及如何快速分析RegistrantList相关的代码流程.  在Telephony模块中,在RIL.Tracker(ServiceStateTr ...

  6. Linux内核启动流程分析(二)【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-3380544.html S3C2410 Linux 2.6.35.7启动分析(第二阶段) 接着上面的分析,第 ...

  7. 内核启动流程分析(一)编译体验

    目录 2.打补丁 3.配置 总结 配置方式 配置体验 4.编译 链接 链接脚本 5.烧写内核 1.总体概述 2.打补丁 解压 tar xjf linux-2.6.22.6.tar.bz2 打补丁,ca ...

  8. 韦东山衔接班——3.4_linux内核启动流程分析之内核启动

    作者:GWD 时间:2018.8.25 一.汇编部分到第一个C之前准备 1.问:内核的工作 答 2.问:为什么有两个head.S 答:其中一个是自解压代码,运行时先解压内核 3.uboot中将参数写入 ...

  9. PHP性能调优---php-fpm - 启动参数及重要配置详解

    一,php-fpm的启动参数   #测试php-fpm配置 /usr/local/php/sbin/php-fpm -t /usr/local/php/sbin/php-fpm -c /usr/loc ...

最新文章

  1. Unable to instantiate Action, MenuAction, defined for 'QueryMenuAll' in namespace '/'MenuAction
  2. 10款微信公众平台相关的开源软件(转)
  3. https open api_Web上的分享(Share)API
  4. mysql查看锁表锁进程
  5. android消息发送字符串,Android aSmack-如何对文件发送进行自定义消息...
  6. 如何解决Maven导入Oracle驱动出现Missing artifact com.oracle:ojdbc14:jar:10.2.0.2.0,Mvaen:com.oracle:ojdbc14:10.
  7. 冰蝎工具的最新检测特征
  8. Zbrush curve Tube ,Move topologica笔刷的使用
  9. 伦斯勒理工学院计算机科学专业强吗,伦斯勒理工大学CS专业好吗?
  10. 原创超简单代码(1.21.50)
  11. 怎么修复网站漏洞 骑士cms的漏洞修复方案
  12. 你尿尿的时长是不是21秒?2次登上Nature封面的他,靠研究拉尿获得“诺贝尔奖”.........
  13. 基于html+js实现轮播图(自动轮播、左右按钮、小圆点点击及切换图片)
  14. Word2013论文的目录和页眉页脚设置
  15. 【项目分享】使用 PointNet 进行点云分割
  16. CAN通信标准帧和扩展帧(全网最透彻解答)
  17. Kmeans聚类K值选择Parametric Bootstrap方法,以及数据重抽样方法Bootstrapping
  18. 磁盘大于16TB如何做ext4的文件系统
  19. r语言找不到cochrane函数_网状meta必备技能之6-利用R中的meta包实现meta分析
  20. 新南威语言班C加,2020年新南威尔士大学语言班学习攻略

热门文章

  1. android 实现微信分享多张图片的功能
  2. JavaScript的类型、值和变量
  3. JQuery源码解析-整体架构的设计
  4. cherry-pick,revert和rebase使用的3-way合并策略
  5. struts2处理请求流程详解
  6. js 解析 url参数中文的情况
  7. C语言关键字 - 铁布衫:const
  8. UA MATH567 高维统计 专题0 为什么需要高维统计理论?——高维统计理论的常用假设
  9. Windows和Virtualbox虚拟机之间拷贝文件
  10. jsp动作元素include学习