嵌入式Linux网络驱动程序的开发及实现原理
时间:01-31
来源:作者:赵洁 丁香乾
点击:
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网络驱动实现原理的基础上,按照模块设计较为固定的开发模式,结合具体物理设备的硬件手册,移植编写需要的模块化的网络驱动程序。
设计好模块化的网络驱动程序后,我们就可以编译这个内核模块,并将这个自定义的内核模块作为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网络驱动实现原理的基础上,按照模块设计较为固定的开发模式,结合具体物理设备的硬件手册,移植编写需要的模块化的网络驱动程序。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)
- 嵌入式系统实时性的问题(06-21)
- 嵌入式实时系统中的优先级反转问题(06-10)
- 嵌入式Linux系统中MMC卡驱动管理技术研究(06-10)
- FPGA的DSP性能揭秘(06-16)