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