前言

眨眼之间,在IT行业工作已经满6年了。在这6年当中,虽然经常更换工作内容,但一直局限于通信行业,且一直从事通信产品的开发、测试和维护工作,因此可以说,对嵌入式领域,尤其是通信行业,也算有一定的理解了。从感情上说,对于这个行业,笔者本人是由衷地热爱和引以为豪,尤其是这几年,国内通信产业发展迅速,至少在本行业内,已经达到了世界先进水平,每当看到在项目竞争中,国外的设备提供商纷纷落马,代表中国的本土企业获得用户认可的时候,心中的自豪更加明显,不但为企业,更为伟大的祖国取得的进步而自豪。

但有时候仔细回味一下,不禁又有一种失落和遗憾,几乎所有通信产品涉及的核心部件和核心技术,大都是国外厂家提供的,尤其是提供最核心功能的交换芯片、网络处理器以及提供设备底层管理的嵌入式操作系统。这样,设备制造商完成的工作实际与组装工差不多,仅仅是把这些核心的部件组装到印制板上,然后再在购买的操作系统上编写应用程序实现特定的设备功能。这种说法虽然有一定的片面性,但却不无道理。我个人是做软件的,对于硬件部件,平时只关注其编程接口,即只要知道这个部件可完成什么功能,如何填写其寄存器,如何组织内部表结构就可以了,对于其实现没有精力关注,因此究竟是实现难度太大,还是商业模式不允许商家去实现,从来不敢妄下断言。但对于软件,接触得相对较多,尤其是操作系统,窃以为不是太难实现的原因导致这种局面,而是商业代价、应用程序缺少等原因导致的。为了验证这种想法,便有了编写一个操作系统的念头,当时是2004年下半年,正处于一个项目的间歇期,有一些空余时间,便开始了这个实践。

当时的想法是购买一块开发印制板,然后在这个印制板上开发一个简单的嵌入式操作系统,把板子驱动起来,并在这个操作系统上实现一个简单的串口通信程序,能够与PC通过串口通信,任务就算完成了。后来在购买印制板的时候,由于质量原因,与卖板子的人吵了起来,一气之下,就放弃了买板子的念头。以前曾经在网上看到过一篇文章,总体的观点就是个人计算机就是一个很好的嵌入式开发环境。这个观点我一直是认同的,因此当时就想能否在个人计算机上开发这个操作系统呢?而且这样做开发出来的结果可以很容易地被不同的人试验,因为只要有一台PC就足够了。业界一些很流行的嵌入式操作系统都提供了个人计算机的模拟版本,这更坚定了我在PC上开发的想法。

后来证明,在PC上开发嵌入式操作系统是可行的,而且作为一个通用的硬件平台,PC比嵌入式印制板提供了更广泛的扩展性和硬件部件,这样开发的操作系统可以有机会接触到更多的硬件设备,比如监视器、鼠标、键盘等,而这些在印制板上往往是没有的。最初开发的时候,选择的编译环境是NASM和GCC,NASM完成汇编语言部分的编译和链接(主要是引导程序和初始化程序),GCC完成操作系统核心功能的编译链接。后来发现,GCC虽然功能强大,但特别不好用(可能是以前很少使用的缘故吧),界面不友好。于是改变了编译环境,采用Visual C++完成核心功能的编译链接,这主要是个人对VC比较熟悉,且VC提供了函数联想等贴近程序员的功能,使得代码编写起来非常方便。但VC产生的最终目标模块都是PE格式的,而在操作系统编写初期,还不具备模块加载等基础功能,因此无法直接处理PE文件,于是又写了一个工具软件,对编译后的二进制文件进行处理。就这样,NASM、VC和自行编写的一个处理软件构成了整个开发环境。虽然不专业,但很实用。

这个操作系统都是在业余时间开发的,而大多数时候工作都比较忙,因此进展缓慢。直到2006年年初,才把当初规划的所有功能开发完毕。这一年多的开发过程十分辛苦,由于缺乏资料、工作项目紧张等原因,曾几度想放弃,最终还是坚持了下来。在开发的过程中,为了确保质量,对每个功能模块都做了很详细的文档描述(类似LLD),然后再进行仔细的评估,先从逻辑上想清楚,再开始编写代码。这样进度虽然缓慢,但效果非常好,几乎每个模块都是一次成功的。这些描述文档经过梳理、补充,并添加了更详细的描述和示意图,就构成了本书。

开发这个操作系统的初衷是为了验证一下操作系统是否真的很难开发,以致于国人无法完成这项工作(或许在下孤陋寡闻,不知道国内有许多成功的操作系统,若如此,请各位读友见谅)。但试验结果是,虽然开发操作系统有一定的难度,但只要有所投入,不断坚持,不断积累,一定能够收到良好的效果。在下十分愚钝,工作中遇到的一些问题,聪明的同事很短时间就可找到解决方案,而在下却需要更长的时间。这样愚钝的情况下,尚且能够做出一个虽然简单,但五脏俱全的操作系统,何况国内如车载斗量之聪明人士乎!最初的时候,为这个试验项目起了一个代号,叫做“up16M”,因为最初设计时,这个操作系统的核心是驻留在32位地址空间的高16M地址处的。后来更改为“Hello China”,这个名称的用意之一,是对祖国在经济上取得的巨大成绩表示祝贺,另外一个用意是希望国内IT核心技术的发展能够同祖国的进步一样有所突破,真正走出中国,走向世界,让世界人民都说一声“Hello,China!”

出版这本书的目的,是希望能够与业界的同行朋友分享自己的开发经验,请业界朋友能够指点一下,提出批评建议,以让自己能够持续改进这个操作系统。作者水平有限,不论是在操作系统的设计当中,还是在本书的写作当中,定然存在一些不当之处,或错误理解之处,还请读者多多谅解,并能够以一种“治病救人”的态度指出这些不当之处,在下将十分感激。另外,在电子出版社郭立主任、孙学瑛老师的大力支持和帮助下,本书才能够得以出版,在此表示衷心的感谢,并对电子工业出版社表示感谢和致敬。在我的印象中,电子工业出版社出版的图书,总是十分专业、细致,很多专业方面的知识,就是从电子工业出版社出版的图书中获取的。

虽然本书的主要内容是对作者自行编写的一个操作系统实现细节的描述,但其中也涉及了大量的硬件知识,比如CPU、PCI总线、计算机外设等,对于CPU的介绍,除了Intel公司的32位CPU外,还对嵌入式领域广泛应用的Power PC的一些机制进行了描述。因此,本书的内容既包含作者的经验描述,也包括一些通用硬件、通用操作系统概念以及一些基本的嵌入式开发概念的叙述,可以适应多层次、多领域的读者。比如,嵌入式软件开发工程师可以从中了解到一些嵌入式开发和嵌入式操作系统的概念;应用软件工程师也可以通过了解硬件机制、操作系统实现原理,以对应用软件所在的操作系统进行更深入的理解,因为这些操作系统的概念都是相通的;大中专学生也可以通过实践的方式从本书中了解到很多操作系统核心概念,给操作系统和计算机原理的学习带来一定的帮助;而系统软件爱好者也可以通过阅读本书了解一个完整的实践过程。

再简单说明一下为什么把这个在PC上开发的操作系统定位为“嵌入式操作系统”。对于嵌入式操作系统,至今尚没有一个严格统一的定义来描述,但有一些共同的特点已经被业界认同,比如可裁减性、占用资源少、能够支持广泛的CPU、效率高等,在这些特点中,除了“支持广泛的CPU”这一点外,Hello China都应该符合这些特点(书中提供了一些测试数据和测试案例可做说明)。对于多CPU的支持,这个操作系统的核心功能都是采用C语言编写的,而且在编写的时候也充分考虑了不同CPU之间的移植、多CPU(SMP)的情况,因此可移植性应该不是问题。另外,个人认为,上述特性不能真正反映嵌入式操作系统的本质,嵌入式操作系统的本质应该是“跟应用一起链接”,即嵌入式操作系统跟嵌入式应用代码往往链接成同一个二进制模块,而不像通用操作系统那样,操作系统模块与应用程序完全分离。Hello China具备这个特性,即如果在Hello China的基础上开发应用程序,那么必须把应用程序的代码和Hello China的代码放在同一个工程中一起编译、链接。因此,作者把这个在PC上开发的操作系统定位为“嵌入式操作系统”,以后做进一步开发、完善的时候,也会遵循这个标准进行。

最后说明一下,销售本书所获得的稿费的一半,将捐献给西部贫困地区的失学儿童,为这些孩子能够享受到基础教育贡献微薄的力量。

作者

2006/08/04