易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux 2.6 字符设备驱动程序


、说明
笔记适用于
Linux

2.6.10
以后的内核。
笔记以
Linux
Device
Driver3
提供的
scull
程序
(scull
目录中的
main.c

scull.h)
为记录主线,并以该驱动程序中的各种系统调用和函数调用流程为记
录顺序。比如,
module_init( )

module_exit(
)
为相对应的一对系统调用,一般书籍中都会放在一起讨论,但是本笔记却不会这样,而是在需要调用的时候才会涉及,因此
module_init(
)
会放在笔记开始时,也就是刚加载
module
时讨论,而
module_exit( )
则会放在笔记结束前,也就是要卸载
module
时再加以讨论。
该笔记的的目的是为了对
Linux Device Drvier3
中提到的各个知识点作一下整理,理清一下头绪,从而能让我对
Linux
驱动程序加深整体或者全局上的理解。
注:个人理解,有误难免!
*******************************************
驱动程序
module
的工作流程主要分为四个部分:
1



Linux
提供的命令加载驱动
module
2


驱动
module
的初始化(初始化结束后即进入

潜伏

状态,直到有系统调用)
3


当操作设备时,即有系统调用时,调用驱动
module
提供的各个服务函数
4


卸载驱动
module
一、

驱动程序的加载
Linux
驱动程序分为两种形式:一种是直接编译进内核,另一种是编译成
module
形式,然后在需要该驱动
module
时手动加载。对于前者,还有待学习。
Module
形式的驱动,
Linux
提供了两个命令用来加载:
modprobe

insmod



modprobe
可以解决驱动
module
的依赖性,即假如正加载的驱动
module
若引用了其他
module
提供的内核符号或者其他资源,则
modprobe
就会自动加载那些
module
,不过,使用
modprobe
时,必须把要加载的驱动
module
放在当前模块搜索路径中。而
insmod
命令不会考虑驱动
module
的依赖性,但是它却可以加载任意目录下的驱动
module

一般来说,在驱动开发阶段,使用
/sbin/insmod
比较方便,因为不用将
module
放入当前
module
搜索路径中。
一旦使用
insmod
加载模块,则
Linux
内核就会调用
module_init(scull_init_module)
特殊宏,其中
scull_init_module
是驱动初始化函数,可自定义名称。
在用
insmod
加载
module
时,还可以给
module
提供模块参数,但是这需要在驱动源代码中加入几条语句,让模块


相关文档:

[转载]Linux热插拔

 
将可移动设备连入系统时,系统的后台中会依次发生如下事件:
l 内核检测到新硬件插入,然后分别通知hotplug和udev。前者用来装入相应的内核模块(如usb-storage),而后者用来在/dev中创建相应的设备节点(如/dev/sda1)。
l udev创建了相应的设备节点之后,会将这一消息通知hal的守护程序(hald)。当然udev还得保证新 ......

Linux设备模型之input子系统详解(二)

;           break; 
         } 
  
         if (type != EV_SYN) 
            &nbs ......

linux下的so、o、lo、a、la文件有什么区别?

o: 编译的目标文件
a: 静态库,其实就是把若干o文件打了个包
so: 动态链接库(共享库)
lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息
la: 使用libtool编译出的库文件,其实是个文本文件,记录同名动态库和静态库的相关信息
 
1 libtool的工作原理
libtool 是一个通用库支持脚本,将使用 ......

简说linux内核编译(简单却很实用)

一、下载安装程序
1、  下载内核源码(linux-2.6.33.tar.bz2),位置:https://www.kernel.org
2、  下载最新版的module-init-tools(module-init-tools-3.8.tar.bz2)和modutils(modutils-2.4.26-1.src.rpm)的源码
位置:http://www.kernel.org/pub/linux/kernel/people/rusty/modules/
位置:http://www. ......

linux下与其他终端通讯 write出错

先用who命令查看所有登陆终端
#who -uH
输出如下:
NAME     LINE         TIME             IDLE          PID COMMENT
root     :0           2010-03-01 19:13   ?     & ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号