本书先介绍嵌入式系统的一般特点,同时将嵌入式系统与通用系统加以对比;然后进一步采用比较研究的方法,深人地剖析、比较了两个结构很不相同、复杂程度相差甚远、而又都被成功地用于嵌入式系统的操作系统内核,即uC/OS和Lunux。通过对堪称最小的微内核uC/OS和几乎无所不包的一体化(宏)内核Linux的对比研究,系统地论述了嵌入式系统设计和实现过程中所面对的问题、难点及其解决办法,同时也印证了本书对嵌入式操作系统与通用操作系统异同所作的对比、归纳而得出的结论。
本书可供大学有关专业的高年级学生和研究生用作教材或参考读物,也可供从事嵌入式系统开发、研究的人员用作参考和进修资料。
第1章 嵌入式系统的硬件成分
§1. 1 嵌入式系统
§1. 2 CISC系统结构与RISC系统结构
§1. 3 微处理器与微控制器
§1. 4 嵌入式系统的组成
§1. 5 边界扫描测试技术JTAG
第2章 嵌入式系统的软件成分
§2. 1 嵌入式操作系统
§2. 2 实时操作系统
§2. 3 微内核与一体化内核
§2. 4 常用的商品嵌入式操作系统
§2. 5 一些公开源码的嵌入式操作系统
§2. 6 嵌入式操作系统的量身定制
第3章 ARM. StrongARM. XScsle系统结构
§3. 1 ARM系统结构简史
§3. 2 ARM核的系统结构
§3. 3 第一个StrongARM芯片SA-110
§3. 4 片上系统SA-1110
§3. 5 配套芯片SA-1111
§3. 6 几种典型的StrongARM系统
§3. 7 Intel的XScale系统结构
第4章 微内核uC/OS-II与硬件抽象层uHAL
§4. 1 概述
§4. 2 uC/OS测试台的构筑
§4. 3 ARM处理器上的uC/OS
§4. 4 uC/OS代码中的临界区
§4. 5 uC/OS的进程管理与调度
§4. 6 uC/OS的进程间通信
§4. 7 扩充的uC/OS-Ⅱ进程间通信机制
§4. 8 uC/OS的系统调用
§4. 9 uC/OS的中断处理
§4. 10 uC/OS-II的设备驱动
§4. 11 留给读者的思考
第5章LinuX用于嵌入式系统
§5. 1 Linux的各种"修补版"
§5. 2 Arm-Linux的内存管理
§5. 3 高速缓存的锁定
§5. 4 Arm-linux的进程管理与调度
§5. 5 Arm-Linux的中断响应和处理
§5. 6 Arm-linux的系统调用
§5. 7 Linux内核的可剥夺进程调度
§5. 8 Linux内核的优先级倒转问题及其解决
第6章 linux对若干常用设备的驱动
§6. 1 概述
§6. 2 Ramdisk
§6. 3 闪存
§6. 4 "看门狗"与重启动
§6. 5 LCD显示屏
§6. 6 触摸输入屏
§6. 7 DMA
§6. 8 FPGA映像的装入
§6. 9 StrongARM的电源管理
第7章 嵌入式系统的引导与装入
§7. 1 关于引导/装入程序
§7. 2 一个基本的引导/装入程序--Blob
§7. 3 uC/OS的引导与初始化
§7. 4 通过JTAG接口写入引导/装入程序
§7. 5 更复杂的引导/装入程序
第8章 嵌入式软件的开发与调试
§8. 1 概述
§8. 2 嵌入式软件的调试
§8. 3 调试监控程序Angel
近来有一本书在中国的汀业界广为流传, 这就是毛德操和胡希明先生所著的《Linux内核源代码情景分析》(上. 下册), 它在短短的时间里印刷了四次, 可见其受欢迎的程度.
这一方面表明Linux在中国已日益受到重视, 另一方面也表明该书写得很好, 尤其是它采取了独特的情景分析方法, 使读者对整个过程有比较完整. 比较全面的了解, 从而可以把各方面的知识有机地融会贯通. 加深理解. 当时, 我在为它写的序言中曾经奢望“有更多像本书那样的优秀著作问世”, 今天, 令人高兴的是, 毛先生等不辞辛劳, 又为读者奉献了一本新书——《嵌入式系统——采用公开源代码和StrongARM/XScale处理器》.
嵌入式系统是计算机系统的一个分支, 既“古老”又“年轻”. 说它古老, 那是因为计算机发明伊始就在许多领域得到应用, 那时就已经出现了后来所谓的嵌入式系统了. 计算机用于某些实时控制或过程控制就是例子. 说它年轻, 则是说它在近年来蓬勃发展, 如日中天. 随着移动通讯. 手持电脑. 数字家电等等的发展以及IT技术在工业. 交通. 军事等领域里的渗透, 嵌入式系统已经成为IT行业的热门.
一个嵌入式系统综合了多方面的技术, 这对于从事这一领域工作的人提出了很高的要求. 现在做这方面工作的人, 有的来自软件领域, 虽熟悉通用操作系统, 但对嵌入式操作系统, 特别是实时操作系统缺少深入的了解, 对嵌入式系统开发所必需的硬件知识也很匮乏, 有的人来自硬件领域, 虽有较深的硬件背景, 但对操作系统缺乏了解, 也有的人来自控制或其他应用领域, 对嵌入式系统的软件和硬件都缺乏系统和深入的了解. 所有这些人都希望能有一本关于嵌入式系统的好书, 来帮助他们解决工作中遇到的各种问题. 而现存的资料却往往只针对某一具体的. 商品化的嵌入式系统, 多为介绍性的或使用手册之类, 很少有对嵌入式系统从原理. 技术到实际设计作全面. 系统. 深入的论述. 正因为如此, 本书的出版显得十分必要和及时.
在本书中, 作者除了继续采用情景分析方法以外, 还进一步采用了比较研究的方法.
全书自成体系, 深浅适度, 论述有据, 令人信服, 给人以全新的感觉.
总之, 我对本书的评价和对他们的前一本书一样, 认为本书的内容在深度和广度两方面都是罕见的, 相信读者看了以后也会得出同样的结论.
中国工程院 院 士
中国科学院计算所研究员
许多年以前, 我们也曾人云亦云地说着“实时系统”, 后来又是“嵌入式系统”(这个词出现得晚一些), 可是那时我们并不真正知道这些词的含义. 我们找资料, 找书, 可是却无奈地发现:似乎没有能使我们 “一站式”地搞通个大概. 而又理论联系实际的著作. 现在, 经过多年的努力与实践, 我们终于“觉今是而昨非”, 自以为对嵌入式系统有了较多的了解和较深的理解, 可是却发现在这方面的好书仍旧不多. 于是, 我们就想把自己的理解和体会写出来, 为正在从事嵌入式系统开发的同行以及有意于此的后学者提供一点参考. 这就是作者撰写此书的初衷.
要说清楚嵌入式系统, 特别是嵌入式操作系统, 光用一个特定的系统作为实例是不够的. “有比较才能有鉴别”, 所以我们在本书中采用了比较研究的方法. 我们剖析. 比较uC/OS和Linux两个操作系统内核. 前者可以说是最小的微内核, 后者则是几乎无所不包的一体化(宏)内核. 这是两个结构很不相同. 各自起着标杆性作用的操作系统内核, 然而又都成功地用于嵌入式系统. 通过对比研究, 一方面归纳. 总结出嵌入式系统设计和实现过程中所必须面对的问题. 难点及其解决办法, 同时也归纳. 总结出嵌入式操作系统与通用操作系统的共同点和(特别是)不同点.
虽然名曰“嵌入式系统”, 本书的重点则放在软件, 特别是放在操作系统上(读者看一下目录中所列的章节就清楚了). 之所以如此, 是因为就工作量而言, 嵌入式系统开发的重点在于软件, 而其中操作系统内核又往往是难度最大的部分. 但是, 与通用操作系统相比, 嵌入式操作系统与硬件的关系更为密切, 因而必须结合相关的硬件平台. 考虑到嵌入式系统主流的最新发展趋势, 书中我们以StrongARM及其系统结构为硬件平台, 与此相关的硬件知识则以最低必要为度. 至于更为详细的知识, 则只能请读者自行参阅相关的技术资料或产品使用说明.
总的来说, 我们先以两章的篇幅对嵌入式(计算机)系统的硬件和软件两个方面作一综述性的介绍, 重点在于说明嵌入式系统与通用计算机系统的不同之处, 某种程度上也是对二者的比较研究. 然后, 第3章简要地介绍了ARM系统结构以及采用ARM核的StrongARM/XScale芯片系列, 这是后面阅读有关代码. 特别是汇编代码所必须的. 在这三章的基础上, 第4章着重介绍和分析gC/OS的代码. 而第5章则着重介绍将Linux内核用于(基于StrongARM的)嵌入式系统时所特有的问题. 如上所述, 这两章是本书的核心. 第6章进一步介绍了一些将Linux内核用于嵌入式系统时常用的设备驱动, 读者可以把这一章的内容用作开发嵌入式系统的参考资料. 最后,
第7章和第8章着眼于嵌入式系统的开发与调试. 我们的目的不在于告诉读者怎样开发和调试, 面是想要让读者理解他们可能已经在用或者从其他资料上学到的一些手段是怎样实现的, 以知其然并且知其所以然. 本书可以供大学有关专业的高年级学生或研究生用作教材或参考读物, 也可以供从事嵌入式系统开发的工程师用作参考资料.
在写作过程中, 我们考虑到了非计算机专业出身的读者. 甚至初学者的需要. 事实上, 有不少从非计算机专业乃至文科出身的人转入软件行业, 成为了优秀的软件工程师并作出了突出的贡献, 此种事例实非少见. 应该说, 转入软件行业比转入其他行业要容易一些, 因为软件技术的基础是逻辑, 而人们在日常生活中时时在运用逻辑, 因而最容易“无师自通”. 但是, 许多背景知识和概念. 术语是他们必须了解的. 为了照顾到这一部分读者的需要, 书中对一些(我们自认为必要的)基本概念和术语作了一些铺垫和介绍. 可是, 这么一来, 很大一部分基础较好. 程度较高的读者(应该是本书读者群的主体)就可能感到有些多余或者哕嗦. 对此, 我们只好请这一部分读者多付出一点耐心, 自己加以去粗存精.
另外, 书中有些材料的取舍, 也曾让作者感到为难. 说得少了怕读者说我们语焉不详, 甚至故意卖关子, 说得多了又怕说我们拼凑篇幅, 着意谋杀读者银子. 事实上, 书中有好几节原来已经写好却又撤了下来, 反复考虑又加了回去. 好在估计此书出版发行时定价可能还抵不上一条领带或一件衬衣的价钱吧. 不过, 就像《Linux内核源代码情景分析》中一样, 我们在本书中也基本上没有涉及计算机网络方面的内容. 原因是网络这话题实在太大了, 一旦“落网”就轻易脱不出来, 这是个一定要有大部头的专著才能对付的话题. 再说, 网络方面的内容跟系统之是否是嵌入式也关系不大.
最使我们惶恐的还是书中一定还会有的错误. 在《Linux内核源代码情景分析》一书的前言中, 我们就曾说过:“就像软件免不了有错一样, 对软件的理解和诠释也一定会有错误, 人们能做的只是尽量减少错误. 我们可以负责地说, 本书付印前在文字中已经没有我们知道而没有改正的错误, 更没有故意误导读者的内容. 但是, 我们深知错误一定是有的, 我们欢迎讨论, 欢迎批评. ”果然, 该书出版后不久, 就有位热心的读者向我们指出了一处错误, 后来我们自己又发现了几处. 对于本书, 我们又一次面临同样的困境, 知道一定有错, 又不知道错在哪里. 如果再拖上一年半载, 再读上三遍五遍, 想必还能再找出一些错误并加以改正. 但是, 什么时候才能肯定地说不再有错呢?只好先付印再说了. 以后, 我们也许会借浙江大学出版社网站为本书, 也为《Linux内核源代码情景分析》一书设一个勘误专栏. 希望读者能说我们是严肃. 认真的作者. 如此足矣, 夫复何
求!
在美国生活了十几年后, 本书的第一作者终于难抑乡愁回到了故国, 目前任职于浙江大学网新科技股份有限公司. 本书的第二作者则还在杭州恒生电子股份有限公司供职. 在本书的写作过程中我们分别得到了两个公司的领导和同事的支持和鼓励, 特此表示感谢.
还有, 在本书的写作过程中, 电子工业出版社曾经给予很多的关注和鼓励. 作为作者, 我们感谢电子工业出版社的关心和好意.
特别地, 倪光南院士为《Linux内核源代码情景分析》一书的第四次印刷写了代序, 又为本书写序. 这使我们很受鼓舞, 特在此表示谢意.