ARM嵌入式Linux系统开发从入门到精通

ARM嵌入式Linux系统开发从入门到精通"

作者:李亚锋
ISBN:9787302156871
定价:¥39
字数:千字
页数:
出版时间:2007.08.01
开本:
版次:1-3
装帧:
出版社:清华大学出版社
简介

Linux是一个成熟而稳定的开放源代码操作系统,将Linux植入嵌入式设备具有众多的优点。本书以应用最广泛的新一代ARM9处理器为对象,介绍了ARM Linux 系统移植,包括嵌入式系统开发入门,交叉编译器的构建,BootLoader的移植与实现及Linux 2.6内核的编译与下载;ARM Linux的驱动程序开发,包括最常见的字符设备驱动的分析,块设备驱动的分析以及网络设备驱动的分析;Qt GUI开发,包括Qt的具体安装,Qt的核心技术以及最新的Qtopia Core开发环境;最后通过实例来讲述Qtopia Core开发过程。

本书通俗易懂,可作为高等院校电子类、电气类、控制类、计算机类等专业本科生、研究生学习嵌入式Linux的参考书目或自学教材,也可供广大希望转入嵌入式领域的科研和工程技术人员参考使用,还可作为广大嵌入式培训班的教材和教辅材料。

前言

由于芯片、软件、网络和传感器等技术的不断发展,嵌入式系统正在成为未来社会的“数字基因”。如今,人类已经进入了后PC时代,嵌入式技术已被广泛应用于科学研究、工程设计、军事技术以及文艺、商业等方面,成为后PC时代的主力军。与此同时,嵌入式Linux操作系统也在嵌入式领域蓬勃发展,它不仅继承了Linux的源码开放、内核稳定性强、软件丰富等特点,而且还支持几乎所有的主流处理器和硬件平台。嵌入式硬件系统和Linux系统的有机结合,成为后PC时代计算机最普遍的应用形式。嵌入式Linux技术在中国有巨大的发展潜力和市场需求。有数据显示,未来两年里,在计算机、消费电子、通信、汽车电子、工业控制和军事国防这六大主要应用领域,嵌入式Linux产品将达到80亿美元的市场规模,可见这个行业的前景是非常乐观的。当然,Linux嵌入式操作系统本身也有一定的局限性,就是开发难度过高,对于企业需要很高的技术实力。这就要求Linux系统厂商们不光要利用Linux,更要掌握Linux。此外,社会需要更多人加入到学习和使用Linux的行列中来。

嵌入式Linux属于一个交叉学科,并且也是一个高起点的学科,它涵盖了微电子技术、电子信息技术、计算机软件和硬件等多项技术领域的应用。另外,学习嵌入式Linux最好具备相应的嵌入式开发板和软件,还需要有经验的人进行指导开发,目前国内大部分高校都很难达到这种要求,这也造成了目前国内嵌入式Linux开发人才极其缺乏的局面。

很多希望学习嵌入式Linux的人已经具备了一定的硬件知识,并且对操作系统原理、数据结构等都有相当的了解,但在Linux技术方面都是零起   点。目前嵌入式Linux的书籍也是非常之多,但大部分都要求读者有一定的Linux使用基础,对于初学者来说真的非常困难。写这本书的主要目的就是能对那些没有Linux开发经验的初学者有个很好的指导参考作用,让他们少走弯路。

其次,笔者希望通过写书来总结这几年在工作中的项目经验,与更多的读者分享自己的技术,也是对自己所做项目的一个巩固。通过写这本书,让笔者更加清楚了实践与理论之间的联系,书中的每个章节都结合自己的亲身经验和教训进行讲解。

本书特点

首先,本书涵盖了嵌入式Linux系统中最重要的3个部分:ARM Linux系统移植、ARM Linux驱动程序开发以及Qt GUI开发,这在同类书籍中比较少见。其次,本书的讲述不依赖于具体某个厂家的开发板,这样读者使用任意一款类似的开发板就可以进行实践学习,同时对于没有开发板的读者也可以学到更多的知识。另外,本书提供了书中出现的所有实例的源代码,便于读者参考使用,更重要的是读者不用手动输入这些代码,从而节

省了时间。

本书主要内容

本书分为3部分,共12章,每一部分由4章组成。

第一部分讲述ARM Linux系统移植,首先第1章讲述嵌入式系统开发入门,主要针对初学者,讲述嵌入式系统的概要、ARM处理器、ADS工具、Linux开发环境,以及Linux内核源码等。接着第2章讲述交叉编译工具链的构建,主要讲述交叉工具链的作用、使用分步法构建交叉工具链和使用Crosstool工具构建交叉工具链。第3章讲述嵌入式系统的BootLoader,主要讲述嵌入式BootLoader的作用、基于S3C2410开发板的U-Boot分析与移植以及自己设计BootLoader的方  法。最后,第4章讲述嵌入式Linux内核移植,主要讲述移植的基本概念、内核配置、内核编译、内核下载以及构建根文件系统。

第二部分讲述ARM Linux驱动程序开发,首先,第5章讲述ARM Linux驱动程序开发入门,主要讲述嵌入式Linux驱动程序、简单的内核模块程序分析,以及Linux驱动开发的基本要点。第6章讲述字符设备驱动程序,主要讲述字符设备驱动相关的重要数据结构、字符设备驱动开发实例——触摸屏设备驱动开发。第7章讲述块设备驱动程序,主要讲述块设备相关的数据结构、块设备驱动开发实例——MMC/SD设备驱动开发。最后,第8章讲述网络设备驱动程序,主要讲述网络设备驱动相关的重要数据结构、网络设备驱动开发实例——CS8900A网卡驱动开发。

第三部分讲述Qt GUI开发,首先,第9章介绍Qt的概要知识,包括Linux桌面GUI系统、Qt/X11、Qtopia Core等,使读者对Qt及其在Linux GUI系统中的作用有个大概了解。第10章讲述了Qt/X11的安装以及非常详细的应用实例,使读者可以轻松地编写基本的Qt程序。第11章    深入讨论了一些Qt的核心技术,重点是以Qt对象模型为基础的信号和槽等机制,通过剖析       Qt的源代码深入地学习Qt的这些核心技术,同时也为读者今后对Qt源代码的自行研习打下基础。最后,第12章重点讲述Qtopia Core和Qt/X11的一些不同之处,包括轻量级的窗口系统、QCOP进程间通信机制及调试工具qvfb等,使读者在熟悉了Qt/X11的基础上能够很快过渡到Qtopia Core开发。

本书的读者对象

本书通俗易懂,可作为高等院校电子类、电气类、控制类、计算机类等专业本科生、研究生学习嵌入式Linux的参考书目或自学教材,也可供广大希望转入嵌入式领域的科研和工程技术人员参考使用,还可作为广大嵌入式培训班的教材和教辅材料。

本书的编写得到了很多人的帮助和支持。首先要感谢这本书的另外一位作者欧文盛,书中Qt GUI部分(第9章~第12章)主要由他来完成,他这几年一直在国际知名的通信公司从事Qt方面的开发工作。其次,要感谢我的妻子,很特殊的是我写这本书的时间正是我妻子怀孕的期间,其实在写这本书之前已经得知妻子怀孕的消息,本想放弃编写,但是妻子却很坚定地支持我写这本书。所以,我认为这本书的完成离不开她对我的默默支持。还要感谢我的岳父、岳母,是他们对我妻子这段时间的精心照顾,才使得我有更多的时间投入到写书中。

最后,要感谢威盛电子的李松、易宏宇、周志勇、张磊等,他们为本书的完成也提供了很多的帮助。

鉴于作者水平有限,加之时间仓促,书中一定有不少不足与疏漏之处,希望得到广大读者的批评与指正。有兴趣的读者可以发送E-mail到lyf99526@yahoo.com.cn或登录笔者的个人Blog来做技术上的交流(http://mike2linus.blog.com.cn/)。

作  者       

2007年6月

II

III

目录

第一部分  ARM Linux系统移植

第1章  嵌入式系统开发入门 2

1.1  嵌入式系统介绍 2

1.1.1  嵌入式系统概述 2

1.1.2  嵌入式系统组成 4

1.2  ARM介绍 5

1.2.1  ARM处理器介绍 5

1.2.2  ARM处理器的选型 6

1.2.3  S3C2410微处理器介绍 7

1.3  ADS集成开发环境介绍 8

1.3.1  ADS软件组成 8

1.3.2  使用Code Warrior IDE 13

1.3.3  使用AXD IDE 16

1.4  嵌入式Linux开发介绍 19

1.4.1  Linux历史 19

1.4.2  Linux开发环境 20

1.4.3  GCC介绍 21

1.4.4  GNU Make介绍 23

1.4.5  GDB介绍 26

1.4.6  ARM Linux系统开发流程 29

1.5  Linux内核介绍 30

1.5.1  Linux内核结构 31

1.5.2  如何阅读Linux内核源代码 33

1.6  本章小结 34

1.7  常见问题 34

第2章  交叉编译工具链的构建 36

2.1  交叉编译工具链介绍 36

2.2  构建ARM Linux交叉编译工具链 36

2.2.1  分步构建交叉编译链 37

2.2.2  用Crosstool工具构建交叉工具链 43

2.3  本章小结 46

2.4  常见问题 46

第3章  嵌入式系统的BootLoader 48

3.1  BootLoader概述 48

3.2  常用的嵌入式Linux BootLoader 49

3.2.1  U-Boot 49

3.2.2  VIVI 50

3.2.3  Blob 51

3.2.4  RedBoot 51

3.2.5  ARMboot 51

3.2.6  DIY 51

3.3  基于S3C2410开发板的BootLoader实现 52

3.3.1  S3C2410开发板介绍 52

3.3.2  U-Boot分析与移植 53

3.4  基于S3C2410开发板自己编写

BootLoader 77

3.4.1  设计系统的启动流程 77

3.4.2  BootLoader的具体实现 78

3.5  本章小结 84

3.6  常见问题 85

第4章  嵌入式Linux内核移植 86

4.1  移植的基本概念 86

4.2  内核移植的准备 87

4.3  内核移植 88

4.3.1  内核配置 88

4.3.2  内核编译 97

4.3.3  内核下载 98

4.4  建立Linux根文件系统 98

4.4.1  根文件系统的基本介绍 99

4.4.2  建立根文件系统 102

4.5  本章小结 105

4.6  常见问题 106

第二部分  ARM Linux设备驱动程序开发

第5章  ARM Linux驱动程序开发入门 110

5.1  嵌入式Linux驱动程序介绍 110

5.1.1  驱动程序的作用 110

5.1.2  Linux设备驱动程序分类 111

5.2  最简单的内核模块举例 112

5.2.1  编写Hello World模块 113

5.2.2  编写Hello World模块的Makefile 114

5.2.3  加载和卸载Hello World模块 115

5.3  Linux驱动程序开发要点 116

5.3.1  内存与I/O端口 116

5.3.2  并发控制 120

5.3.3  阻塞与非阻塞 125

5.3.4  中断处理 126

5.3.5  内核调试 133

5.4  本章小结 137

5.5  常见问题 137

第6章  字符设备驱动程序 139

6.1  字符设备驱动介绍 139

6.1.1  字符设备驱动相关的重要结构 139

6.1.2  主、次设备号 145

6.2  字符设备驱动开发实例 148

6.2.1  四线电阻式触摸屏原理 148

6.2.2  S3C2410触摸屏工作原理 149

6.2.3  S3C2410的ADC和触摸屏接

口特殊寄存器 150

6.2.4  触摸屏驱动概要设计 154

6.2.5  触摸屏驱动程序分析 155

6.2.6  配置和编译驱动程序 164

6.2.7  测试触摸屏驱动程序 165

6.2.8  触摸屏的校准 166

6.3  本章小结 167

6.4  常见问题 167

第7章  块设备驱动程序 169

7.1  块设备驱动介绍 169

7.1.1  块设备驱动相关的重要结构 169

7.1.2  请求处理 174

7.2  块设备驱动开发实例 176

7.2.1  MMC/SD介绍 176

7.2.2  S3C2410提供的SDI接口 179

7.2.3  SDI相关的寄存器 180

7.2.4  MMC/SD驱动概要设计 184

7.2.5  MMC驱动程序分析 186

7.2.6  S3C2410 SDI接口驱动分析 192

7.2.7  配置和编译驱动程序 193

7.3  本章小结 194

7.4  常见问题 194

第8章  网络设备驱动程序 195

8.1  网络设备驱动介绍 195

8.1.1  网络设备驱动相关的重要结构 195

8.1.2  常见的网络术语 198

8.2  网络设备驱动开发实例 200

8.2.1  CS8900A介绍 200

8.2.2  CS8900A网卡驱动概要设计 202

8.2.3  CS8900A适配器驱动程序分析 204

8.3  本章小结 213

8.4  常见问题 214

第三部分  Qt GUI开发

第9章  Qt概述 216

9.1  Linux下的GUI介绍 216

9.1.1  Linux桌面GUI系统 216

9.1.2  嵌入式Linux下的GUI系统 220

9.2  Qt/X11介绍 221

9.2.1  Qt的历史和Qt/X11的由来 221

9.2.2  Qt/X11的版权问题 222

9.2.3  Qt/X11及Qt/Windows的系统

架构图对比 222

9.2.4  Qt的特性简介 222

9.3  Qtopia Core 介绍 223

9.3.1  Qtopia Core与Qt/Embedded 223

9.3.2  Qtopia Core的体系结构 224

9.4  本章小结 225

9.5  常见问题 225

第10章  Qt/X11初步 226

10.1  Qt/X11的安装 226

10.1.1  Qt/X11的下载及双重授权问题

的说明 226

10.1.2  Qt/X11的安装详解 227

10.2  Qt下的Hello World 229

10.3  温度转换的小例子 230

10.3.1  背景知识 230

10.3.2  Quit按钮 231

10.3.3  摄氏温度的显示 234

10.3.4  华氏温度的显示 237

10.3.5  华氏温度和摄氏温度之间

的转换 240

10.3.6  保存当前的数值 244

10.4  本章小结 249

10.5  常见问题 249

第11章  Qt核心技术 251

11.1  信号(Signals)和槽(Slots) 251

11.1.1  常见的GUI组件通信方式 251

11.1.2  Qt中的信号和槽(Signals and 

Slots) 254

11.1.3  自定义信号和槽的小例子 256

11.2  Qt对象模型 259

11.2.1  元对象系统 259

11.2.2  信号和槽机制的实现 266

11.2.3  元对象编译器moc 275

11.3  Qt的窗口系统 279

11.3.1  窗口部件之间的树型结构 279

11.3.2  窗口部件的布局管理 281

11.4  国际化 285

11.4.1  Qt国际化的基本步骤 285

11.4.2  动态改变语言的小例子 286

11.4.3  一些注意事项 291

11.5  本章小结 293

11.6  常见问题 293

第12章  Qtopia Core 294

12.1  Qtopia Core的安装 294

12.2  Frame Buffer和qvfb 295

12.2.1  Frame Buffer 296

12.2.2  编译qvfb 298

12.2.3  在qvfb上运行Qtopia Core

程序 298

12.3  移植Qt/X11程序到Qtopia Core中 299

12.4  轻量级的窗口系统 301

12.5  进程间通信 304

12.6  本章小结 307

12.7  常见问题 307

参考文献 309

VIII

VII

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个