嵌入式系统第12章

时间:2025-12-09   来源:未知    
字号:

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字,全部文档内容请下载后查看。喜欢就下载吧 ……

嵌入式系统第12章.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)