Linux驱动程序设计.ppt

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ChavezWang@Gmail.com
嵌入式系统研究室
6
设备驱动的基本原理-5
设备号:Linux采用主设备号和次设备号来标志 一个具体设备。
主设备号用来标志设备类型 次设备号用来区分不同的具体设备
系统创建一个设备驱动程序时,设备驱动需要 使用一个主设备号向内核注册此驱动。创建一 个设备节点的方法:
return 0; } static void hello_exit(void){
printk(KERN_ALERT "Goodbye, world\n");} module_init(hello_init); module_exit(hello_exit);
ChavezWang@Gmail.com
mknod 设备名 设备类型 主设备号 次设备号 例:mknod ttyS0 c 64 4
ChavezWang@Gmail.com
嵌入式系统研究室
7
设备驱动的基本原理-6-内核模块
内核模块的概念:内核模块是一些可以让操作 系统内核在需要时载入和执行的代码,不需要 时可以从操作系统中卸载
内核模块是Linux内核运行时动态扩展的一种 技术,可以在Linux内核运行期间向内核动态 添加代码,扩展内核的功能
嵌入式系统研究室
10
设备驱动的基本原理-9-内核模块
2.6系列内核模块的编译与加载
内核源码树的每个子目录都有一个kconfig文件,为 makefile提供配置数据库,分别描述了所属目录源 文件相关的内核配置菜单项
内核配置时,从kconfig中读出配置菜单,配置后生 成.config文件
编译内核时,makefile读入对应的.config文件生成 内核映像
Kconfig 输出
arch/arm/makefile makefile
makefile
设备分类
块设备:一般块设备都有缓存支持,并且支持随机 存取
创建的块设备
硬盘 软盘 ramdisk
ChavezWang@Gmail.com
嵌入式系统研究室
5
设备驱动的基本原理-4
设备分类
网络设备:从BSD UNIX网络组件移植而来。网络 设备没有对应地映射到文件系统的设备节点。在 Linux中,网络设备的访问采用Socket机制实现
加入新驱动到内核源码树时,需要修改相应目录的 kconfig,将新驱动加入内核的配置菜单,同时需要 修改makefile文件
ChavezWang@Gmail.com
嵌入式系统研究室
11
设备驱动的基本原理-10-内核模块
Scrip/makefile
Makefile
menuconfig
.config
注册Linux设备号的方法
在设备文件系统中,由于分的比较细致,一些 驱动程序的对应目标跟以前比一样,如:
Linux2.4之前:/dev/fb0 /dev/ttyS0 Linux2.6之后:/dev/fb/0 /dev/tts/0
可以用符号链接进行更改,以便与之前的相匹 配:
ln-s /dev/fb/0 /dev/fb0 ls-s /dev/tts/0 /dev/ttyS0
ChavezWang@Gmail.com
嵌入式系统研究室
8
设备驱动的基本原理-7-内核模块
内核模块与应用程序加载的不同:
内核模块的加载只是向内核预先注册自己以便服务于将来 的某个请求,只是加载了某项功能,而不需要马上执行
应用程序加载后就开始执行 内核模块不能使用外部函数库,只能使用内核导出的函数 应用程序可以使用外部函数库 内核模块只能运行在内核空间,并且不生成新的进程 应用程序运行在用户空间,一般一个应用程序生成一个新
源自文库的进程
ChavezWang@Gmail.com
嵌入式系统研究室
9
设备驱动的基本原理-8-内核模块
内核模块的框架
#include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "Hello, world\n");
注册Linux设备号的方法
系统启动时,会把设备驱动程序挂载在/dev/目 录下,Linux设备文件的创建和删除、目录层 次都都由各个设备驱动程序管理
/dev/下面每个文件都动态对应了一个系统上存 在的设备驱动程序。
新添加(或者删除)一个设备,比如u盘,系 统就会自动在/dev目录中创建(或者删除)对 应的设备节点。
注册Linux设备号的方法
为避免不同的驱动程序具有相同的设备号,需要 提供一种分配设备号的机制
1. 每个驱动程序分配一个主设备号:不可行,Linux最多 支持255个主设备
2. 根据/proc/devices中的对应关系,用脚本动态的创建设 备文件:太麻烦,程序员不愿意
3. 设备文件系统自动管理
Linux驱动程序设计
主要内容
设备驱动的基本原理 设备驱动的编写方法 2.6内核设备模型框架 设备驱动中的中断处理方法 串口读写程序实例
ChavezWang@Gmail.com
嵌入式系统研究室
2
设备驱动的基本原理-1
USER APP
用户空间
VFS
内核空间
DEVICE op func DEV_REGISTER
设备驱动的基本原理-2
设备分类
字符设备:存取时没有缓存、只能顺序读/写的设备。 可通过设备文件节点被访问
与普通文件的区别:普通文件的访问可以前后移动访问指 针,而大多数字符设备不支持该操作。
典型的字符设备
鼠标 键盘 串口
ChavezWang@Gmail.com
嵌入式系统研究室
4
设备驱动的基本原理-3
设备驱动
HARDWARE
ChavezWang@Gmail.com
嵌入式系统研究室
3
设备文件与设备文件系统
Linux中,字符设备和块设备都是通过文件节 点进行访问。
每个设备对应一个文件名,操作时对应各自的 驱动程序。
设备文件与设备文件系统
Linux系统靠主次设备号来联系驱动程序和设 备文件节点,依靠主设备号标志不同的驱动 程序
相关文档
最新文档