清远见——嵌入式培训专家 http ://
“黑色经典”系列之《嵌入式Linux 应用程序开发详解》
11 章 嵌入式Linux 设备驱动开发
本章目标
本书从 6 章到 10 章详细讲解了嵌入式Linux 应用程序的开
发 ,这些都是处于用户空间的内容。本章将进入到Linux 的内核空间,
初步介绍嵌入式Linux 设备驱动的开发。驱动的开发流程相对于应用
程序的开发是全新的 ,与读者以前的编程习惯完全不同,希望读者能
尽快地熟悉现在环境。经过本章的学习,读者将会掌握以下内容。
Linux 设备驱动的基本概念
Linux 设备驱动程序的基本功能
Linux 设备驱动的运作过程
常见设备驱动接口函数
掌握LCD 设备驱动程序编写步骤
掌握键盘 备驱动程序编写步骤
能够独立定制Linux 服务
清远见培训教材
清远见——嵌入式培训专家
11.1 设备驱动概述
11.1.1 设备驱动简介及驱动模块
操作系统是通过各种驱动程序来驾驭硬件设备的,它为用户屏蔽了各种各样的设备,驱
动硬件是操作系统最基本的功能,并且提供统一的操作方式。设备驱动程序是内核的一部分,
硬件驱动程序是操作系统最基本的组成部分,在Linux 内核源程序中也占有60% 以上。因此,
熟悉驱动的编写是很重要的。
在第2 章中已经提到过,Linux 内核中采用可加载的模块化设计 LKMs ,Loadable Kernel
Modules ),一般情况下编译的Linux 内核是支持可插入式模块的,也就是将最基本的核心代
码编译在内核中,其他的代码可以选择在内核中,或者编译为内核的模块文件。
常见的驱动程序也是作为内核模块动态加载的,比如声卡驱动和网卡驱动等,而 Linux
最基础的驱动,如CPU、PCI 总线、TCP/IP 协议、APM (高级电源管理)、VFS 等驱动程序
则直接编译在内核文件中。有时也把内核模块叫做驱动程序,只不过驱动的内容不一定是硬
件罢了,比如ext3 文件系统的驱动。因此,加载驱动时就是加载内核模块。
这里,首先列举一些模块相关命令。
lsmod 列出当前系统中加载的模块,其中左边第一列是模块名,第二列是该模块大小,
第三列则是该模块使用的数量。如下所示:
[root@www root]# lsmod
Module Size Used by
autofs 12068 0 (autoclean) (unused)
eepro100 18128 1
iptable_nat 19252 0 (autoclean) (unused)
ip_conntrack 18540 1 (autoclean) [iptable_nat]
iptable_mangle 2272 0 (autoclean) (unused)
iptable_filter 2272 0 (autoclean) (unus