满意答案

大大bigone

推荐于 2017.11.22

采纳率:52%    等级:9

已帮助:813人

一、Linux内核的配置系统由三个部分组成,分别是:

1、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则;

2、配置文件(config.in(2.4内核,2.6内核)):给用户提供配置选择的功能;

3、配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。本文并不是对配置系统本身进行分析,而是介绍如何使用配置系统。所以,除非是配置系统的维护者,一般的内核开发者无须了解它们的原理,只需要知道如何编写 Makefile 和配置文件就可以。

二、Make menuconfig过程分析

1、scripts文件夹存放的是跟make menuconfig配置界面的图形绘制相关的文件,我们作为使用者无需关心这个文件夹的内容

2、读取arch/arch/$ARCH/Kconfig以及各子目录下的Kcondig文件,生成配置条目。

$ARCH由linux内核根目录下的makefile文件决定

ARCH ?= arm

CROSS_COMPILE ?= arm-linux-

Kconfig文件中为配置信息的宏定义,与我们在make menuconfig图形界面看到的信息一致。

例如:

config CPU_S3C2410_DMA

bool

depends on S3C2410_DMA && (CPU_S3C2410 || CPU_S3C2442)

default y if CPU_S3C2410 || CPU_S3C2442

help

DMA device selection for S3C2410 and compatible CPUs

因此,Kconfig文件很重要的作用就是:定义配置宏、相关依赖关系、帮助信息

3、读取内核根目录下.config文件,生成配置选项:[*]编译进内核 [M]编译为模块 [ ]不编译

arch/arm/configs/文件夹下存放了一些配置模板

我们可以通过cp /arch/arm/configs/xx_defconfig .config来使用这些配置模板

通过图形界面变更配置选项会自动更新到.config文件中

make disclean 会删除.config

4、编译过程根据.config生成 Linux内核根目录下的 include/config/auto.conf文件

CONFIG_EEPROM_93CX6=m

CONFIG_DM9000=y

根目录Makefile以及子目录的Makefile根据auto.conf生成编译条件

obj-$(CONFIG_DM9000) += dm9000.o //obj-m += dm9000.o

5、编译过程根据.config生成Linux内核根目录下的 include/linux/autoconf.h文件

.config 或 auto.conf 中定义要编译为 m 模块的项,如:

CONFIG_DEBUG_NX_TEST=m

在 autoconf.h 中会被定义为:

#define CONFIG_DEBUG_NX_TEST_MODULE 1

.config或auto.conf 中定义为编译为 y 的选项,如:

CONFIG_DM9000= y

在 autoconf.h 中会被定义为:

#define CONFIG_DM9000 1

autoconf.h中是.config或者auto.conf中配置信息的另一种体现形式,它是站在源码的角度,供源码使用的C语言宏定义。

6、总结

我们在使用make menuconfig时,首先会确定架构arch,然后读取arch目录的Kconfig中的配置宏定义,生成编译条目,然后读取Linux内核根目录下的.config选项, 将.config中的配置信息显示在图形界面上[*] [M] or []。我们在图形界面中更改配置选项会自动保存到.config文件中。编译过程根据.config随后生成auto.conf文件,它决定了makefile中各个文件的编译类型,静态编译进内核、编译成模块、不编译;同时生成autoconf.h,它以C语言宏定义的形式表达了 各个文件是否被编译,源码中会判断某文件是否被编译进行不同的处理。

三、将自定义文件添加进内核配置系统

1、修改文件目录下Kconfig文件

添加:

config HELLO

tristate "just a test hello"

default y

---help---

This is a test

//tristate 或 bool 表示可选择种类数量3[*][M][ ]、2

// "just a test hello"将作为标题显示在配置的图形界面

2、修改文件目录下makefile文件

obj-$(CONFIG_HELLO) += hello_drv.o

3、make menuconfig 我们会在字符设备驱动的界面看到 ust a test hello 并且默认编译进内核

4、make编译内核发现

autoconfig.h 自动添加 #define CONFIG_HELLO 1

auto.conf 自动添加 CONFIG_HELLO=y

01分享举报

Linux内核defconfig在哪,Linux内核根目录中的配置文件.config中包含了许多宏定义,...相关推荐

  1. Exynos4412 内核移植(二)—— 内核编译过程分析

    内核的编译同样是从Makefile 来分析: 一.内核源码结构 Linux内核文件数目近2万,出去其他架构CPU的相关文件,他们分别位于顶层目录下的17个子目录,各个目录功能独立,下面是常用目录: a ...

  2. linux内核开发基础(linux内核源码、树莓派源码编译、SD卡挂载)

    首先下载树莓派linux内核源码: 下载网址:https://github.com/raspberrypi/linux 在树莓派使用指令:uname -r查看当前树莓派的版本号,然后选择对应的linu ...

  3. linux内核设计与实现---从内核出发

    获取.编译.安装内核 1 获取内核源码 安装内核源代码 何处安装源码 使用补丁 2 内核源码树 3 编译内核 减少编译的垃圾信息 衍生多个编译作业 安装内核 启用指定内核作为引导 4 内核开发的特点 ...

  4. Linux内核入门-如何获取Linux内核源代码、生成配置内核

    如何获取Linux内核源代码 如何获取Linux内核源代码 下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux内核,另一种是内核增量补丁,它们都是tar归档压缩包.除 ...

  5. linux 0.11根文件系统,linux内核与根文件系统之间的关联的理解

    学者 于 2011-10-19 12:46:08发表: 哦,原来还有一个initrd镜像,后缀名为".img",我一直以为只有一个内核镜像呢: 还有引导程序的路径表示与系统不同啊! ...

  6. linux 内核空间 sy,在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysf...

    级别: 初级 燚 杨 (), 计算机科学硕士 2006 年 2 月 16 日 本系列文章包括两篇,它们文详细地介绍了 Linux 系统下用户空间与内核空间数据交换的九种方式,包括内核启动参数.模块参数 ...

  7. LinuX编译显示内核配置无效,配置编译内核(Linux kernel)

    虽然以前也编译过内核,但是关于内核配置选项特别是有关本机驱动这块还是不熟悉,因为没有通过确定有效的途径知道当前工作正常的内核中到底使用了什么驱动模块来控制硬件,最近看到一本书<Linux ker ...

  8. Linux 内核编译 LOCALVERSION 配置(分析内核版本号自动添加的“+“号)

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大 ...

  9. linux内核imx6,imx6ull之linux内核移植

    imx6ull开发环境之系统安装请参考:https://www.cnblogs.com/gxlblogs/p/14382547.html imx6ull交叉编译工具链安装 请参数:https://ww ...

最新文章

  1. 王道考研 计算机网络笔记 第五章:传输层
  2. 演义群侠传(七)【GC垃圾回收】
  3. dao传递类参数 mybatis_MyBatis DAO层传递参数到mapping.xml 几种方式
  4. 虚拟技术必须解决的问题_VR/3D虚拟实验室亮相重庆市初中物理青年教师优质课大赛...
  5. 接口请求(get、post、head等)详解
  6. AIR文件上传与文件断点续传方式下载
  7. Hadoop 的常用组件一览
  8. 小程序菜鸟的父子组件传值、父子组件方法调用的学习
  9. aloha协议c语言实现,任务ALOHA协议的OPNET仿真.doc
  10. 腾讯企业邮箱服务器地址和端口号备忘
  11. bios対初学者_初学者的BIOS
  12. 任务管理器不显示磁盘
  13. 解决图片按顺序加载问题
  14. php java sha1_PHP 种的 SHA1WithRSA
  15. css显示苹方字体,苹方字体合集
  16. 宅男程序员给老婆的计算机课程之5:设计模式
  17. 魔坊APP项目-23-种植园,宠物和种植物的状态改变、宠物的状态改动
  18. 应用在低功耗SMPS中的GaN/氮化镓
  19. 【Android笔记65】Android小案例之简易版的房贷计算器(附源代码)
  20. 教你用晨曦记账本记录借还款的钱

热门文章

  1. c语言删除文件remove_C程序删除文件
  2. 中考计算机考试作文,中考理化实验计算机考试作文
  3. arcgis dem栅格立体感_如何使用ArcGIS从DEM数据中提取水系
  4. Linux是不是共享软件,linux – 是否有可能在应用程序之间共享Cuda上下文?
  5. OpenCV计算机视觉实战(Python版)资源
  6. Windows2012中安装域控(DC) + SQL Server 2014 + TFS 2015
  7. spring boot入门,看这篇文章就够了
  8. 中介者模式(Mediator Pattern)
  9. 解决Flex/Flash跨域访问出现的安全沙箱问题
  10. 北京规定6类高级人才来京最高奖励30万元