您的位置:首页 > 其它

编译内核(添加驱动)

2008-04-23 18:10 260 查看
6、添加驱动到linux内核(”实验源码”目录中包括已经修改好的相关文件)

对于一个开发者来说,将自己开发的内核代码添加到 Linux 内核中,需要有三个步骤。(1)确定把自己的开发代码放入到内核的位置;

(2)把自己开发的功能增加到 Linux 内核的配置选项中,使用户能够选择此功能

(3)构建子目录 Makefile,根据用户的选择,将相应的代码编译Linux 内核中。

下面,我们就通过一个简单的例子-XSBASE Simple Driver,结合前面学到的知识,来说明如何将前面设计的驱动加入到 Linux 内核。

6.1、主要步骤

l 在确定代码位置的前提下,建立源码目录、文件、Makefile、Config.in等。

l 修改上层的config.in文件,把新增驱动添加到内核配置系统中。

l 修改上层Makefile,将程序添加到内核编译系统中。

6.2、驱动位置和目录结构

假设将xsbase 驱动保存到linux源代码的drivers/xsbase/ 目录下:

$ cd drivers/xsbase $ tree . |-- Config.in |-- Makefile |-- XSB_EDR_8LEDS.c

6.3、编辑配置文件

(1)编辑xsbase目录下的配置文件Config.in

由于 xsbase驱动对于linux内核来说是新增加的功能,所以首先在配置选项上创建一个XSBASE Simple Driver菜单;选中该菜单后,显示 "XSB_EDR_8LED Support"提示信息,等待用户选择,这里的询问语句使用了 tristate(因为 tristate 的取值范围包括 y、n 和 m,其中m 就是对应着模块)。

# #XSB_EDR_8LED driver configutation # mainmenu_option next_comment comment 'XSBASE Simple Driver' tristate 'XSB_EDR_8LED Support' CONFIG_XSB_EDR_8LED endmenu

(2)编辑修改CPU体系目录下的配置文件

由于本实验采用ARM体系结构,所以应对 arch/arm/config.in文件进行修,具体修改方法是:在文件的最后加入:source drivers/xsbase/Config.in,将XSBASE Driver 子功能的配置添加到 Linux 内核的配置中。

6.4 Makefile的修改与编辑

(1)编辑xsbase目录下的配置文件Makefile文件

# drivers/xsbase/Makefile # # Makefile for the XSB_EDR_8LED # O_TARGET := XSB_EDR_8LED.o obj-$(CONFIG_XSB_EDR_8LED) += XSB_EDR_8LEDS.o include $(TOPDIR)/Rules.make

(2)drivers/Makefile

…… subdir-$(CONFIG_ARCH_AT91RM9200) += at91 subdir-$(CONFIG_XSB_EDR_8LED) += xsbase …… include $(TOPDIR)/Rules.make

在drivers/Makefile 中加入subdir-$(CONFIG_XSB_EDR_8LED) += xsbase,使得在用户选择XSB_EDR_8LED Support 功能后,内核编译时能够进入xsbase目录。

(3)Makefile

…… DRIVERS-$(CONFIG_PLD) += drivers/pld/pld.o DRIVERS-$(CONFIG_ARCH_AT91RM9200) += drivers/at91/at91drv.o DRIVERS-$(CONFIG_XSB_EDR_8LED) += drivers/xsbase/XSB_EDR_8LED.o DRIVERS := $(DRIVERS-y) ……

在顶层 Makefile 中加入DRIVERS-$(CONFIG_XSB_EDR_8LED) += drivers/xsbase/XSB_EDR_8LED.o。如果用户选择了XSB_EDR_8LED Support,那么CONFIG_XSB_EDR_8LED的值是 y,XSB_EDR_8LED.o就位于 DRIVERS-y 列表中,然后又被放置在 DRIVERS 列表中。在前面曾经提到过,Linux 内核文件 vmlinux 的组成中包括 DRIVERS,所以XSB_EDR_8LED.o最终可被链接到 vmlinux 中。

6.5 关于测试程序

测试程序位于目录test_prog中。可以使用arm-linux-gcc编译后放到目标板上,用于对新增驱动的测试。程序运行的效果是,调用新增的驱动控制底板上的8个LED灯,让这8个LED灯有规律的闪烁。

通过本实验我们从整体上去浏览了内核,2.4版本的内核代码量很大,但我们从整体去领会内核的特点。了解内核源代码中各个目录的关系和内容,这对了解内核很有帮助。除外我们还从另一个角度来了解内核,就是内核的配置系统结构,了解Makefile和配置文件config.in的含义,还详细介绍内核各个选项的含义。最后通过一个简单的实验例子,具体说明如何将自行开发的代码加入到Linux内核中。

【实验仪器】

1、装有Linux操作系统的PC机一台;

2、XSBase270或XSBase255 ARM实验开发平台一套

【实验内容】

1、内核编译实验

(1)、利用光盘上提供的Linux源代码,具体分析递归性makefile的结构,画出一个从最顶层makefile到最底层所经过的文件路径和所需要的变量

(2)、利用光盘上提供的Linux源代码,写出编译Linux内核的具体过程

(3)、利用光盘上提供的Linux源代码,然后用make menuconfig命令对内核的配置进行修改,记下具体修改的配置选项并保存退出,然后用diff命令比较.config和.oldconfig.old两个新旧配置的差别,同时与记下的配置选项进行比较,根据比较结果,写出你的结论。

2、驱动加载实验

(1)、将光盘上提供的LED 显示驱动源代码加入到Linux内核中,写出加入新驱动到Linux内核中的步骤和所需要修改的文件。根据修改过程画出在编译Linux内核某一驱动的流程。

【思考题】

1、简述Linux源代码各目录中的内容,

2、分析make config、make menuconfig、make xconfig三个linux内核配置界面的区别

3、指出linux内核编译命令make,make zImage, make bzImage的区别

4、下载一个Linux 2.6内核,查看它们的内核各项配置项的内容。

5、请针对内核的目录绘制一个树形结构图?请分析Linux内核面临许多新的变化是怎么将内核组织的很简洁和具有很好的扩展性。

6、简述将新增设备驱动源代码添加到linux内核中的步骤
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: