现在的位置: 首页 > 综合 > 正文

向内核添加一个新驱动

2013年05月01日 ⁄ 综合 ⁄ 共 1285字 ⁄ 字号 评论关闭

2.6内核的源码树目录下一般都会有两个文件:Kconfig和Makefile。
Kconfig为某一目录下的配置文件,在内核配置make menuconfig(或xconfig等)时,会遍历Kconfig中读出相应的用户配置完,然后保存到.config(在顶层目录下生成)中。然后make时调用这个.config,作为这个内核的配置。
Makefile就不说了,大家都知道
因此,一般添加新的驱动时需要修改的文件主要是这两个

首先Kconfig每个菜单项都有一个关键字标识,最常见的就是config。

语法:
config symbol
options
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

symbol就是新的菜单项,options是在这个新的菜单项下的属性和选项
其中options部分有:
1、类型定义:
每个config菜单项都要有类型定义,bool:布尔类型, tristate三态:内建、模块、移除, string:字符串, hex:十六进制, integer:整型
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---
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

第二步,Makefile文件
一般只需要在该文件中加入Kconfig中对应的配置项,并知名相关联的**.o文件即可

最后举个例子:
假设想把自己写的一个char驱动程式加载到工程中,而且能够通过menuconfig配置内核时选择该驱动。
分三步:
第一:将您写的chartest.c 文档添加到/driver/char/ 目录下。
第二:修改/driver/char/目录下的kconfig文档:
config TEST_CHAR
 bool "add a char driver" //这句将会出现在make menconfig时 driver/character/下
 default y
第三:修改该目录下makefile文档。
添加如下内容:obj-$(CONFIG_TEST_CHAR)    += chartest.o

这样,当您运行make menucofnig时,您将发现"add a char driver"选项,默认是选上的。
这种做法是直接编译进内核,还有一种是编译为模块,就是使用tristate配置

【上篇】
【下篇】

抱歉!评论已关闭.