探討有關(guān)嵌入式操作系統(tǒng)內(nèi)核原理與開發(fā)的研究
操作系統(tǒng)是很多人每天必須打交道的東西,因為在你打開電腦的一剎那,隨著自檢結(jié)束,你的windows系統(tǒng)已經(jīng)開始運行了。如果問大家操作系統(tǒng)是什么?可能有的人會說操作系統(tǒng)就是windows,就是那些可以放大、縮小、移動的窗口。
對曾經(jīng)是計算機專業(yè)的朋友來說,這個答案還要稍微復(fù)雜一些,操作系統(tǒng)可能還有、、ios、sun solaris、aix等。如果再細(xì)化一點,對嵌入式工具比較解的朋友還會有新的補充,因為在他們看來,vxworks、、ucos也都是操作系統(tǒng),雖然它們好多系統(tǒng)連界面都沒有。
既然操作系統(tǒng)稱之為一個系統(tǒng),那么它必然是由好多的部件組成的。有過嵌入式開發(fā)經(jīng)驗的朋友都知道,要想使一個在arm芯片上真正跑起來,它必須有三個部分組成,即boot + 內(nèi)核 + 文件系統(tǒng)。而真正內(nèi)核的東西其實很少,也就是cpu初始化、線程調(diào)度、內(nèi)存分配、文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧、驅(qū)動這些部分組成。那么是不是所有的芯片都需要跑操作系統(tǒng)呢?我們可以舉個例子。
現(xiàn)在有一個簡單的溫度測量電路,它由三部分組成:1、;2、溫度模塊;3、模塊。
我們設(shè)計這么一個溫度測量電路其實就是一個目的,那就是為了實時獲取當(dāng)前的溫度信息。那么,這么一個簡單的電路應(yīng)該怎么設(shè)計程序呢?其實很簡單。
[cpp] plaincopy void sleep(int )
{ int outer;int inner;
for(; outer < ; outer++)
{ for(inner = 0; inner < 1000; inner++)
;}
void main()
{ while(1)
{ /* temperature */ sleep(1000);/* send temperature to wireless */ sleep(1000);}
如果我們需要cpu干的事情很少,甚至極端一點說只有一件事情,那么根本沒有設(shè)計操作系統(tǒng)的必要。我們設(shè)計出操作系統(tǒng),主要是想在單位時間內(nèi)完成幾件事情。打個比方來說,你完全可以在工作的時候一遍寫文檔、一遍收發(fā)電子郵件,偶爾還能開個小差休息一會。 所以操作系統(tǒng)就是為了共享資源而存在的。
認(rèn)識操作系統(tǒng)的用途不難,關(guān)鍵是如何把操作系統(tǒng)用代碼寫出來。也許有人會跟你說,免費的代碼一大堆,就不錯,你下載下來直接讀就好了。但是我告訴你,最新的內(nèi)核版本已經(jīng)輕松的越過了3.0,整個代碼的長度遠(yuǎn)在千萬行之上,你可能從哪看起都不知道。
可能此時又有人不同意了,看不懂高版本的linux,可以看看linux低版本的代碼,0.11版本的代碼就不錯,因為趙炯就是怎么推薦的。我要說的是,0.11的代碼固然好,但是怎么編譯版本、怎么修改代碼、怎么構(gòu)造文件系統(tǒng)、怎么跑起來是我們繞不過的一道難題。對于很多朋友來說,閱讀linux代碼尚且困難,更不要說后面還需要完成的一大攤子爛事了。
說了這么多,我們需要的的內(nèi)核代碼是什么樣的?其實在我看來,很簡單。它只要滿足下面兩個條件就可以了,(1)像用戶軟件一樣可以運行;
(2)像用戶軟件一樣可以單步調(diào)試。
要解決這些問題,對linux系統(tǒng)來說上不難解決。要解決os的運行和調(diào)試問題,關(guān)鍵就在于如何仿真中斷和實現(xiàn)os的任務(wù)切換。至于任務(wù)的開啟、運行和掛起,內(nèi)存分配,互斥量,信號量,文件系統(tǒng),tcp/ip協(xié)議棧,GUI操作,這些其實都是可以在linux上進行仿真和操作的,朋友們可以盡請放心。這部分的內(nèi)容,我們會在以后的博客中陸續(xù)展開。
為了能夠更好地閱讀后面發(fā)表的博文,我建議你鞏固一下下面這些知識,這樣會對你的理解有很大的裨益。
(1)cpu 結(jié)構(gòu),了解中斷流程就行;
(2)linux 匯編語言;
(3)函數(shù)堆棧格式和內(nèi)容;
(4)互斥量、信號量的使用方法;
(5)調(diào)度的基本策略;
(6)內(nèi)存分配的基本方法;
(7)tcp/ip 編程;
(8)gui編程方法,可以參考windows的方法;
(9)系統(tǒng)中的內(nèi)存布局、編譯原理等等。