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
提供模块参数,但是这需要在驱动源代码中加入几条语句,让模块
相关文档:
虽然mplayer的安装方法已经不是什么技术活,但最近有不少同学在询问我关于mplayer的安装方法的问题。我一贯推荐它们源代码包的安装,虽然步骤有些复杂,但解码器和二进制程序都尽在掌握,心里踏实。
===
1
下载如下这些软件:
all-20071007.tar.bz2
windows-all-20071007.zip
Blue-1.7.tar.bz2
MPlayer-1.0rc2.ta ......
ls -l|grep ^d ----列出当前目录下的文件夹
ls -l|grep ^d|grep "tmp" ----列出当前目录下明子含有"tmp"的文件夹
for dir in `ls -l ~/dxy/|grep ^d | awk '{print $9}'` ---- awk '{print $9}' ,只print 文件夹的名字
do
echo "==== $dir"
cd ~/dxy;cd $dir/
t=`ls -l|grep ^d|grep " ......
作者:易松华,华清远见嵌入式学院讲师。
在华清远见上课过程中,发现静态映射方面初学者比较难于掌握和理解,下面分析一下静态映射机制的原理并通过GPIO和USB、LCD等的静态映射作为例子来说明如何通过这种静态映射的方式访问外设资源。
内核提供了一个重要的结构体struct machine_desc ,这个结构体在内核移植中起到相当 ......
学校服务器的一个windows虚拟机开启了Desktop共享,这样可以在配置不高的终端使用高性能的机器,除了windows客户端访问外,在Ubuntu里可以通过自带的 rdesktop访问,该程序为命令行形式。参数较多,比较有用的是提供远程与本地交互的-r参数。
如:
rdesktop -r disk:floppy=/home/xiajing/t 192.168.111.111 ......
什么是USB?
USB是英文Universal Serial Bus的缩写,意为通用串行总线。USB最初是为了替代许多不同的低速总线(包括并行、串行和键盘连接)而设计的,它以单一类型的总线连接各种不同的类型的设备。USB的发展已经超越了这些低速的连接方式,它现在可以支持几乎所有可以连接到PC上的设备。最新的USB规范修订了理论上高达480 ......