前言
嵌入式软件开发是嵌入式产品开发的关键技术之一,特别是基于Linux操作系统的嵌入式软件开发,已经成为嵌入式开发的主要领域,它不但涉及Linux操作系统内核的移植、剪裁和优化,还包含大量外设接口、总线等的驱动程序开发、移植和优化,以及大量的面向具体应用需求和产品要求的图形化应用软件开发。
本书是一本面向产品开发基本职业技能的嵌入式Linux软件开发入门书籍,适合于下列读者群:
◆ 嵌入式行业新入职的软硬件开发人员。
◆ 原来从事单片机系统开发,有意转向SoC(片上系统)开发的技术人员。
◆ 高等院校和各类职业教育院校信息技术相关专业高年级学生和研究生一年级学生。
◆ 嵌入式技术爱好者。
本书也可为嵌入式行业在职技术人员、高等院校和各类职业教育院校信息技术相关专业教师及实验辅导人员提供一定的技术参考。
本书的结构安排反映了作者多年从事嵌入式软件开发的丰富经验和对嵌入式产品开发基本职业技能要求的深入理解,也参考了本书评审专家和友好读者的意见,同时考虑到了大多数读者的现实技术基础;当然,许多网络书店上大量读者对已出版的相关书籍所做的书评也给了作者非常有益的启示。本书整体结构实际上遵循了嵌入式产品软件开发的基本工作流程,从Linux操作系统下的基本编程和面向软件开发的ARM体系硬件平台关键特性及其编程应用,到Linux操作系统的内核编程及系统调用、内核移植与剪裁、驱动程序开发和移植,直至Linux环境下的图形化应用软件开发,涵盖了嵌入式产品软件开发工作的各种主要技术,并且最后通过一个实际项目开发综合再现了全书的核心内容。
本书分为6 个部分。
第1 章从产品、服务和应用的角度,概括地介绍嵌入式技术的主要市场应用、嵌入式产品开发中涉及到的关键技术,让读者基本了解掌握嵌入式软件开发技术后能够从事哪些产品的开发、能够在哪些行业寻找适合的工作岗位。第2 章从嵌入式系统软件产品开发的角度,重点阐述C语言编程的核心要领,特别是在Linux和嵌入式Linux环境下C语言编程的关键技术。第3 章引导读者利用开源软件,搭建嵌入式Linux软件开发的基本工作环境,主要是帮助读者在目前最流行的Linux发行版本——Debian 5.0 上顺利搭建一套实用性软件开发环境。
这一部分包括第4 章到第7 章,主要是与硬件平台和ARM CPU基础指令有关的内容。第4 章主要从软件开发编程的角度,详细介绍ARM9 体系的核心架构、ARM常用指令及其编程应用和ARM汇编语言程序开发方法。第5 章主要是引导读者顺利完成一套嵌入式系统的固件(Firmware)开发环境的搭建和使用。第6 章首先介绍目前市场上比较常见的三星S3C2410A嵌入式处理器的基本体系结构、工作原理,然后详细分析S3C2410A处理器主要接口和外设控制器的工作原理以及使用方式。第7 章以目前嵌入式Linux系统中最常见的系统引导(bootloader)软件U-boot为例,帮助读者理解bootloader的工作机制、开发移植流程和系统应用。
这一部分包括第8 章到第12 章,是Linux软件开发的基础。第8 章是Linux系统编程的基础,重点讨论Linux系统中程序的层次结构和内存映像、Linux库函数的错误处理以及环境变量等。第9 章主要讨论Linux的文件系统及其编程应用,由于Linux系统中很多设备的操作是以文件系统的方式处理的,因此文件系统在Linux中十分重要。第10 章详细介绍操作系统的一个核心概念——进程,还涉及到进程的同步和进程间通信等基本编程应用。第11 章讲解socket编程这一Linux网络通信应用的基础。第12 章主要讲解多线程程序的编程开发。
这一部分包括第13 章到第16 章。第13 章介绍实模式与保护模式、用户态与内核态等基本概念,同时还介绍了内核编程的一些特点,以一个简单的字符设备为例说明了驱动编程的一般方法。第14 章主要讨论Linux编程的内核接口及其应用。第15 章介绍Linux 2.6 版本的设备模型和编程应用要点。第16 章以输入设备驱动和USB设备驱动为例介绍Linux设备驱动程序开发的基本原理和方法。由于很多读者没有编程经验,或者以前主要从事应用编程,而从应用编程到内核和驱动编程无论是概念还是方法都需要一定的转变,这一部分的目的就是引导读者完成这一转变。
这一部分内容相对简单,作者认为绝大多数读者不会从事Linux内核的开发,而是有目的地使用或者剪裁稳定版本的Linux内核,因此在第17 章中主要介绍Linux内核的配置原理与方法,并举例说明其中关键操作的基本流程,在第18 章中则主要讲解并演示Linux根文件系统构建和移植的方法。通过这两章,读者基本可以掌握嵌入式Linux系统内核的配置方法,进行简单的内核移植,以及按应用要求构造根文件系统。
这一部分包括第19 章到第22 章,主要目的是帮助读者熟悉针对诸如智能手机、自助终端等终端设备类功能需求的应用开发。第19 章从开发编程的角度介绍C++ 特有的概念和用法,适合那些对C语言有一定基础的读者快速进入C++ 编程领域。第20 章以目前嵌入式行业最常见的开发环境——Qt 4.5.2 的开源版本为例,介绍如何使用Qt平台进行嵌入式GUI的开发。第21 章则简单介绍最常用的嵌入式数据库SQLite的应用开发方法。第22 章通过一个实际产品开发中的典型项目案例,将本书核心内容贯穿于一体,使读者有机会全方位地了解嵌入式产品的软件开发流程和实施方法。
本书的作者长期从事嵌入式软件开发工作,本书既是他们经验和教训的汇总,也是他们对嵌入式产品软件开发的理解。书中内容取舍与结构安排均面向嵌入式软件开发的实际需要;书中的代码均经过编译和运行,进行了严格的测试,部分代码来自实际产品开发工作并且经过终端产品的长期应用考验;Linux内核版本选择的是初稿完成时的最新内核稳定版本——Linux 2.6.30;应用开发环境则选择的是最新的跨操作系统开发平台——Qt Embedded 4.5.1,特别是本书支持网站上提供的Qt Embedded 4.5.1是本书初稿完成时全球唯一的支持简体中文处理的版本(这个版本也是本书几位作者移植成功的)。
本书的支持网站是http://www.cjhytec.com,提供例程源码的下载。
本书由何永琪教授主编,杨红涛负责编写第4章到第12章、第17章、第18章、第21章和第22章,焦悦光负责编写第2章、第3章、第13章到第16章、第19章和第20章,戴无惧负责编写前言和第1章并起草全书大纲。邓莹莹为第19章和第20章提供部分章节初稿,袁裕芳、张欣然和朱子豪为第20章、第21章和第22章提供部分章节初稿,周聪、林胜朋和王松为第6章和第22章提供部分章节初稿,吴龙和李英良为第11章、第15章和第16章提供部分章节初稿,魏大庆和江中舟负责全书图例绘制。焦悦光最后统稿全书。