本教程是面向嵌入式Linux学习和产品开发的入门教程,分上下两册。本书为下册,分3篇,共16章,内容涵盖Linux内核、设备驱动、系统整合和产品化等方面。其中,设备驱动部分是重点内容,从模块编写开始,深入浅出地讲述了驱动编写的各个方面;之后以Linux子系统为单位,分别讲述了各常用外设的驱动编写或移植,如LED、GPIO、I2C、SPI、Input子系统、串口、声卡、WiFi网卡和3G模块等。
本 书由浅入深,结构合理,实用性强,提供的范例稍加改动即可应用于实际项目。阅读本书需要有一定Linux使用基础,适合于准备往驱动方向发展的嵌入式Linux开发工程师,也可作为高校非计算机专业高年级学生学习嵌入式Linux驱动的参考教材。
第1篇 嵌入式Linux内核驱动开发
第1章 Linux内核裁剪和定制………………………………………………………… 3
1.1 Linux内核开发简介…………………………………………………………… 3
1.2 Linux源码阅读工具…………………………………………………………… 3
1.2.1 SourceInsight……………………………………………………………… 4
1.2.2 Eclipse ……………………………………………………………………… 6
1.2.3 Vim+ctags+cscope ……………………………………………………… 8
1.2.4 LXR ………………………………………………………………………… 8
1.3 Linux内核源码………………………………………………………………… 10
1.3.1 目录树概览………………………………………………………………… 10
1.3.2 快速确定主板关联代码…………………………………………………… 12
1.4 Linux内核中的Makefile文件………………………………………………… 14
1.4.1 顶层Makefile …………………………………………………………… 15
1.4.2 子目录的Makefile ……………………………………………………… 16
1.5 Linux内核中的Kconfig文件………………………………………………… 17
1.5.1 Kconfig基本语法………………………………………………………… 17
1.5.2 配置项和配置开关………………………………………………………… 20
1.6 配置和编译Linux内核……………………………………………………… 21
1.6.1 快速配置内核……………………………………………………………… 21
1.6.2 内核配置详情……………………………………………………………… 23
1.6.3 编译内核…………………………………………………………………… 32
1.6.4 运行内核…………………………………………………………………… 37
1.7 Linux内核裁剪实例…………………………………………………………… 38
1.7.1 GPIO子系统配置………………………………………………………… 38
1.7.2 LED子系统配置………………………………………………………… 39
1.7.3 串口配置…………………………………………………………………… 40
1.7.4 USBHost驱动配置……………………………………………………… 40
1.7.5 USBGadget驱动配置…………………………………………………… 42
1.7.6 SD/MMC驱动配置……………………………………………………… 43
1.7.7 网卡驱动配置……………………………………………………………… 44
1.7.8 NFSClient配置………………………………………………………… 45
1.7.9 PPP拨号配置…………………………………………………………… 45
1.7.10 MTD配置……………………………………………………………… 46
1.7.11 UBIFS文件系统配置…………………………………………………… 47
1.7.12 CAN 驱动配置…………………………………………………………… 47
1.8 EPC-28x平台内核快速编译………………………………………………… 48
第2章 Linux设备驱动基础………………………………………………………… 49
2.1 Linux内核模块………………………………………………………………… 49
2.1.1 Linux和模块……………………………………………………………… 49
2.1.2 编写内核模块……………………………………………………………… 49
2.1.3 最简单的内核模块………………………………………………………… 53
2.1.4 带参数的内核模块………………………………………………………… 54
2.2 Linux设备……………………………………………………………………… 56
2.2.1 Linux设备和分类………………………………………………………… 56
2.2.2 设备节点和设备号………………………………………………………… 56
2.2.3 设备的注册和注销………………………………………………………… 60
2.3 Linux设备和驱动……………………………………………………………… 62
2.3.1 驱动在Linux中的地位………………………………………………… 62
2.3.2 驱动的基本要素…………………………………………………………… 62
2.3.3 驱动和应用程序的差别…………………………………………………… 63
2.3.4 驱动的入口和出口………………………………………………………… 63
2.3.5 支持udev设备管理方法………………………………………………… 65
2.3.6 设备驱动的操作方法……………………………………………………… 70
2.4 字符驱动框架…………………………………………………………………… 74
2.4.1 字符驱动框架……………………………………………………………… 74
2.4.2 测试程序…………………………………………………………………… 78
2.5 第一个完整意义上的驱动……………………………………………………… 80
2.5.1 ioctl命令………………………………………………………………… 80
2.5.2 内核空间的ioctl ………………………………………………………… 82
2.5.3 用户空间的ioctl ………………………………………………………… 82
2.5.4 LED驱动范例…………………………………………………………… 82
2.6 内核/用户空间的数据交换…………………………………………………… 88
2.6.1 检查地址的合法性………………………………………………………… 88
2.6.2 往用户空间传递数据……………………………………………………… 88
2.6.3 从用户空间获取数据……………………………………………………… 90
2.6.4 支持读/写的驱动范例…………………………………………………… 91
2.7 在驱动中使用中断……………………………………………………………… 96
2.7.1 申请和释放中断…………………………………………………………… 96
2.7.2 中断处理程序编写………………………………………………………… 98
2.7.3 按键驱动…………………………………………………………………… 99
2.8 混杂设备驱动编程…………………………………………………………… 103
2.8.1 混杂设备和驱动………………………………………………………… 103
2.8.2 混杂设备驱动框架……………………………………………………… 104
2.9 I/O内存访问………………………………………………………………… 107
2.9.1 静态I/O映射…………………………………………………………… 107
2.9.2 动态I/O映射…………………………………………………………… 110
2.9.3 I/O内存访问函数……………………………………………………… 110
2.10 Linux设备驱动模型………………………………………………………… 111
2.10.1 设 备…………………………………………………………………… 111
2.10.2 驱 动…………………………………………………………………… 113
2.10.3 总 线…………………………………………………………………… 114
2.10.4 类………………………………………………………………………… 115
2.11 平台设备和驱动……………………………………………………………… 117
2.11.1 资 源…………………………………………………………………… 117
2.11.2 平台设备………………………………………………………………… 119
2.11.3 平台驱动………………………………………………………………… 122
2.11.4 平台驱动与普通驱动的差异…………………………………………… 123
2.11.5 平台驱动范例…………………………………………………………… 124
第3章 LED 子系统和驱动………………………………………………………… 131
3.1 LED子系统驱动简介………………………………………………………… 131
3.2 LED子系统的分层结构……………………………………………………… 131
3.3 LED设备的实现……………………………………………………………… 132
3.4 i.MX28平台的LED设备…………………………………………………… 135
第4章 GPIO 驱动…………………………………………………………………… 138
4.1 GPIOLIB简介………………………………………………………………… 138
4.2 GPIOLIB的内核接口………………………………………………………… 138
4.3 GPIOLIB的实现方法………………………………………………………… 139
4.4 驱动示例……………………………………………………………………… 141
第5章 输入子系统和按键驱动……………………………………………………… 149
5.1 输入子系统…………………………………………………………………… 149
5.1.1 输入子系统构成………………………………………………………… 149
5.1.2 各事件管理器详解……………………………………………………… 152
5.1.3 设备驱动………………………………………………………………… 154
5.2 驱动实现……………………………………………………………………… 158
5.2.1 电路和原理……………………………………………………………… 158
5.2.2 按键驱动实现…………………………………………………………… 159
第6章 I2C总线和外设驱动………………………………………………………… 165
6.1 I2C子系统…………………………………………………………………… 165
6.1.1 I2C子系统的设计思路………………………………………………… 165
6.1.2 I2C子系统的实现……………………………………………………… 169
6.1.3 I2C子系统在/sys文件系统的信息…………………………………… 176
6.2 I2C驱动实现示例…………………………………………………………… 177
6.2.1 FM24C02A 驱动的设计思路…………………………………………… 177
6.2.2 添加FM24C02A 设备…………………………………………………… 178
6.2.3 实现FM24C02A 驱动…………………………………………………… 178
6.2.4 实现I2C驱动…………………………………………………………… 178
第7章 SPI总线和外设驱动………………………………………………………… 185
7.1 硬件连接……………………………………………………………………… 185
7.2 SPI驱动架构简析…………………………………………………………… 185
7.2.1 SPI核心层……………………………………………………………… 186
7.2.2 SPI主控制器驱动层…………………………………………………… 186
7.2.3 SPI设备驱动层………………………………………………………… 187
7.2.4 SPI数据传输…………………………………………………………… 191
7.3 SPINORFlash驱动………………………………………………………… 193
7.3.1 驱动实现………………………………………………………………… 194
7.3.2 配置和编译……………………………………………………………… 195
7.3.3 测试块设备……………………………………………………………… 196
7.4 SPI数码管显示驱动………………………………………………………… 197
7.4.1 电路原理………………………………………………………………… 197
7.4.2 驱动实现………………………………………………………………… 198
7.4.3 驱动编译和测试………………………………………………………… 202
第8章 UART和SC16IS752驱动…………………………………………………… 204
8.1 UART驱动简析……………………………………………………………… 204
8.1.1 重要数据结构…………………………………………………………… 204
8.1.2 UART驱动API………………………………………………………… 208
8.2 SC16IS752芯片和电路原理………………………………………………… 210
8.2.1 SC16IS752芯片介绍…………………………………………………… 210
8.2.2 电路原理………………………………………………………………… 212
8.2.3 驱动移植思路…………………………………………………………… 212
8.3 I2C接口驱动实现…………………………………………………………… 212
8.3.1 定义i2c_device_id ……………………………………………………… 212
8.3.2 添加注册I2C设备……………………………………………………… 213
8.3.3 I2C驱动实现…………………………………………………………… 214
8.4 UART相关驱动……………………………………………………………… 214
8.4.1 信息描述和数据结构…………………………………………………… 214
8.4.2 底层操作函数和实现…………………………………………………… 215
8.4.3 probe函数和实现……………………………………………………… 219
8.4.4 uart_ops函数和实现…………………………………………………… 221
8.4.5 中断处理………………………………………………………………… 230
8.5 串口测试……………………………………………………………………… 234
第9章 SGTL5000声卡驱动移植…………………………………………………… 235
9.1 背景交代……………………………………………………………………… 235
9.2 电路原理图…………………………………………………………………… 235
9.3 驱动移植……………………………………………………………………… 237
9.3.1 引脚设置………………………………………………………………… 237
9.3.2 添加SGTL5000I2C设备……………………………………………… 238
9.3.3 配置和编译……………………………………………………………… 239
9.3.4 修正播放音频的问题…………………………………………………… 239
9.4 音频接口操作………………………………………………………………… 242
第10章 AP6181无线网卡驱动移植……………………………………………… 247
10.1 硬件原理图…………………………………………………………………… 247
10.2 驱动移植……………………………………………………………………… 248
10.2.1 修改引脚功能…………………………………………………………… 248
10.2.2 添加mmc设备………………………………………………………… 250
10.2.3 添加驱动源码…………………………………………………………… 252
10.2.4 添加唤醒中断…………………………………………………………… 252
10.2.5 添加上下电控制………………………………………………………… 253
10.2.6 修改内核配置文件……………………………………………………… 254
10.2.7 配置内核………………………………………………………………… 255
10.2.8 编译内核、模块驱动…………………………………………………… 256
10.3 使用网卡……………………………………………………………………… 256
10.3.1 加载驱动模块…………………………………………………………… 256
10.3.2 连接到AP ……………………………………………………………… 257
第11章 SIM6320-PCIE3G模块驱动移植…………………………………………… 260
11.1 驱动移植……………………………………………………………………… 260
11.1.1 添加驱动源码…………………………………………………………… 260
11.1.2 配置内核………………………………………………………………… 260
11.2 PPP拨号上网……………………………………………………………… 262
第12章 嵌入式Linux和Bootloader ……………………………………………… 267
第13章 嵌入式Linux文件系统…………………………………………………… 290
第14章 Buildroot …………………………………………………………………… 301
第15章 OpenWRT ………………………………………………………………… 313
第3篇 产品化和创意
第16章 产品化和创意……………………………………………………………… 319
参考文献 ……………………………………………………………………………… 334
让我印象深刻的还有书中关于嵌入式系统调试技巧的详尽介绍。调试是嵌入式开发中至关重要的一环,也是最容易让人头疼的环节。本书不仅介绍了 GDB 等常用调试工具的使用方法,更深入地讲解了各种硬件调试技术,如 JTAG 接口、逻辑分析仪以及示波器等。书中提供的调试技巧和经验,让我能够在遇到问题时,更快速、更准确地定位故障,大大缩短了调试时间,提高了开发效率。
评分我尤其喜欢书中关于嵌入式 GUI 开发的章节。虽然不是所有的嵌入式项目都需要图形用户界面,但对于许多消费类电子产品而言,良好的用户体验至关重要。本书介绍了 Qt for Embedded 和 LVGL 等主流的嵌入式 GUI 框架,并详细讲解了如何利用这些框架来创建美观、交互性强的用户界面。书中提供的实例,让我能够快速上手,构建出具有专业水准的嵌入式图形界面,这对于我之前在 UI 设计方面比较薄弱的环节,有了很大的提升。
评分拿到这本《嵌入式Linux开发教程(下册)》,我怀着一种既期待又略带忐忑的心情翻开了它。期待是因为,之前已经认真研读了它的上册,对书中循序渐进的讲解方式、清晰明了的案例以及作者深厚的功底留下了深刻的印象。这本书的出现,无疑是对我持续深入学习嵌入式Linux开发的一次重要指引。然而,忐忑也随之而来,因为“下册”往往意味着难度和深度的双重提升,我担心自己能否完全消化其中的知识,能否真正掌握这些更为复杂和高级的开发技巧。 在阅读过程中,我首先被书中对内核驱动模型深入浅出的阐述所吸引。作者没有简单地罗列API,而是从 Linux 内核的整体架构出发,详细讲解了各种驱动程序的编写原理,包括字符设备、块设备和网络设备的驱动。每一个概念都配有详实的伪代码和实际的硬件平台示例,让我能够清晰地理解抽象的理论是如何落地到具体的硬件上的。特别是在讲解中断处理和同步机制的部分,书中通过多个生动形象的比喻,将原本枯燥的概念变得易于理解,让我对如何编写高效、稳定的驱动程序有了全新的认识。
评分本书在实时性方面的论述也是一大亮点。嵌入式系统往往对实时性有着严苛的要求,而 Linux 内核本身并非一个严格的实时操作系统。这本书却巧妙地解决了这个矛盾,书中详细介绍了如何利用 Linux 内核的实时扩展(PREEMPT_RT)来满足实时性需求,并对实时调度算法、定时器精度以及中断延迟等关键技术进行了深入剖析。通过书中提供的实验代码,我能够亲手体验到实时补丁带来的性能提升,这对于开发需要精确时间控制的工业控制、医疗设备等应用至关重要。
评分本书对于嵌入式系统性能优化的讲解,更是为我打开了一扇新的大门。随着嵌入式设备功能的日益丰富,对系统性能的要求也越来越高。书中详细介绍了各种性能优化的策略,包括代码优化、内存管理优化、中断优化以及功耗优化等。作者通过具体的案例,展示了如何通过分析系统瓶颈,并采取相应的优化措施来提升系统的整体性能,这对于我日后开发高性能嵌入式应用提供了重要的指导。
评分在阅读本书的过程中,我还有一个深刻的体会,那就是作者在强调理论知识的同时,也非常注重实践能力的培养。书中提供了大量的配套实验,涵盖了从基础的硬件调试到复杂的系统移植等各个方面。我按照书中的步骤,一步步地完成这些实验,不仅巩固了书本上的知识,还锻炼了我独立解决问题的能力。很多时候,我会在实验中遇到各种各样的问题,但通过查阅书籍的讲解和源代码,我都能一一找到解决的办法,这种成就感是无法言喻的。
评分总而言之,《嵌入式Linux开发教程(下册)》是一本集理论深度、实践指导和前沿技术于一体的优秀教材。它不仅系统地梳理了嵌入式Linux开发中关键的技术环节,更重要的是,它教会了我如何将这些知识融会贯通,并应用到实际的开发项目中。这本书对我而言,不仅仅是一本技术书籍,更像是一位经验丰富的导师,在我不断探索嵌入式Linux世界的道路上,给予我持续的支持和引导。我坚信,这本书将成为我未来嵌入式开发生涯中不可或缺的参考资料。
评分令人惊喜的是,本书还花了相当大的篇幅来讲解嵌入式系统的安全性。在当今互联互通的时代,嵌入式设备的安全性问题日益凸显。这本书从软件和硬件两个层面,全面介绍了常见的安全威胁以及相应的防护措施。例如,书中详细讲解了如何利用 SELinux 等安全机制来限制进程的权限,如何对敏感数据进行加密存储,以及如何通过硬件加密模块来提升系统的安全性。这些内容对于我理解和构建更加健壮、安全的嵌入式系统提供了宝贵的知识。
评分随着阅读的深入,我对本书在网络编程方面的讲解尤为赞赏。在嵌入式开发中,网络通信是绕不开的话题,而这本书恰好在这方面提供了非常详尽的指导。书中不仅介绍了 Socket 编程的基本概念和常用 API,更深入地探讨了 TCP/IP 协议栈的工作原理,以及如何在 Linux 内核层面进行网络相关的开发。我尤其对书中关于多线程、多进程网络服务器的设计与实现部分印象深刻,作者通过一个实际的案例,一步步地指导我如何构建一个能够处理高并发请求的网络服务,这对于我将来开发分布式系统或者物联网设备具有重要的指导意义。
评分除了技术内容的深入,本书的组织结构也让我受益匪浅。作者在编写每一章节时,都力求做到逻辑清晰,层层递进。在介绍一个新概念之前,都会先铺垫相关的背景知识,并在讲解过程中穿插大量的图表和代码示例,帮助读者更好地理解。而且,书中提供的每一个示例代码都经过了精心的设计和验证,不仅能够直接运行,还能根据实际需求进行修改和扩展,这极大地提高了我的学习效率。
评分书质量不错,书读快
评分写的不错,各个内容都写到了,适合学习。
评分写的不错,各个内容都写到了,适合学习。
评分不错的参考书
评分入门很好,要配合开发板。
评分书质量不错,书读快
评分书皮折了。。。。。。。。。。。
评分送货快,质量好,京东给力,下次还来。
评分还没打开看,搞活动买的,公司用,应该还行
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有