Linux嵌入式系统开发从小白到大牛
上QQ阅读APP看书,第一时间看更新

前言

2012年刚接触单片机时,我对其爱不释手,学习3个月后就自己动手画PCB板、选择51单片机、编程、选购4驱车架,一气呵成做出了自己设计的遥控车。时至今日再看人生中的第一辆DIY小车,除了自豪以外也有些许失落。失落原因无非在于自己对嵌入式系统了解得不够透彻,特别是学习了Linux系统以后。计算机系统是庞大的,尽管自己对物理层、数据链路层、网络层、传输层、会话层、表示层以及应用层都有所了解,但是在社会分工越来越明确的大背景下,要想在某个领域或者层次有所建树,就需要选择一个点来深耕。我选择的这个点就是嵌入式Linux系统开发。嵌入式系统一旦移植了操作系统,就能够同时处理多个任务,以及复杂的状态切换并可以进行音视频处理。现在计算机分层思想非常清晰明了,以一个物联网系统为例,底层物理层和数据链路层集成在板卡端,网络层多用面向可靠连接的TCP,传输层采用Socket套接字,应用层采用C/S、B/S以及P/S架构。因此也产生了许多应用工程师。这些应用工程师也许都会随着计算机的发展逐渐被淘汰。这也是为什么大部分IT工程师被称为“码农”和“攻城狮”的原因。但我认为在计算机行业不会被淘汰的有两种人,一种是爱学习的人,另一种是懂操作系统的人。

本书在章节安排上本着由易到难、深入浅出的原则,具体内容安排如下。

第1~3章主要介绍一些Linux嵌入式开发的基础知识点。第1章介绍了Linux嵌入式系统的应用和发展、分类和特点、系统架构以及系统环境的搭建等;第2章介绍了Linux操作系统的功能、基本命令、vi和vim编辑器的应用、文件链接以及编程方式等;第3章介绍了Linux嵌入式系统下的C语言编程。

第4、5章分别从硬件和软件的角度分析嵌入式Linux学习的相关工具。第4章对Linux嵌入式的硬件系统进行了详细介绍,包括微处理器字节序列存储的大小端模式、微处理器的系统架构、硬件系统的基本组成部分以及微处理器的两种编程方式等;第5章介绍了Linux嵌入式系统下交叉编译的相关知识,涉及gcc编译器的工作流程和使用方法、gdb调试工具的使用方法以及构建交叉编译工具链等内容。

第6~9章是本书的重点,在语言安排上也尽可能通俗简明,使初学者更容易理解,同时也能让“老师傅”产生共鸣。第6章讲解了Makefile的相关知识,包括Makefile的执行过程、语法基础、一般书写格式、变量的引用与赋值、模式规则与自动变量、条件判断以及如何编写自己的Makefile文件等;第7章重点讲解移植U-boot的过程,涉及Bootloader与U-boot的区别、U-boot的版本选择、U-boot的目录结构、U-boot的源代码编译与GUI、U-boot的Makefile代码分析以及实操应用等;第8章主要对Linux的内核进行介绍,涉及Linux体系与内核结构、Linux内核的子系统、Linux内核的配置与编译、Linux内核的启动过程以及Linux内核的实操应用等;第9章对嵌入式Linux根文件系统进行介绍,涉及根文件系统的作用、根文件系统目录结构、Busybox安装与编译过程、根文件系统的构建以及根文件系统的移植测试等。

第10~12章介绍了Linux的驱动开发,是本书的难点内容,这部分也是嵌入式Linux系统工程师必须要掌握的内容。这部分内容会涉及很多案例,驱动开发就像我们开始学习C语言一样,一定要多练习、多实践。为了激发读者开发Linux嵌入式系统的兴趣,特别引入了嵌入式Linux图形编程和网络编程知识。第10章介绍了Linux嵌入式系统的设备驱动,涉及设备驱动的分类、字符设备驱动的理论基础、字符设备驱动程序的编写以及字符设备驱动的移植测试等;第11章介绍了Linux嵌入式系统的设备树,涉及设备树的基础知识、基础语法、基于设备树的pinctrl和gpio子系统、基于设备树的platform设备驱动以及基于设备树的platform设备驱动移植等;第12章介绍了Linux嵌入式系统的驱动技术,涉及Linux系统下驱动程序框架概述、异常处理、并发与竞争、阻塞和非阻塞IO以及按键中断实验的具体实操应用等。

第13~16章结合了当下的物联网以及车联网等热门技术领域知识,完成了4个综合项目案例。第13章为自动控制系统应用实例,涉及自动浇灌系统的功能设计、硬件设计与实现、软件设计与实现以及系统的联合调试等;第14章为物联网应用实例,涉及智能快递柜系统的功能设计、硬件设计与实现、软件设计与实现以及系统的联合调试等;第15章为车联网应用实例,涉及车身控制系统的功能设计、硬件设计与实现、软件设计与实现以及系统的联合调试等;第16章为人工智能应用实例,涉及语音识别控制系统的功能设计、硬件设计与实现、软件设计与实现以及系统的联合调试等。

本书具有以下特色。

• 保留了传统的多进程、多线程、GUI、交叉编译等经典知识,增加了近两年应用较多的U-boot、内核以及文件系统移植等新知识

• 读者对象为硬件工程师、单片机工程师以及嵌入式软件工程师,同时,为适应创客文化的新背景,在特定的章节设置了通过树莓派运行嵌入式Linux的项目内容,拓展读者群

• 每一个章节都专门设置了“小白也要懂”和“技术大牛访谈”两个特色板块,并且结合案例实战、要点巩固以及综合项目实例,多角度、多维度地给读者呈现Linux嵌入式系统开发的过程。

配备视频操作,提供全部源代码,代码可移植、可重复利用、可二次开发。

• 迎合当下热门的自动控制、物联网、车联网以及人工智能等方向,设置多个项目实例,系统讲解相关项目的开发流程和细节。

本书由淄博职业学院赵凯编写,共约46万字。此外,人工智能、物联网、车联网等领域多位专家还为本书担当顾问并协助案例测试和素材整理,力求知识的严谨性和专业性。本书可作为各大专业院校电子、通信、计算机、自动化等专业的“嵌入式Linux系统开发”课程教材,也可作为嵌入式开发人员的参考用书,适用读者如下。

• Linux嵌入式开发初学者。

• 需要系统学习Linux嵌入式的开发人员。

• Linux嵌入式从业人员。

• Linux嵌入式开发爱好者。

• 大中专院校相关专业学生。

• 相关培训机构学习Linux嵌入式开发的学员。

由于作者水平有限,书中疏漏之处在所难免,望广大专家和读者提出宝贵意见。

编者