嵌入式Linux网络驱动程序开发设计
3 将设备驱动模块编译进内核
设计好模块化的网络驱动程序后,我们就可以编译这个内核模块,并将这个自定义的内核模块作为Linux系统源码的一部分编译出新的系统。下面介绍的内容均在Linux2.6.18内核上编译通过,可以在2.6.x版本内核中通用。如前所述,由于Linux2.6内核引入了kbuild的新机制,使得编译新的内核模块或者将自己编写的内核模块集成到内核源码中都变得非常简单了。
Linux2.6内核中,编译内核模块首先要在/usr/src下正确配置和构造内核源码树,即把需要版本的内核源码解压在/usr/src/,并在内核源码的主目录下(这里为/usr/src/linux-2.6.18.3),使用make menuconfig或者make gconfig命令配置内核,然后使用make all完整编译内核。
下面以作者开发的CS8900A网卡驱动为实例,介绍如何将网络设备驱动模块编译进内核。
a.在系统源码树drivers目录下创建新目录Cs8900;
b.将编写好的文件cs8900.c和cs8900.h拷贝到drivers/Cs8900目录下;
c.在drivers/Cs8900目录下,编写Makefile文件:
#Makefile for CS8900A Network Driver
obj -$(CONFIG_DRIVER_CS8900A) +=cs8900.o
d.在drivers/Cs8900目录下,编写Kconfig文件:
#Just for CS8900A Network Interface
menu "CS8900A Network Interface support"
config DRIVER_CS8900A
tristate "CS8900A support"
--------help--------
This is a network driver module for CS8900A.
endmenu
e.在driver目录下的Kconfig文件endmenu语句前,加入一行:
source "drivers/Cs8900/Kconfig"
这样在内核源码树的主目录下,通过make menuconfig或者make gconfig命令就可以在Device Drivers选项的下面找到CS8900A Network Interface support选项,并找到CS8900A support的选择菜单,它有三种状态:未选中(不编译)、选中(M)一编译为模块、选中(*)一编译为新系统一部分。
重新编译内核即可得到支持CS8900A网卡的内核,然后将内核下载到FS2410的开发板上,通过配置网络参数,就可以测试网卡驱动程序的行为了。
4 结束语
在这个信息爆炸的时代,人们对于网络的需求愈发强烈,越来越多的嵌入式设备都需要具有以太网的接入功能,因此开发网络驱动程序对于很多嵌入式产品的研发至关重要。具体开发嵌入式Linux网络驱动程序时,可以参照内核中已经支持的网络驱动源代码,在重点理解Linux网络驱动实现原理的基础上,按照模块设计较为固定的开发模式,结合具体物理设备的硬件手册,移植编写需要的模块化的网络驱动程序。
- SoC前段(ARM)嵌入式系统开发实作训练(上) (02-28)
- 基于嵌入式Linux的智能手机系统设计(05-10)
- 基于ARM+uCLinux的网络控制系统设计与实现(05-03)
- 基于Linux和S3C2410的嵌入式图象传输系统设计(05-24)
- 北大首倡“中国芯”出成果 未来充满变数(06-09)
- 嵌入式系统中闪存设备IO软件的设计与实现(07-08)