编译内核(添加驱动)
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内核中的步骤
对于一个开发者来说,将自己开发的内核代码添加到 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内核中的步骤
相关文章推荐
- mini2440添加步进电机驱动,并把驱动编译到内核中
- 在LINUX中添加按键的驱动并编译进入内核
- 静态编译内核添加驱动(ARM7)
- 编译时向内核添加新设备 模块的方式动态的将驱动加入内核,但这种方式加入的驱动程序,当系统重新启动时, 还需要重新用模块的方式进行插入,如果是系统内常用的设备驱动采用这种方式进行加载, 就会很不方便。
- 编译内核(添加驱动)
- 如何把一个自己写的外部驱动模块编译添加到内核中 来自网络
- linux内核编译与系统调用的添加(适合3.0及以后版本内核)
- 编译WinCE 5.0内核和驱动
- Linux-2.6.32.2内核在mini2440上的移植(六)---添加LCD背光驱动
- 如何把自己的驱动编译进内核或模块 .
- linux(gentoo)内核编译-intel无线网卡驱动
- 在linux-2.6.29.1内核中修改添加DM9000的驱动
- 往android的内核添加驱动(其实就是添加linux内核驱动)
- [linux设备驱动程序]scull字符设备驱动编译在新内核编译问题解决方案
- 为Android内核添加新驱动,并添加到menuconfig菜单
- 设置编译内核lib驱动及应用层dll的source文件 推荐
- 基于linux2.6.30.4内核的DM9000网卡驱动编译成模块成功ping通
- 【Linux】Linux添加系统调用以及内核编译过程
- linux内核编译 驱动测试
- real6410移植linux2.6.39.4内核(2)-添加nand flash驱动及启动cramfs文件系统