没有合适的资源?快使用搜索试试~ 我知道了~
首页Linux设备驱动实战升级:2.6.28.6内核与S3C6410板书全面指南
Linux设备驱动实战升级:2.6.28.6内核与S3C6410板书全面指南
需积分: 9 8 下载量 142 浏览量
更新于2024-07-19
收藏 31.47MB PDF 举报
《内核程序说明》第二版是在第一版的基础上对Linux设备驱动开发领域的一次重要修订,旨在解决读者在学习过程中遇到的挑战和不足。首先,第二版克服了原有的缺乏现成开发环境的问题,通过提供预装有所需开发环境和源代码的VirtualBox虚拟机,使读者能够立即开始实践,减少了配置和安装的时间成本。此外,新版还特别配备了基于三星S3C6410 SoC的LDD6410学习板,为书中涉及的真实设备驱动实例提供了实际操作平台,增强了学习的可操作性。 其次,内核版本提升至Linux 2.6.28.6,反映了内核API的最新变化,书中内容因此得到全面更新,例如详细介绍了I2C驱动的新架构和网络NAPI接口,以及对延迟工作等高级内核机制的讲解,确保了读者掌握的知识与最新的技术同步。 修订还包括删除过时的技术,如传统按键驱动和SAA7113H启动等内容,同时增加了许多现代且实用的知识点,如Linux内核的编码风格、移植技巧、Android驱动开发、USB UDC和gadget驱动、ALSA SoC驱动、input驱动、基于sysfs的设备驱动、固件加载、性能调优、电源管理以及驱动设计原则,如分层设计和主机驱动与设备驱动的分离设计,全面提升了学习的深度和广度。 《内核程序说明》第二版作为一本全面且与时俱进的Linux设备驱动教程,旨在为读者提供一个高效、完整的学习体验,无论是初次接触者还是经验丰富的开发者,都能从中收获宝贵的知识和技能。
资源详情
资源推荐
13
目
21.2 PCI 设备驱动结构
...............................................................................................................
556
21.2.1 PCI 幍洀┷的兓成
................................................................................................
556
21.2.2 ⸭例:PCI 骨架程序
................................................................................................
560
21.3 总结
......................................................................................................................................
562
第 4 篇 Linux 幍洀┷庒幤、移植
第 22 章 Linux 设备驱动的调试
........................................................................................................
564
22.1 Linux 开发环境建设
...........................................................................................................
565
22.1.1 ⸭洛室建幍
...............................................................................................................
565
22.1.2 工具枍
.......................................................................................................................
566
22.1.3 串口工具
...................................................................................................................
567
22.2 GDB 调试器用法
................................................................................................................
570
22.2.1 GDB 基本用法
.........................................................................................................
570
22.2.2 DDD ⦍形界面庒幤工具
.........................................................................................
578
22.3 Linux 内核调试
...................................................................................................................
580
22.4 内核打印信息
—
printk()
..................................................................................................
581
22.5 使用/proc
..............................................................................................................................
582
22.6 Oops
.....................................................................................................................................
586
22.7 监视工具
..............................................................................................................................
588
22.8 内核调试器
..........................................................................................................................
589
22.8.1 kcore
..........................................................................................................................
589
22.8.2 KDB
..........................................................................................................................
592
22.8.3 KGDB
.......................................................................................................................
594
22.9 使用仿真器调试内核
..........................................................................................................
595
22.10 应用程序调试
....................................................................................................................
596
22.11 Linux 性能监控与调优工具
.............................................................................................
598
22.12 总结
....................................................................................................................................
601
第 23 章 Linux 设备驱动的移植
........................................................................................................
602
23.1
编写可移植的设备驱动
......................................................................................................
603
23.1.1 可移植的数据伊型
...................................................................................................
603
23.1.2 兢㨓体⺈界
...............................................................................................................
604
23.1.3 Little Endian 与 Big Endian
......................................................................................
605
14
Linux 幍洀┷♠幵解(第 2 版)
23.1.4 内存欄面大小
...........................................................................................................
605
23.2 巧用同类设备驱动
..............................................................................................................
606
23.2.1 巧用 demo 板洀┷
....................................................................................................
606
23.2.2 巧用伊似芯片的洀┷程序
.......................................................................................
606
23.2.3 借用芯片厂商的范例程序
.......................................................................................
609
23.3 从 Linux 2.4 移植设备驱动到 Linux 2.6
............................................................................
610
23.4 Linux 与其他操作系统之间的驱动移植
............................................................................
618
23.5 Linux 内核的移植
................................................................................................................
626
23.6 总结
......................................................................................................................................
630
参考文献
.................................................................................................................................................
631
Linux 幍洀┷概述及♠䘾境㨓建
第1章
本章导读
本章将介绍 Linux 设备驱动开发的基本概念,并对本书所基于的平台
和开发环境进行讲解。
1.1 节阐明了设备驱动的概念和作用。
1.2 节和 1.3 节分别讲解在无操作系统情况下和有操作系统情况下设
备驱动的设计,通过对两者不同的分析讲解设备驱动与硬件和操作系统的
关系。
1.4 节对 Linux 操作系统的设备驱动进行了概要性的介绍,给出了设
备驱动与整个软硬件系统的关系,分析了 Linux 设备驱动的重点、难点和
学习方法。
1.5 节对本书所基于的 LDD6410 ARM11 开发板和开发环境的安装进
行了介绍。
本章的最后给出了一个设备驱动的“Hello World”实例,即最简单的
LED 驱动在无操作系统情况下和 Linux 操作系统下的实现。
3
Linux 幍洀┷概述及♠䘾境㨓建
第
1
章
1.1
幍洀┷的作用
任何一个计算机系统的运转都是系统中软硬件共同努力的结果,没有硬件的软件是空中楼阁,
而没有软件的硬件则只是一堆废铁。硬件是底层基础,是所有软件得以运行的平台,代码最终会
落实为硬件上的组合逻辑与时序逻辑。软件则实现了具体应用,它按照各种不同的业务需求而设
计,完成了用户的最终诉求。硬件较固定,软件则很灵活,可以适应各种复杂多变的应用。可以
说,计算机系统的软硬件互相成就了对方。
但是,软硬件之间同样存在着悖论,那就是软件和硬件不应该互相渗透入对方的领地。为尽
可能快速地完成设计,应用软件工程师不想也不必关心硬件,而硬件工程师也难有足够的闲暇和
能力来顾及软件。譬如,应用软件工程师在调用套接字发送和接收数据包的时候,不必关心网卡
上的中断、寄存器、存储空间、I/O 端口、片选以及其他任何硬件词汇;在使用 printf()函数输出
信息的时候,他不用知道底层究竟是怎样把相应的信息输出到屏幕或者串口。
也就是说,应用软件工程师需要看到一个没有硬件的纯粹的软件世界,硬件必须被透明地呈现给
他。谁来实现硬件对应用软件工程师的隐形?这个光荣而艰巨的任务就落在了驱动工程师的头上。
对设备驱动最通俗的解释就是“驱使硬件设备行动”。驱动与底层硬件直接打交道,按照硬件
设备的具体工作方式,读写设备的寄存器,完成设备的轮询、中断处理、DMA 通信,进行物理
内存向虚拟内存的映射等,最终让通信设备能收发数据,让显示设备能显示文字和画面,让存储
设备能记录文件和数据。
由此可见,设备驱动充当了硬件和应用软件之间的纽带,它使得应用软件只需要调用系统软
件的应用编程接口(API)就可让硬件去完成要求的工作。在系统中没有操作系统的情况下,工
程师可以根据硬件设备的特点自行定义接口,如对串口定义 SerialSend()、SerialRecv(),对 LED
定义 LightOn()、LightOff(),对 Flash 定义 FlashWrite()、FlashRead()等。而在有操作系统的情况下,
驱动的架构则由相应的操作系统定义,驱动工程师必须按照相应的架构设计驱动,这样,驱动才
能良好地整合入操作系统的内核。
驱动程序沟通着硬件和应用软件,而驱动工程师则沟通着硬件工程师和应用软件工程师。目
前,随着通信、电子行业的迅速发展,全世界每天都会有大量的新芯片被生产,大量的新电路板
被设计,也因此,会有大量设备驱动需要开发。这些驱动,或运行在简单的单任务环境,或运行
在 VxWorks、Linux、Windows 等多任务操作系统环境,发挥着不可替代的作用。
1.2
无操作系兮㢅的幍洀┷
并不是任何一个计算机系统都一定要运行操作系统,在许多情况下,操作系统都不必存在。
对于功能比较单一、控制并不复杂的系统,譬如 ASIC 内部、公交车的刷卡机、电冰箱、微波炉、
简单的手机和小灵通等,并不需要多任务调度、文件系统、内存管理等复杂功能,用单任务架构
完全可以良好地支持它们的工作。一个无限循环中夹杂对设备中断的检测或者对设备的轮询是这
4
Linux 幍洀┷♠幵解(第 2 版)
种系统中软件的典型架构,如代码清单 1.1。
代码清单 1.1 单任务软件典型架构
1 int main(int argc, char* argv[])
2 {
3 while (1)
4 {
5 if (serialInt == 1)
6 /*有串口中断*/
7 {
8 ProcessSerialInt(); /*处理串口中断*/
9 serialInt = 0; /*中断标志变量清 0*/
10 }
11 if (keyInt == 1)
12 /*有按键中断*/
13 {
14 ProcessKeyInt(); /*处理按键中断*/
15 keyInt = 0; /*中断标志变量清 0*/
16 }
17 status = CheckXXX();
18 switch (status)
19 {
20 ...
21 }
22 ...
23 }
24 }
在这样的系统中,虽然不存在操作系统,但是设备驱动则无论如何都必须存在。一般情况下,
每一种设备驱动都会定义为一个软件模块,包含.h 文件和.c 文件,前者定义该设备驱动的数据结构
并声明外部函数,后者进行驱动的具体实现。譬如,可以如代码清单 1.2 那样定义一个串口的驱动。
代码清单 1.2 无操作系统情况下串口的驱动
1 /**********************
2 *serial.h 文件
3 **********************/
4 extern void SerialInit(void);
5 extern void SerialSend(const char buf*,int count);
6 extern void SerialRecv(char buf*,int count);
7
8 /**********************
9 *serial.c 文件
10 **********************/
11 /*初始化串口*/
12 void SerialInit(void)
13 {
14 ...
15 }
16 /*串口发送*/
17 void SerialSend(const char buf*,int count)
18 {
19 ...
20 }
21 /*串口接收*/
剩余640页未读,继续阅读
shuyuwyy
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 多模态联合稀疏表示在视频目标跟踪中的应用
- Kubernetes资源管控与Gardener开源软件实践解析
- MPI集群监控与负载平衡策略
- 自动化PHP安全漏洞检测:静态代码分析与数据流方法
- 青苔数据CEO程永:技术生态与阿里云开放创新
- 制造业转型: HyperX引领企业上云策略
- 赵维五分享:航空工业电子采购上云实战与运维策略
- 单片机控制的LED点阵显示屏设计及其实现
- 驻云科技李俊涛:AI驱动的云上服务新趋势与挑战
- 6LoWPAN物联网边界路由器:设计与实现
- 猩便利工程师仲小玉:Terraform云资源管理最佳实践与团队协作
- 类差分度改进的互信息特征选择提升文本分类性能
- VERITAS与阿里云合作的混合云转型与数据保护方案
- 云制造中的生产线仿真模型设计与虚拟化研究
- 汪洋在PostgresChina2018分享:高可用 PostgreSQL 工具与架构设计
- 2018 PostgresChina大会:阿里云时空引擎Ganos在PostgreSQL中的创新应用与多模型存储
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功