linux内核驱动模块加载方式
在类unix操作系统中,驱动加载方式一般分为:动态加载和静态加载,下面分别对其详细论述。
一、动态加载
动态加载是将驱动模块加载到内核中,而不能放入/lib/modules/下。
在2.4内核中,加载驱动命令为:insmod ,删除模块为:rmmod;
在2.6以上内核中,除了insmod与rmmod外,加载命令还有modprobe;
insmod与modprobe不同之处:
insmod 绝对路径/××.o,而modprobe ××即可,不用加.ko或.o后缀,也不用加路径;最重要的一点是:modprobe同时会加载当前模块所依赖的其它模块;
lsmod查看当前加载到内核中的所有驱动模块,同时提供其它一些信息,比如其它模块是否在使用另一个模块。
二、静态加载
(一)概念
在执行make menuconfig命令进行内核配置裁剪时,在窗口中可以选择是否编译入内核,还是放入/lib/modules/下相应内核版本目录中,还是不选。
(二)操作步骤
linux设备一般分为:字符设备、块设备和网络设备,每种设备在内核源代码目录树drivers/下都有对应的目录,其加载方法类似,以下以字符设备静态加载为例,假设驱动程序源代码名为ledc.c,具体操作步骤如下:
第一步:将ledc.c源程序放入内核源码drivers/char/下;
第二步:修改drivers/char/Config.in文件,具体修改如下:
按照打开文件中的格式添加即可;
在文件的适当位置(这个位置随便都可以,但这个位置决定其在make menuconfig窗口中所在位置)加入以下任一段代码:
tristate 'LedDriver' CONFIG_LEDC
if [ "$CONFIG_LEDC" = "y" ];then
bool ' Support for led on h9200 board' CONFIG_LEDC_CONSOLE
fi
说明:以上代码使用tristate来定义一个宏,表示此驱动可以直接编译至内核(用*选择),也可以编制至/lib/modules/下(用M选择),或者不编译(不选)。
bool 'LedDriver' CONFIG_LEDC
if [ "$CONFIG_LEDC" = "y" ];then
bool ' Support for led on h9200 board' CONFIG_LEDC_CONSOLE
fi
说明:以上代码使用tristate来定义一个宏,表示此驱动只能直接编译至内核(用*选择)或者不编译(不选),不能编制至/lib/modules/下(用M选择)。
第三步:修改drivers/char/Makefile文件
在适当位置加入下面一行代码:
obj-$(CONFIG_LEDC) += ledc.o
或者在obj-y一行中加入ledc.o,如:
obj-y += ledc.o mem.o 后面不变;
OK,经过以上的设置就可以在执行make menuconfig命令后的窗口中的character devices---> 中进行选择配置了。选择后重新编译就ok了。
|
相关推荐
linux内核添加新驱动实例,并提供menuconfig
linux下采用模块方法,添加一个新的设备驱动程序。 要求添加字符设备的驱动。 另附一个应用程序,测试添加的驱动程序
linux下采用模块方法,添加一个新的设备驱动程序。 要求添加字符设备的驱动。 另附一个应用程序,测试添加的驱动程序。
本文主要介绍Linux设备驱动的添加和删除,详细的介绍了这一过程。文章中还阐述了对Linux设备驱动的理解,后面附有测试过程。撰写本文的背景是嵌入式开发,开发平台是zedboard zynq7000.
本文档介绍了 NL668 系列模块在 Linux 系统下的驱动安装的方法,以及驱动安装完成后测试 NDIS拨号的方法。驱动安装包括添加 USB 串口驱动以及集成 Fibocom 提供的 NDIS 口驱动。
嵌入式Linux下的FRAM驱动程序设计.pdf
嵌入linux下红外线驱动实例,很有参考价值
linux下的驱动程序模块编程makefile文件编写实例,多文件示例。可根据自己的编程环境进行简单修改即可在自己的平台上成功运行。
yt8521 linux驱动源码
linux内核pca9555驱动适用于android系统
如何在嵌入式LINUX中添加设备驱动程序,由于个人水平较浅,所以喜欢上传一些时候入门级别的资料,希望对大家有帮助
Linux2.4内核下的多款摄像头驱动,通过验证,完全成功!!! 特别添加中星微307B的驱动部分!!!
linux 添加字符设备驱动程序及测试程序,linux下采用模块方法,添加一个新的设备驱动程序。要求添加字符设备的驱动。另附一个应用程序,测试添加的驱动程序. int main(void) { int fd; char buf[MAX_SIZE]; char ...
Linux下的CDC-ACM驱动源码,USB虚拟串口驱动程序,欢迎下载学习!
由于uClinux不支持模块动态加载,而且嵌入式Linux不能够象桌面Linux那样灵活的使用insmod/rmmod加载卸载设备驱动程序,因而本文只介绍将设备驱动程序静态编译进uClinux内核的方法。本文以uClinux为例,介绍在一个以...
ARM-Linux下SPI设备的添加与驱动实现.pdf
使用这个华为官方linux驱动和运用程序,就可以在linux下面使用华为上网卡了,每次都是自动识别,自动启动软件界面。比usb_modeswitch好用多了,对各个型号的华为3G卡也都有很好的兼容性(毕竟都是华为生产的),如果...
基于Linux的设备驱动程序的加载方法。本文简单论述了开发基于Linux的设备驱动程序的优势,介绍了如何在Linux操作系统中添加 设备驱动程序,讲述了在应用中如何调用驱动程序的步骤和注意问题。
深入浅出地解释了Flash,Nand Flash的来龙去脉;...以及如何去在Linux的框架下,实现对应的Nand Flash的驱动。 在1.7的版本上: 1. 添加了Nand Flash位翻转的详细介绍 2. 添加了Nand Flash的结构图
讲解使用LINUX系统作为交换机的驱动原理.