linux源码“.config”文件分析

摘要:
在#makemenuconfig中选择使用CONFIG_DM9000,然后在配置文件.config中就会有对应的项设置成为y或者m。在#makeuImage编译内核时,顶层Makefile会根据.config的配置生成两个配置文件:include/linux/autoconf.hinclude/config/auto.conf其中,autoconf.h是C语言头文件主要影响C文件的编译。auto.conf会被顶层Makefile所包含,然后传递到底层Makefile中从而影响到底层文件的编译。2关联文件部分内容展示1、.config##Automaticallygeneratedmakeconfig:don'tedit#Linuxkernelversion:2.6.30.4#WedApr216:21:562014#CONFIG_ARM=yCONFIG_SYS_SUPPORTS_APM_EMULATION=yCONFIG_GENERIC_GPIO=y#CONFIG_PHYLIBisnotsetCONFIG_NET_ETHERNET=yCONFIG_MII=y#CONFIG_AX88796isnotset#CONFIG_SMC91XisnotsetCONFIG_DM9000=yCONFIG_DM9000_DEBUGLEVEL=4#CONFIG_DM9000_FORCE_SIMPLE_PHY_POLLisnotset#CONFIG_ETHOCisnotset#CONFIG_SMC911Xisnotset#CONFIG_SMSC911Xisnotset2、include/linux/autoconf.h*AutomaticallygeneratedCconfig*WedApr216:22:042014:don'tedit*Linuxkernelversion:2.6.30.4*/#defineAUTOCONF_INCLUDED#defineCONFIG_VIDEO_V4L1_COMPAT1#defineCONFIG_HID_CHERRY1#defineCONFIG_FRAME_WARN1024#defineCONFIG_CPU_S3C244X1#defineCONFIG_USB_GSPCA_T6131#defineCONFIG_CPU_COPY_V4WB1#defineCONFIG_MMC_S3C1#defineCONFIG_USB_GSPCA_OV5191#defineCONFIG_DM90001#defineCONFIG_S3C2410_CLOCK1#defineCONFIG_RTC_DRV_S3C1可以看到这个文件是自动生成的,而且有宏定义CONFIG_DM9000,通过这个宏定义就可以影响到包含到该宏的C文件。
转载于:http://www.cnblogs.com/amanlikethis/p/3641097.html

一、.config文件概述

.config文件是linux内核配置文件,当执行#make uImage编译生成内核时,顶层的Makefile会读取.config文件的内容,根据这个配置文件来编译所定制的内核。

二、.config文件关联

1 文件关联图

以CONFIG_DM9000为例进行说明。

linux源码“.config”文件分析第1张

在#make menuconfig中选择使用CONFIG_DM9000,然后在配置文件.config中就会有对应的项设置成为y或者m。

在#make uImage编译内核时,顶层Makefile会根据.config的配置生成两个配置文件:

include/linux/autoconf.h

include/config/auto.conf

其中,autoconf.h是C语言头文件主要影响C文件的编译。

auto.conf会被顶层Makefile所包含,然后传递到底层Makefile中从而影响到底层文件的编译。

2 关联文件部分内容展示

1、.config

复制代码
# #Automaticallygeneratedmakeconfig:don'tedit#Linuxkernelversion:2.6.30.4 #WedApr216:21:562014 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y CONFIG_GENERIC_GPIO=y #CONFIG_PHYLIBisnotset CONFIG_NET_ETHERNET=y CONFIG_MII=y #CONFIG_AX88796isnotset #CONFIG_SMC91Xisnotset CONFIG_DM9000=y CONFIG_DM9000_DEBUGLEVEL=4 #CONFIG_DM9000_FORCE_SIMPLE_PHY_POLLisnotset #CONFIG_ETHOCisnotset #CONFIG_SMC911Xisnotset #CONFIG_SMSC911Xisnotset
复制代码

2、include/linux/autoconf.h

复制代码
*AutomaticallygeneratedCconfig*WedApr216:22:042014 :don'tedit *Linuxkernelversion:2.6.30.4 */ #defineAUTOCONF_INCLUDED #defineCONFIG_VIDEO_V4L1_COMPAT1 #defineCONFIG_HID_CHERRY1 #defineCONFIG_FRAME_WARN1024 #defineCONFIG_CPU_S3C244X1 #defineCONFIG_USB_GSPCA_T6131 #defineCONFIG_CPU_COPY_V4WB1 #defineCONFIG_MMC_S3C1 #defineCONFIG_USB_GSPCA_OV5191 #defineCONFIG_DM90001 #defineCONFIG_S3C2410_CLOCK1 #defineCONFIG_RTC_DRV_S3C1
复制代码

可以看到这个文件是自动生成的,而且有宏定义CONFIG_DM9000,通过这个宏定义就可以影响到包含到该宏的C文件。

3、arch/blackfin/mach-bf533/boards/H8606.c

复制代码
*Driverneedstoknowaddress,irqandflagpin. */ #ifdefined(CONFIG_DM9000)||defined(CONFIG_DM9000_MODULE) staticstructresourcedm9000_resources[]={ [0]={ .start=0x20300000, .end=0x20300002, .flags=IORESOURCE_MEM, }, [1]={ .start=0x20300004, .end=0x20300006, .flags=IORESOURCE_MEM, }, [2]={ .start=IRQ_PF10, .end=IRQ_PF10, .flags=(IORESOURCE_IRQ|IORESOURCE_IRQ_HIGHEDGE|IRQF_SHARED|IRQF_TRIGGER_HIGH), }, };
staticstructplatform_devicedm9000_device={ .id=0, .name="dm9000", .resource=dm9000_resources, .num_resources=ARRAY_SIZE(dm9000_resources), }; #endif
复制代码

上一步生成的宏就会影响到包含宏CONFIG_DM9000的文件的编译。笔者觉得通常这类C文件“可能是”用到了DM9000的功能,可以选择“添加”或者“去掉”,这正是autoconf.h中的宏定义存在的意义。

4、include/config/auto.conf

复制代码
#Automaticallygeneratedmakeconfig:don'tedit#Linuxkernelversion:2.6.30.4 #WedApr216:22:042014 # CONFIG_VIDEO_V4L1_COMPAT=m CONFIG_HID_CHERRY=y CONFIG_PLAT_S3C=y CONFIG_USB_GSPCA_OV519=y CONFIG_DM9000=y CONFIG_S3C2410_CLOCK=y CONFIG_RTC_DRV_S3C=y
复制代码

auto.conf也是自动生成的,这个文件被Makefile所包含,它会影响到模块功能是否被添加,以何种方式添加。

5、drivers/net/Makefile

obj-$(CONFIG_BFIN_MAC)+=bfin_mac.o obj-$(CONFIG_DM9000)+=dm9000.o

在编译内核的模块时,将模块的编译划分为三类:

obj-y代表该模块以静态的方式编译进内核中

obj-m代表该模块被编译在内核之外,用到的时候需要手动加载

obj-代表该模块不被编译

例如,drivers/net/Makefile根据auto.conf以静态的方式编译DM9000。

免责声明:文章转载自《linux源码“.config”文件分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇odoo使用笔记Java几种常用JSON库性能比较下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux操作系统的安装以及基本的操作命令详解

背景:使用的虚拟机安装Linux  虚拟机使用的是VMware  Linux版本:CentOS-6.7-X86    自行下载:CentOS-6.7-x86_64-bin-DVD1.iso 打开VMware -> 文件 - 》新建虚拟机  -》选择典型 - 下一步 -》选择第三个稍后安装 -下一步 -》选择Linux -下一步 -》虚拟机名称,位置,自...

Python编程软件的安装与使用——Windows、Linux和Mac

Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ        最近,有读者透露:Python软件如何安装?为什么自己安装的软件会有各种“奇怪”的问题?据此,本篇随笔将具体讲述如何安装Python 3.x版本的软件。特别地,篇中所述的不是安装文本编辑器(比如Notepad++,Sublimetext,PyCharm.......

linux 没有yum命令,安装yum命令的方法

先说背景, 2020/12/26买了一个国外的linux云服务器, centos 7  64位,想用yum命令安装jdk环境,结果发现没有yum这个命令,这下操蛋了. 于是乎,百度,发现很多都是没有用的.说的不好听点,都是浪费时间的垃圾教程. 装个yum,搞了几个小时,原来自己是这么的菜, 但是,自己菜是一方面,我感觉这几年网络上乱七八糟的东西太多了.已经...

创建SFTP用户并指定访问目录 Linux

1、创建登录用户及用户组 --可以根据自身磁盘挂载情况制定用户home目录 -d 选项 groupadd test1mkdir -p /data/test1 useradd test1 -g test1 -d /data/test1 echo "123" |passwd --stdin test1 &>/dev/null 2、vim /etc...

Android : 修改内核源码 and 编译、打包成新的boot.img

一、Android内核源码的下载: 1.Google GIT地址: $ git clone https://android.googlesource.com/kernel/common.git   $ git clone https://android.googlesource.com/kernel/exynos.git   $ git clone htt...

SpringCloud系列之配置中心(Config)使用说明

大家好,最近公司新项目采用SpingCloud全家桶进行开发,原先对SpringCloud仅仅只是停留在了解的初级层面,此次借助新项目的契机可以深入实践下SpringCloud,甚是Happy。大学毕业刚入职的时候就有想写技术文章的想法,蹉跎蹉跎都那么些年过去了,期间所遇到的问题都图方便随手保存在了有道云笔记这个狭小的空间中,记了这么多也要见见光了,后续有...