Linux设备驱动原理
1
第12章 Linux设备驱动原理实验12.4 设备驱动程序实验 教科书P267页 UP-CUP S2410 实验指导书P181页
Linux设备驱动原理
2
LINUX 设备驱动概述 Linux中的模块概念 设备驱动程序概述 设备驱动程序的一般接口 文件操作概述 如何编写设备驱动程序 添加设备驱动程序的一般方法 linux驱动调试 设备驱动程序的加载与使用
Linux设备驱动原理
3
1、Linux的模块化机制Linux是整体式内核(monolithic kernel)结构。 内核增加新成分比较困难,因而采用模块化机制。 可在运行时添加到内核中的代码被称为“模块”。 模块:是内核的一部分,在不重新编译下,可以动态加载 (insmod),动态卸载(rmmod)。 Linux 内核支持好几种类型的模块,并不只限于驱动程序。 文件系统:Minix、Ext2、 Romfs、Jffs2等是模块 设备驱动程序:Disk、Cdrom、打印机等都是模块
Linux设备驱动原理
4
为什么使用模块保证内核很小,灵活装配例如:当需要使用VFAT文件系统时,只要安装 (mount)VFAT, VFAT文件系统就是模块。当不用时可以 节省内存资源。
Linux设备驱动原理
5
模块的优缺点 优点: 内核小、新增模块时不用重新编译、灵活性强 缺点: 性能差、差的模块会导致系统崩溃、有版本兼容问题等
Linux设备驱动原理
6
模块的初始化与清除 当加载(insmod)模块时,系统会调用init_module()函数。 当卸载(rmmod)模块时,系统会调用cleanup_module()函数。 在/arm2410cl/kernel/linux-2.4.18-2410cl/inlude/Linux/init.h中定 义了宏: module_init() module_exit()
Linux设备驱动原理
7
模块的装载与卸载
insmod :装载模块 insmod 模块文件名 rmmod :卸载模块 rmmod [-v|-f|-w|-s|-V] 模块名 lsmode :显示当前内核已加载的模块 lsmod modprobe:根据模块间依赖关系加载和卸载 depmod:生成modules.dep文件
Linux设备驱动原理
8
Hello world 模块#include <linux/init.h> #include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void) { printk(KERN_ALERT "Hello, world\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Goodbye, cruel world\n"); }module_init(hello_init); module_exit(hello_exit);
Linux设备驱动原理
9
Linux设备驱动程序Applications SCI EOS file_operations driver
Hardware
系统调用(System Call Interface)是操作系统内核和 应用程序之间的接口,设备驱 动程序(driver)是操作系统内 核和机器硬件之间的接口.设 备驱动程序为应用程序屏蔽 了硬件的细节,这样在应用程 序看来,硬件设备只是一个设 备文件, 应用程序可以象操作 普通文件一样对硬件设备进 行操作 。
Linux设备驱动原理
10
书267页图12-19 应
用程序 可将硬件设备看 做一个设备文件, 就像操作普通文 件一样对硬件进 行操作。
应用程序 库函数 Linux内核
系统调用接口 进程管理子系统 内存管理子系统 设备驱动程序
文件子系统
硬件设备(CPU、内存、键盘、显示、 )
Linux设备驱动原理
11
*.h文件是应用程序 与库函数之间的接口;
Applications SCI EOS file_operations
*.h
GLIBC
系统调用是内核与应 用成程序之间的接口; file-operations结 构是内核与设备驱动 程序之间的接口; 设备驱动程序是内核 与硬件之间的接口。
driver
Hardware
Linux设备驱动原理
12
(2)设备驱动程序的功能 在Linux操作系统中驱动程序是操作系统内核与硬件设备 之间的桥梁,它屏蔽了硬件的细节,在应用程序看来硬 件设备只是一个特殊的文件。 驱动程序的基本功能: (1)对设备初始化和释放。 (2)把数据从内核传送到硬件和从硬件读取数据并交给 内核。 (3)读取应用程序传送给设备文件的数据和回送应用程 序请求的数据。 (4) 检测和处理设备出现的错误。 Linux中的设备管理应用了设备文件这个概念来统一设备 的访问接口。通过设备驱动程序,应用程序对所有各类 设备的输入、输出看起来就好像对普通文件的输入输出 一样。
Linux设备驱动原理
13
(3)驱动程序与应用程序的区别1、进入方式。驱动:注册、打开;应用:以main函数开始。 2、运行方式。驱动:被动等待系统调用;应用:主动从头至尾 执行一个任务。 3、退出方式。驱动:资源释放;应用:可以不释放资源。 4、可调用的函数。应用程序可以使用GLIBC等标准C函数库,驱 动程序不能使用标准C函数库。 5、可以包含的头文件。驱动:不能包含通常头文件。和内核代 码相关的内容在配置好的代码树头文件中声明。 6、错误的作用方式。驱动:会影响整个系统,至少会杀死当前 进程。 7、调试方法。驱动:不能用printf(),只能用printk() 8、运行空间。驱动:内核空间;应用:用户空间 9、版本依赖。驱动:有;应用:无。
Linux设备驱动原理
14
(4)驱动程序的开发方法驱动程序需要考虑: ①提供尽量多的选项给用户;
②提高驱动程序的速度和效率; ③尽量使驱动程序简单,使之易于维护。 驱动程序的加载方法:①把设备驱动程序作为内核的一部分,直接编译到内核中,在 Linux启动时自动加载,该方式称为静态编译。开发效率低。 ②单独作为一个模块,编译成.o(2.6内核下为 …… 此处隐藏:1180字,全部文档内容请下载后查看。喜欢就下载吧 ……
