2.6
内核的源码树目录下一般都会有两个文文:
Kconfig
和
Makefile
。分布在各目录下的
Kconfig
构成了一个分布式的内核配置数据库,每个
Kconfig
分别描述了所属目录源文件相关的内核配置菜单。在内核配置
make menuconfig(
或
xconfig
等
)
时,从
Kconfig
中读出配置菜单,用户配置完后保存到
.config(
在顶层目录下生成
)
中。在内核编译时,主
Makefile
调用这个
.config
,就知道了用户对内核的配置情况。
上面的内容说明:
Kconfig
就是对应着内核的配置菜单。假如要想添加新的驱动到内核的源码中,可以通过修改
Kconfig
来增加对我们驱动的配置菜单,这样就有途径选择我们的驱动,假如想使这个驱动被编译,还要修改该驱动所在目录下的
Makefile
。
因此,一般添加新的驱动时需要修改的文件有两种(注意不只是两个)
*Kconfig
*Makefile
要想知道怎么修改这两种文件,就要知道两种文档的语法结构。
First:
Kconfig
每个菜单项都有一个关键字标识,最常见的就是
config
。
语法:
config symbol
options
symbol
就是新的菜单项,
options
是在这个新的菜单项下的属性和选项
其中
options
部分有:
1
、类型定义:
每个
config
菜单项都要有类型定义,
bool
:布尔类型,
tristate
三态:内建、模块、移除,
string
:字符串,
hex
:十六进制,
integer
:整型
例如
config
HELLO_MODULE
bool "hello test module"
bool
类型的只能选中或不选中,
tristate
类型的菜单项多了编译成内核模块的选项,假如选择编译成内核模块,则会在
.config
中生成一个
CONFIG_HELLO_MODULE=m
的配置,假如选择内建,就是直接编译成内核影响,就会在
.config
中生成一个
CONFIG_HELLO_MODULE=y
的配置
.
2
、依赖型定义
depends
on
或
requires
指此菜单的出现是否依赖于另一个定义
config HELLO_MODULE
bool "hello test module"
depends on ARCH_PXA
这个例子表明
HELLO_MODULE
这个菜单项只对
XScale
处理器有效,即只有在选择了
ARCH_PXA
,
该菜单才可见
(
可配置
)
。
3
、帮助性定义
只是增加帮助用关键字
help
或
---help---
更多详细的
Kconfigconfig
语法可参考:
Second:
内核的
Makefile
内核的
Makefile
分为
5
个组成部分:
Makefile
最顶层的
Makefile
.config
内核的当前配置文档,编译时成为顶层
Makefile
的一部分
arch/$(ARCH)/Makefile
和体系结构相关的
Makefile
s/ Makefile.*
一些
Makefile
的通用规则
kbuild Makefile
各级目录下的大概约
500
个文档,编译时根据上层
Makefile
传下来的宏定义和其他编译规则,将源代码编译成模块或编入内核。
顶层的
Makefile
文档读取
.config
文档的内容,并总体上负责
build
内核和模块。
Arch Makefile
则提供补充体系结构相关的信息。
s
目录下的
Makefile
文档包含了任何用来根据
kbuild Makefile
构建内核所需的定义和规则。
(其中
.config
的内容是在
make menuconfig
的时候,通过
Kconfig
文档配置的结果)
在
linux2.6.x/Documentation/kbuild
目录下有详细的介绍有关
kernel makefile
的知识。
最后举个例子:
假设想把自己写的一个
flash
的驱动程式加载到工程中,而且能够通过
menuconfig
配置内核时选择该驱动该怎么办呢?能够分三步:
第一:将您写的
flashtest.c
文档添加到
/driver/mtd/maps/
目录下。
第二:修改
/driver/mtd/maps
目录下的
kconfig
文档:
config MTD_flashtest
tristate “ap71 flash"
这样当
make
menuconfig
时
,将会出现
ap71 flash
选项。
第三:修改该目录下
makefile
文档。
添加如下内容:
obj-$(CONFIG_MTD_flashtest)
+= flashtest.o
这样,当您运行
make
menucofnig
时,您将发现
ap71
flash
选项,假如您选择了此项。该选择就会保存在
.config
文档中。当您编译内核时,将会读取
.config
文档,当发现
ap71 flash
选项为
yes
时,系统在调用
/driver/mtd/maps/
下的
makefile
时,将会把
flashtest.o
加入到内核中。即可达到您的目的。
分享到:
相关推荐
Linux内核源码树的每个目录下都有两个文档Kconfig和Makefile。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单。在执行内核配置make menuconfig时...
linux kconfig详解,在嵌入式中,有很多的问题在这份文档中是可以得到解决的!
为了探索Linux内核是如何编译的,本文将深入研究Kconfig/kBuild内部进程,解释.config文件和vmlinux/bzImage文件是如何生成的,并介绍一个用于依赖性跟踪的智能技巧。 Kconfig 构建内核的第一步总是配置。Kconfig...
Kconfiglib, 一个灵活的python 2/3 Kconfig分析器和库 目录概述文档文档安装工具安装与 pipLinux内核插件的安装。手动安装工具示例示例脚本示例真实世界示例示例 make iscriptconfig 会话测试套件注释致谢。许可协议...
nuttx官方文档的注释版,里面有我自己个人的一些心得体会,也很可能有错误,希望大家积极反馈,同时有什么发现也可以发消息给我。
使用特定的“ no kconfig” hack修补Zephyr源代码,因为我们改为使用共享的Kconfig文档集,请键入: git -C zephyr apply \ ../bridle/scripts/patches/zephyr/0001-doc-Share-Kconfig-documentation-between-...
gcc中文手册.pdf GNU make.doc The.GNU.C.Library.pdf shell-programming.pdf Kconfig.doc
1.Linux内核配置方式 2.Kconfig 3.Kbuild Makefile 4.一个使用linux Kbuild实现可配置编译的例子
Huawei LiteOS组件仓库,主要存放组件的补丁及相关的sha256校验...新增组件或demo,都需要新建其自身的Kconfig、Makefile、.mk文件,本文档以新增组件为主题,新增demo的方法和新增组件类似,本文档不再赘述。curl-7.5
原创的友善之臂的mini6410 linux-2.6.38内核的uart1 串口驱动,使用platform_device方式,压缩包里面有驱动源代码、编译好了的ko文件、使用说明文档、用户例程的源代码和可执行程序,但是并没有给出直接编译驱动和...
这是一个脚本,用于分区,格式化和安装嵌入式Linux文件。 该工具使用Kconfig设置要安装在USB驱动器或eMMC存储器上的分区大小,格式和文件。 Linux内核和Buildroot使用相同的Kconfig(menuconfig,xconfig或gconfig)...
Kconfig中的帮助文档,而不是自述文件 目录结构 文件路径 描述 生成文件 顶级Makefile。 .config 软件包配置文件。 arch / $(ARCH)/ 架构层 sys / $(平台)/ 平台层 sys / unix / 与Unix和Linux扩展兼容的...
Trustonic T恤司机 Trustonic可信执行环境的Android驱动程序 QEmu / Goldfish模拟器的版本 要构建内核模块: 将trustonic文件夹复制到Linux内核树的'drivers'目录中 相应地更新全局Kconfig和Makefile 构建模块
开始使用OSes/linux-target/kconfig的内核配置文件构建内核准备Linux用户空间映像如果您不想自己构建映像,则可以直接从下载映像。 否则,请使用以下命令在scripts目录中运行脚本: scripts/create-image.sh
2.1.2 修改内核Kconfig文件 2.1.3 修改内核Makefile文件 2.1.4 编译内核驱动程序模块 2.1.5 验证内核驱动程序模块 2.2 开发C可执行程序验证Android硬件驱动程序 2.3 开发Android硬件抽象层模块 2.3.1 ...
2.1.2 修改内核Kconfig文件 2.1.3 修改内核Makefile文件 2.1.4 编译内核驱动程序模块 2.1.5 验证内核驱动程序模块 2.2 开发C可执行程序验证Android硬件驱动程序 2.3 开发Android硬件抽象层模块 2.3.1 硬件...
修改/drivers/的Kconfig 加入 source "drivers/irda/Kconfig" 修改/drivers/的Makefile 加入obj-$(CONFIG_IRDA_DC6008) += irda/ 2.编译kernel。 3. 测试代码: 在终端下先查看是否有/sys/class/sec/sec_ir,然后...
内核文档 ................................................................................................................................ 32 经典书籍 .....................................................