嵌入式操作系统内核原理和开发(开篇)

上一篇 / 下一篇  2012-04-27 10:25:29 / 个人分类:开源软件

 操作系统是 很多人每天必须打交道的东西,因为在你打开电脑的一刹那,随着bios自检结束,你的windows系统已经开始运行了。如果问大家操作系统是什么?可能 有的人会说操作系统就是windows,就是那些可以放大、缩小、移动的窗口。对曾经是计算机专业的朋友来说,这个答案还要稍微复杂一些,操作系统可能还 有linux、unix、ios、sun solaris、aix等。如果再细化一点,对嵌入式工具比较解的朋友还会有新的补充,因为在他们看来,vxworks、eCos、ucos也都是操作系统,虽然它们好多系统连界面都没有。

io N(P#]1T.p |)r0   既然操作系统称之为一个系统,那么它必然是由好多的部件组成的。有过linux嵌入式开发经验的朋友都知道,要想使一个linux在arm芯片上真正跑 起来,它必须有三个部分组成,即boot + 内核 + 文件系统。而真正内核的东西其实很少,也就是cpu初始化、线程调度、内存分配、文件系统、网络协议栈、驱动这些部分组成。那么是不是所有的芯片都需要跑 操作系统呢?我们可以举个例子。

] O8j AR*R"C0

IxKUe({0  现在有一个简单的温度测量电路,它由三部分组成:

?Z7U)?_q#j051Testing软件测试网KZ;o!D+o

  1、单片机;51Testing软件测试网7c.](v@6wK_7?"m Gc*uk

51Testing软件测试网 heX@)Bd K

  2、温度传感器模块;51Testing软件测试网 iV*C*OHf}1K3C

*?nf8nb2s"? y0  3、无线发射模块。

7E PHm g3?.eM0

C%g9]?+P2h t0  我们设计这么一个温度测量电路其实就是一个目的,那就是为了实时获取当前的温度信息。那么,这么一个简单的电路应该怎么设计程序呢?其实很简单。

:Hd _i-A0

ql%W!O~ g ^0void sleep(int value)51Testing软件测试网Z/pe.~0Mm*xq
{
+i y0lNsRd vV R0    int outer;51Testing软件测试网:t'p%T!N.e:\
    int inner;
0T;t;{Rr8`9Bp0   
1wdWP d w0    for(; outer < value; outer++)51Testing软件测试网)UY.s#n6nW/mpL&T B8b
    {51Testing软件测试网)P#p.[+IRL&xd
        for(inner = 0; inner < 1000; inner++)
5?5G]+D2H\M0            ;
T;hiQ l0    }
'@ d d:Aw`L'U0}

IDt(Ft4F2_u&R0

%{c;[Ry4S0
@T?i#CD_r0void main()51Testing软件测试网D1~6oMqXz
{51Testing软件测试网9M0Vz&|Z S4}
    while(1)51Testing软件测试网]V1F[8c8Or`
    {
eC4I wK7k%|I0        /* read temperature from port*/51Testing软件测试网!R]L2`+C un
        sleep(1000);51Testing软件测试网E&cuyh4pJ
        /* send temperature to wireless module */51Testing软件测试网M? q\&G5F
        sleep(1000);51Testing软件测试网 l;f,~"Y|
    }
4X'HmJLg*NG O+x0}
51Testing软件测试网.Z@,D S)|{f:|8R

x }#fd7W+J Vf0  如果我们需要cpu干的事情很少,甚至极端一点说只有一件事情,那么根本没有设计操作系统的必要。我们设计出操作系统,主要是想在单位时间内完成几件事情。打个比方来说,你完全可以在工作的时候一遍写文档、一遍收发电子邮件,偶尔还能开个小差休息一会。 所以操作系统就是为了共享资源而存在的。

,O6Lv2s'VOWg7I051Testing软件测试网z2Rrv%f*vw _3|

   认识操作系统的用途不难,关键是如何把操作系统用代码写出来。也许有人会跟你说,免费的代码一大堆,Linux就不错,你下载下来直接读就好了。但是我 告诉你,最新的Linux内核版本已经轻松的越过了3.0,整个代码的长度远在千万行之上,你可能从哪看起都不知道。可能此时又有人不同意了,看不懂高版 本的linux,可以看看linux低版本的代码,0.11版本的代码就不错,因为赵炯就是怎么推荐的。我要说的是,0.11的代码固然好,但是怎么编译 版本、怎么修改代码、怎么构造文件系统、怎么跑起来是我们绕不过的一道难题。对于很多朋友来说,阅读linux代码尚且困难,更不要说后面还需要完成的一 大摊子烂事了。51Testing软件测试网 }cl-X'FcZ2i7A

;a+gTvPs"n0  说了这么多,我们需要的的内核代码是什么样的?其实在我看来,很简单。它只要满足下面两个条件就可以了,51Testing软件测试网!B$ZK"\)v

F3z)Ev,e'U0  (1)像用户软件一样可以运行;

6Kk&^:{)W `xok0

'~2si/@ P sP P)PX0  (2)像用户软件一样可以单步调试。

e1[oPo\1gD051Testing软件测试网vd_?#k%X|J

   要解决这些问题,对linux系统来说上不难解决。要解决os的运行和调试问题,关键就在于如何仿真中断和实现os的任务切换。至于任务的开启、运行和 挂起,内存分配,互斥量,信号量,文件系统,tcp/ip协议栈,GUI操作,这些其实都是可以在linux上进行仿真和操作的,朋友们可以尽请放心。这 部分的内容,我们会在以后的博客中陆续展开。51Testing软件测试网6rB1D6y"K+a^

#h)W)BiY7T3ZL@/kS/V$s0  为了能够更好地阅读后面发表的博文,我建议你巩固一下下面这些知识,这样会对你的理解有很大的裨益。51Testing软件测试网8NW7@8v"h^O(J

6kr};A;EGp0  (1)cpu 结构,了解中断流程就行;51Testing软件测试网`:{;eCggNB!NX

*])B X^,m!w Hd7B\C0  (2)linux 汇编语言;51Testing软件测试网)O0A;j6gG+~%Z

Ykjy+[Q,L9z1CP0  (3)函数堆栈格式和内容;51Testing软件测试网&nY9_T!_ K

51Testing软件测试网7@0W-uM1^ HA g

  (4)互斥量、信号量的使用方法;

H }Ozd}X sj0

y)gu"DE4V&zV|0  (5)调度的基本策略;

yL2W#gov0

P/H/]*OU4Ra@(u0  (6)内存分配的基本方法;51Testing软件测试网;d8}7g Bh$EZ

51Testing软件测试网)B,PA3@T@|&? A

  (7)tcp/ip socket编程;

e1iq WTWwv051Testing软件测试网 [}#c}1@0R

  (8)gui编程方法,可以参考windows的方法;51Testing软件测试网2x L ^Up o \ l^

&Y p0kVk.I)?0  (9)系统中的内存布局、编译原理等等。

.t p8f0a-K+v t3S$a3hA0

TAG:

 

评分:0

我来说两句

Open Toolbar