没有合适的资源?快使用搜索试试~ 我知道了~
首页Linux入门升级版:打造全方位驱动学习平台
Linux入门升级版:打造全方位驱动学习平台
需积分: 2 3 下载量 123 浏览量
更新于2024-07-19
收藏 36.83MB PDF 举报
"《Linux入门》是一本面向初学者和开发者的经典教材,旨在帮助读者理解和掌握Linux设备驱动编程。自2008年第一版发布以来,它因其详实的内容和实用性而受到欢迎,但同时也面临着一些挑战,如缺乏现成的开发环境、依赖特定硬件平台以及部分内容的过时和不够完整。 针对这些问题,第二版进行了重大改进。首先,作者提供了VirtualBox虚拟机作为预装的开发环境,包含了必要的软件和源代码,使读者无需自行搭建,简化了实验过程并降低了入门门槛。书中还详细介绍了每个实验步骤,便于读者跟随实践。 其次,第二版引入了基于三星S3C6410 SoC的LDD6410学习板,为实际驱动实例的实践提供了硬件支持,让读者能够亲身参与驱动程序的开发和调试。 在内容上,内核版本升级至Linux 2.6.28.6,反映了最新的技术发展,如更新了I2C驱动架构和网络NAPI接口,并讲解了新的内核机制如delayed_work。此外,第二版删除了过时的技术,如传统按键驱动和IDE驱动,增添了现代元素,如Linux内核编码规范、移植指南、Android驱动、高级设备驱动(如USB UDC、gadget、ALSASoC、input、SPI、sysfs驱动等)、固件加载、性能调优、电源管理和驱动分层设计等。 最后,第二版强调了驱动设计的新理念,如主机驱动与设备驱动的分离设计,这不仅提升了驱动的模块化,也有利于代码的维护和复用。第二版《Linux入门》致力于提供一个更为精确、全面且易于使用的Linux设备驱动学习平台,无论对于初次接触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页未读,继续阅读
meilidandong
- 粉丝: 1
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Flex垃圾回收与内存管理:防止内存泄露
- Python编程规范与最佳实践
- EJB3入门:实战教程与核心概念详解
- Python指南v2.6简体中文版——入门教程
- ANSYS单元类型详解:从Link1到Link11
- 深度解析C语言特性与实践应用
- Gentoo Linux安装与使用全面指南
- 牛津词典txt版:信息技术领域的便捷电子书
- VC++基础教程:从入门到精通
- CTO与程序员职业规划:能力提升与路径指南
- Google开放手机联盟与Android开发教程
- 探索Android触屏界面开发:从入门到设计原则
- Ajax实战:从理论到实践
- 探索Android应用开发:从入门到精通
- LM317T稳压管详解:1.5A可调输出,过载保护
- C语言实现SOCKET文件传输简单教程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功