
本书以案例的形式,详细介绍嵌入式Linux开发技术,由浅入深地分析嵌入式系统、嵌入式Linux开发环境、嵌入式Linux应用开发技术和嵌入式Linux驱动开发技术,边学习理论知识边开发,将理论学习和工程实践结合起来,每个案例均附上完整的开发代码和配套PPT,可以在源代码的基础可以进行快速二次开发。
前 言 近年来,物联网、移动互联网、大数据、云计算和人工智能技术的迅猛发展,改变了社会的生产方式,大大提高了生产效率和社会生产力。工业和信息化部、国家发展和改革委员会联合制定了《智能硬件产业创新发展专项行动(2016—2018年)》,提出了智能硬件发展的重点任务:提升高端智能穿戴、智能车载、智能医疗、智能服务机器人及工业级智能硬件产品的供给能力;加强低功耗轻量级底层软硬件技术、高性能智能感知技术、高精度运动与姿态控制技术、低功耗广域智能物联技术和端云一体化协同技术等智能硬件核心关键技术创新;推动健康养老、教育、医疗、工业等重点领域智能化提升。可以看出,我国在推动智能产品和嵌入式系统应用方面的决心,相信嵌入式系统的应用规模会越来越大。 作为嵌入式系统的主流开发技术,嵌入式Linux开发技术涉及的方面很多,如嵌入式Linux开发环境、嵌入式Linux系统的移植、Linux应用开发技术、Linux驱动程序开发技术等。本书结合具体的开发实践,由浅入深地介绍嵌入式Linux开发技术,每个开发实践均有完整的代码。读者可在开发实践代码的基础上快速地进行二次开发,并能够方便地将这些代码转化为各种比赛和创新创业的案例。这些开发实践不仅可为高等院校相关专业提供教学案例,也可为工程技术开发人员和科研工作人员提供较好的参考资料。 全书包括5章: 第1章是嵌入式系统概述,主要内容包括嵌入式系统的定义、特点与组成,嵌入式操作系统,Linux操作系统,嵌入式技术的应用,通过开发实践引导读者认知嵌入式系统。 第2章是嵌入式Linux开发环境,主要内容包括Linux的安装与基本命令、常用的嵌入式开发工具、Linux的编译环境。通过本章的学习,读者可以搭建嵌入式Linux开发环境,为后续的嵌入式开发做好准备。 第3章是嵌入式Linux系统的移植,主要内容包括BootLoader的移植与应用、Linux的内核与配置、Linux的文件系统与移植。 第4章是Linux应用开发技术,主要内容包括Linux文件与多任务编程、Linux网络编程、Linux数据库开发、嵌入式Web服务器应用。 第5章是Linux驱动程序开发技术,主要内容包括Linux驱动程序开发基础、字符设备驱动程序的开发、总线设备驱动程序的开发、块设备驱动程序的开发、网络设备驱动程序的开发。 本书将理论知识和开发实践相结合,读者可以边学习理论知识边开发实践,可以快速掌握嵌入式Linux开发技术。本书既可作为高等院校相关专业的教材或教学参考书,也可供相关领域的工程技术人员阅读。对于物联网开发的爱好者来说,本书也是一本深入浅出的读物。 本书在编写过程中,借鉴和参考了国内外专家、学者、技术人员的相关研究成果,我们尽可能按学术规范予以说明,在此谨向有关作者表示感谢,但难免会有疏漏之处,如有疏漏,请及时通过出版社与我们联系。 由于本书涉及的知识面广,编写时间仓促,限于作者的水平和经验,疏漏之处在所难免,恳请广大专家和读者批评指正。 作 者 2021年10月
目 录 第1章 嵌入式系统概述 (1) 1.1 嵌入式系统的定义、特点与组成 (1) 1.1.1 嵌入式系统的定义 (1) 1.1.2 嵌入式系统的特点 (1) 1.1.3 嵌入式系统的组成 (2) 1.2 嵌入式操作系统 (3) 1.3 Linux操作系统 (3) 1.3.1 Linux简介 (3) 1.3.2 Linux的发行版本 (4) 1.4 嵌入式技术的应用 (4) 1.5 开发实践:认知嵌入式系统 (5) 1.5.1 嵌入式系统硬件认知 (5) 1.5.2 嵌入式系统运行测试 (8) 1.6 小结 (9) 1.7 思考与拓展 (9) 第2章 嵌入式Linux开发环境 (11) 2.1 Linux的安装与基本命令 (11) 2.1.1 Linux的安装与配置 (11) 2.1.2 Linux的软件包管理机制 (15) 2.1.3 Linux的Shell与基本命令 (17) 2.1.4 Linux的编辑器 (20) 2.1.5 Shell脚本 (22) 2.1.6 开发实践:Linux的安装与vim编辑器的使用 (28) 2.1.7 小结 (30) 2.1.8 思考与拓展 (30) 2.2 常用的嵌入式开发工具 (30) 2.2.1 嵌入式Linux的开发模式 (30) 2.2.2 远程控制工具 (31) 2.2.3 串口通信工具 (32) 2.2.4 文件传输工具 (33) 2.2.5 源代码管理工具 (34) 2.2.6 开发实践:嵌入式开发工具的使用 (36) 2.2.7 小结 (38) 2.2.8 思考与拓展 (38) 2.3 Linux的编译环境 (38) 2.3.1 Linux程序的开发环境 (38) 2.3.2 Linux编译器的安装与使用 (39) 2.3.3 Linux的动态库与静态库 (41) 2.3.4 Linux调试器的安装与使用 (42) 2.3.5 Makefile文件的编写 (44) 2.3.6 开发实践:Linux的编译环境 (46) 2.3.7 小结 (49) 2.3.8 思考与拓展 (49) 第3章 嵌入式Linux系统的移植 (51) 3.1 BootLoader的移植与应用 (51) 3.1.1 BootLoader简介 (51) 3.1.2 U-Boot的移植 (53) 3.1.3 U-Boot的使用 (55) 3.1.4 开发实践:U-Boot的编译 (58) 3.1.5 小结 (60) 3.1.6 思考与拓展 (60) 3.2 Linux的内核与配置 (60) 3.2.1 Linux的体系结构与内核 (60) 3.2.2 Linux内核分析 (62) 3.2.3 Linux内核的配置 (71) 3.2.4 Linux内核调试技术 (76) 3.2.5 开发实践:编译与测试 (78) 3.2.6 小结 (83) 3.2.7 思考与拓展 (84) 3.3 Linux的文件系统与移植 (84) 3.3.1 Linux文件系统 (84) 3.3.2 Linux的根文件系统 (86) 3.3.3 使用BusyBox制作根文件系统 (88) 3.3.4 Ubuntu嵌入式系统移植 (89) 3.3.5 开发实践:Ubuntu根文件系统的制作 (92) 3.3.6 小结 (93) 3.3.7 思考与拓展 (94) 第4章 Linux应用开发技术 (95) 4.1 Linux文件与多任务编程 (95) 4.1.1 Linux文件编程 (95) 4.1.2 Linux进程编程 (105) 4.1.3 进程间通信技术 (107) 4.1.4 Linux线程编程 (120) 4.1.5 开发实践:Linux系统应用编程 (127) 4.1.6 小结 (134) 4.1.7 思考与拓展 (135) 4.2 Linux网络编程 (135) 4.2.1 网络编程基础 (135) 4.2.2 UDP网络编程 (139) 4.2.3 TCP网络编程 (143) 4.2.4 开发实践:Linux网络编程 (149) 4.2.5 小结 (159) 4.2.6 思考与拓展 (159) 4.3 Linux数据库开发 (159) 4.3.1 嵌入式数据库 (159) 4.3.2 SQLite3数据库的操作 (160) 4.3.3 SQLite3数据库的编程 (163) 4.3.4 开发实践:Linux数据库编程 (168) 4.3.5 小结 (170) 4.3.6 思考与拓展 (170) 4.4 嵌入式Web服务器应用 (170) 4.4.1 嵌入式Web服务器 (170) 4.4.2 Boa服务器的移植与测试 (171) 4.4.3 CGI开发技术 (172) 4.4.4 开发实践:嵌入式Web服务器应用 (174) 4.4.5 小结 (178) 4.4.6 思考与拓展 (178) 第5章 Linux驱动程序开发技术 (179) 5.1 Linux驱动程序开发基础 (179) 5.1.1 Linux驱动程序的概念 (179) 5.1.2 Linux驱动程序的开发 (184) 5.1.3 GPIO驱动程序的开发 (192) 5.1.4 总线设备驱动程序 (196) 5.1.5 基于设备树的驱动程序设计 (199) 5.1.6 开发实践:LED驱动程序的开发 (203) 5.1.7 小结 (209) 5.1.8 思考与拓展 (209) 5.2 字符设备驱动程序的开发 (209) 5.2.1 按键驱动程序的开发 (209) 5.2.2 ADC驱动程序的开发 (217) 5.2.3 PWM驱动程序的开发 (220) 5.2.4 开发实践:按键、ADC、PWM驱动程序的开发与测试 (225) 5.2.5 小结 (242) 5.2.6 思考与拓展 (242) 5.3 总线设备驱动程序的开发 (242) 5.3.1 I2C总线概述 (242) 5.3.2 I2C总线驱动程序的开发 (244) 5.3.3 I2C总线驱动程序接口函数 (247) 5.3.4 开发实践:I2C总线驱动程序的开发 (250) 5.3.5 小结 (259) 5.3.6 思考与拓展 (259) 5.4 块设备驱动程序的开发 (259) 5.4.1 Linux块设备 (260) 5.4.2 Linux块设备驱动程序的开发 (261) 5.4.3 RamDisk块设备驱动程序的分析 (275) 5.4.4 开发实践:RamDisk块设备驱动程序 (276) 5.4.5 小结 (281) 5.4.6 思考与拓展 (281) 5.5 网络设备驱动程序的开发 (281) 5.5.1 Linux网络设备概述 (281) 5.5.2 网络设备驱动程序的开发 (282) 5.5.3 虚拟网络设备驱动程序的开发 (292) 5.5.4 开发实践:虚拟网络设备驱动程序的开发与测试 (292) 5.5.5 小结 (296) 5.5.6 思考与拓展 (296) 参考文献 (297)