"); //-->
差不多一年前的时候,我买了一本《自己动手写操作系统》的书,由此萌发了对写操作系统的兴趣。记得当时好几天没日没夜的面对着X86的虚拟机,GCC, Makefile,虽然很累,但依然干劲十足。那本书,我大致看到了将内核从软盘加载到内存中运行的章节,当时也确实成功的实现了将GCC生成的32位elf文件加载到内存中并在保护模式下运行。到这时,中止了。主要是因为当时的基础知识有限,虽然学过8086的汇编语言和微机原理,但面对保护模式中的分段与分页机制,实在是晕头转向,搞不懂保护模式的工作机制。以至于当时的主要精力本应在写代码上,却被迫转移到硬件的问题上。而当时我对硬件的了解仅限于从那薄薄的微机原理课本上所学的。
后来,在兴趣的推动下,自己买了本操作系统的书来看,虽然太抽像,最终还是慢慢的啃了一大半。到下学期的时候,重新拿起了单片机的教材,到电子市场买回了单片机,电阻,按键这类的一大包元件,在keil 上写代码,从汇编开始,逐渐过渡到C。慢慢的,由对单片机的熟悉,大致理解了在微机原理课程所学的东西。再后来,买了块S3C44BOX(ARM7)的板子,了解到有ucos这种简约的操作系统。于是从图书馆借来书,反复的看其源代码,并在博客上写了此源代码分析的文章。由此,才开始了解操作系统的实现机理。
时至今日,终于觉得自己有能力写一个简单的嵌入式操作系统。为了完成一年前的那个梦想,准备重新开始,自行设计一个。然而由于水平有限,最终的成果显然不及ucos这类的系统。对我而言,问题的重点并不太于设计的“优秀”,而在于“能够”设计。或者,称“设计”为“实现”吧。
我无意实现时在所谓的性能与效率上计较。首先打算将整个系统的大致框架实现出来,实现一个可以运行的“原型”。这样先简化问题。至于后续是否会对其进一步优化,则要视当时的个人水平与需要来定。
实现的过程中主要参考ucos。这也只看过ucos全部的源码。所以系统的大致实现会跟ucos很像。有人会认为,这样做纯粹是将ucos变相的再实现一次,没有“创新”!呵,这有什么关系呢?为什么一定要有创新?即使必要,对我这样一个对操作系统才算刚有点了解的人来说,可以在哪方面做出些创新?对ucos实现的"模仿",以进一步理解操作系统实现中的一些问题,这才是我要达到的目的!毕竟自己不是在实现一个商业化的操作系统。
凭着这点兴趣和梦想,就这样开始了!
我打算让这个系统首先在ATMEGA32芯片上跑,而不是X86。首要的一点是因为对这块芯片比较熟悉,而且有详细的资料可参考,芯片本身也比较简单。如果在X86上跑,还得去配置相应的工具,至少要配置个虚拟机,还要读写软驱这些东西。以前没找到详细的资料,现在也懒得去找。手上有一块ATMEGA32的核心板和一些外围器件,软件也是现成的,所以为简单起见如此选择。当然有可能的话,还是会类似于ucos那样,将其置于xp的虚拟DOS下跑。不打算支持保护模式了。既然是嵌入式的OS,那些功能显然有点多余;而且这种机制复杂,需要先将问题简化,这样才利于实现,而且我懒得去花时间再去看保护模式相关的资料。
由于借鉴ucos 的实现机制,尽量提高可移植性。因为所实现用C实现的代码多与实际硬件无关,仅有少量的汇编涉及硬件部分。
至于代码的质量,我得承认:就目前的水平来说,代码会写的比较差。以前也从未写过比较多的代码。C语言的基础还可以,数据结构方面对链表,队列以及栈这些熟悉些,嵌入式方面也就知道点皮毛。接下来的文章会写对每个阶段的实现做一总结,会谈及数据结构、主要源代码的分析,以及单片机方面的东西,其中会包含一些硬件原理图。接下的文章,eos即代表要实现的系统.
所使用的工具:
软件:winavr2006 GCC编译器等
AVR studio 4.13 IDE环境与汇编支持
Protues 7.1Sp2 AVR单片机仿真环境,提供OS应用的测试
硬件:Atmega32核心板 及包含若干LED,键盘等电路板。
主要的测试在proteus上进行.特别要注意软件的版本一致。若不一致,可能会出现一些意外的问题。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。