图书前言

前    言

随着超大规模集成电路的发展,计算机处理器技术不断提高,计算机芯片的处理能力越来越强,体积越来越小,计算机技术广泛应用到生活的方方面面。与人们日常生活打交道最多的就是嵌入式系统,从目前广泛使用的手机、MP3播放器、家用电器到无人机、自动驾驶汽车、机器人,嵌入式系统的应用无处不在。嵌入式系统的开发占整个计算机系统开发的比重也越来越大。

嵌入式系统开发与传统的计算机程序开发不同。嵌入式系统开发涉及软件和硬件的开发,是一个协同工作的统一体。目前,已经有许多的嵌入式系统硬件和操作系统软件,其中应用最广泛的是ARM/AArch64嵌入式处理器和Linux系统。

写作思路

嵌入式开发的涉及面很广,要在一本书中讲述所有内容是不可能的。可以这么说,如果谁看到某本书囊括很多内容,但篇幅又不大,那基本上是蜻蜓点水,毫无深度。嵌入式开发必须集中某个知识点学透相关知识,才能从事这方面的基本开发,然后在工作中不断提高。那应该如何进行学习呢?笔者的经验是分两大块来学,分别是主机端的驱动和设备端系统的构建。

通常嵌入式产品都会有一个主机端运行的用户程序(或称客户端),它通过主机端的驱动和设备端应用程序通信,指示设备端完成某个功能;而设备端也是一个Linux系统,它除运行设备端应用程序外,还要运行设备端驱动程序,以此让设备端应用程序和设备端的某个硬件设备通信。但初学者(比如,学生朋友)不可能购买所有的设备端硬件(费用太高)来学习设备端驱动,因此我们可以把学习驱动的过程放在主机端来,也就是在主机端的Linux虚拟机中学习驱动开发,一旦学会,以后转到设备端开发驱动程序大同小异,甚至只是换个编译器而已。

另外,笔者为了让初学者节省学习成本,把主机端的驱动开发也尽量做成虚拟驱动开发,也就是说没有硬件,不需要购买昂贵的开发板,也可以学习驱动开发。区别就是看不到实际硬件的工作结果,但我们可以用数据来表示,比如驱动模块收到上层发来的数据1,就表示灯亮了。在实际工作中,我们只需要替换调用一下厂家提供的硬件操作API函数即可,这些函数我们可以现学现用,没必要在初学阶段去掌握。

除驱动开发外,设备端的系统构建也是一个难点,幸运的是,我们依然可以使用QEMU这个软件来模拟一个开发板,并在QEMU上编译一个内核并启动这个内核,再加上文件系统,等等。这些步骤与实际在开发板上的操作区别不大。开发板最多就是多了一个Uboot(类似于计算机的BIOS)开机引导程序,而这个开机引导程序开发板厂家也是会提供的。

基于这两点(驱动和基于内核的系统构建),我们以此为重点贯穿本书,并给出较多的实例和详细的说明,相信读者能够快速进入嵌入式开发的大门。

源码资源下载

本书配套示例源码需要用微信扫描下面的二维码获取,也可按扫描出来的页面提示输入你的电子邮箱,把下载链接发送到邮箱中再下载。

如果在学习和下载资源的过程中遇到问题,可以发送邮件至booksaga@163.com,邮件主题写“嵌入式Linux驱动开发实践”。

作者答疑服务

如果在学习过程中遇到问题,也可以向作者写信或加作者QQ,作者联系方式参见下载资源中的相关文件。

作   者

2023年12月