linux内核中增加驱动程序要完成3个方面的工作

1.将编写的源代码拷贝到Linux内核源代码相应目录

2.在目录的Kconfig文件中增加关于源代码的相应目录

3.在目录的Makefile文件中增加对新源代码的编译条目





扫盲点:

Makefile:分布在Linux内核源代码中的Makefile,定义Linux内核的编译规则

Kconfig:给用户提供配置选择的功能




当你执行makemenuconfig命令的时候会根据你所选择的配置生成一个.config文件,此文件中记录着哪部分应该编译进内核,哪部分应该编译为内核模块。


 

 

当你执行makezImage的编译内核时,就会根据此.config文件编译相应的内核模块







 


Kconfig文件的编写:

(1).菜单入口

configMODVERSIONS

bool“Module versioning support”

help

Usually,youhave to use modules compiled your kernel

SayingY here makes it …


“config”关键字定义新的配置选项,之后的几行定义了该配置选项的属性




选项类型:

每个配置选项都必须指定类型:booltrisate string hex int


提示:

类型定义后可以紧跟提示

:


bool“Networking support”

boolprompt “Networking supporting”

提示的一般格式为:

prompt<prompt> [if<expr>]

默认值格式为:

default<expr>[if<expr>]

一个配置可以存在任意多个值,在这种情况下只有第一个被定义的值是可用的


依赖:

if[<expr>]也可以由dependson <expr>来代替



选择关系:

select<B> [if<A>]

如果A被选中B默认也被选中

数据范围:

range<symbol> <symbol> [if<expr>]

注意symbol只能是inthex类型



帮助信息:

help(---help---)

。。。。

    


(2).菜单结构

菜单入口口在菜单结构中的位置可以由两种方法决定

第一种为:

menu“Network device support”

dependsin NET

cnfigNETDEVICES

  

endmenu

所有处于”menu”和“endmenu”之间的菜单入口都会成为“Networkdevice support”的子菜单



第二种为:

通过分析依赖关系生成菜单结构

configMODULES

bool“Enable loadable module support”

configMODVERSIONS

bool“Set version information on all module symbols”

dependson MODULES

上述MODVERSIONS直接依赖于MODULES,只有MODULES不为”n”时,该选项才可见




Kconfig中的其他属性:

1.choice

choice

<choiceoptions>

<choiceblock>

endchoice

例如在drivers/video/samsung/Kconfig中就定义了如下choice

 







//实例:在内核中新增驱动代码目录和字目录


现在我们要在drivers目录下为ARM体系增加test_driver驱动

目录结构如下:








我们在makemenuconfig中增加一个它的选项


首先,我们需要为test目录增加一个Kconfig


假设我们要增加两个菜单选项

1.CONFIG_TEST

当用户选中它时会编译test目下的test.ctest_queue.o test_client.c生成对应的模块文件


2.CONFIG_TEST_CPU

当用户选中它时会编译cpu目录下的cpu.c生成对应的模块文件


Kconfig文件的编写:


其中CONFIG_TEST_CPU依赖于CONFIG_TEST




这样Kconfig文件就算编译好了,然后我们在linux2.6/arm/Kconfig文件中将将刚才我们编写好的Kconfig包好进去

source“drivers/test/Kconfig”


这样当你在内核目录下执行makemenuconfig的时候就会看到如下选项



点击进入后


当我们选中TESTsupport后又会产生一个新的选项







菜单项我们编写好了,下面就是Makefile文件的编写

首先需要编写test下的Makefile文件



其中

obj-$(CONFIG_TEST_CPU) += cpu


表示当我们选中CONFIG_TEST_CPU选项时就进入cpu目录下执行cpu下的Makefile文件




所以我们还要为cpu目录下的.c文件编写一个Makefile文件




这样当你在makemenuconfig中选中了TESTdriver中某一项时在编译内核时就会编译生成对应的内核模块到内核镜像中

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐