|
boot loader: 看名字就知道,這是在系統(tǒng)啟動(dòng)時(shí)使用的,最重要的功能就是加載操作系統(tǒng)。其它包括一些硬件的初始化,或者其它的一些自定義功能,例如OS升級(jí)什么的。
啟動(dòng)流程:
一般的arm/MIPS 架構(gòu)的CPU都有一個(gè)固定的地址,硬件上電后,CPU就去這個(gè)地址讀取第一條指令。
通常硬件上都會(huì)把這個(gè)地址連接在非易失存儲(chǔ)器(簡單的理解就是掉電不丟失,一般是FLASH)上。也就是說,這個(gè)階段的代碼都是運(yùn)行在FLASH上的,所以,這個(gè)FLASH必須是可以隨機(jī)訪問的。這些代碼通常都是匯編寫成的,初始化CPU,內(nèi)存等等硬件相關(guān)的一些指令。
內(nèi)存初始化完畢后,就可以將代碼拷貝到內(nèi)存里了。在內(nèi)存里運(yùn)行,就可以寫了,速度上也要快很多。
之后繼續(xù)其它設(shè)備的初始化,比如串口,網(wǎng)口什么的�,F(xiàn)在用不著的設(shè)備不做初始化,等OS起來以后再說。
再往后就準(zhǔn)備啟動(dòng)OS了。嵌入式設(shè)備為了節(jié)省FLASH的容量,通常OS都是壓縮過的,所以boot loader就必須將OS從FLASH上,解壓到內(nèi)存當(dāng)中去。然后跳轉(zhuǎn)到OS在內(nèi)存中的第一個(gè)函數(shù)中去。這個(gè)地址就是雙方約定好的了,因?yàn)閎oot loader并不關(guān)心OS到底是什么,它只管將CPU交給OS,它的使命就結(jié)束了。如果這個(gè)地址雙方不一致,那就徹底悲劇了……
設(shè)備驅(qū)動(dòng):
就是可以屏蔽硬件特性,讓操作系統(tǒng)中的應(yīng)用程序可以更好的操作硬件。比如現(xiàn)在有一塊屏,4*4個(gè)點(diǎn)陣,單色。沒有驅(qū)動(dòng)的時(shí)候,我只要告訴硬件,在(0,0),(0,1),(0,3),(0,4)這幾個(gè)點(diǎn)亮一下,就可以在屏幕最上方顯示一條線了。但是應(yīng)用程序不可能這樣去做啊,不可能每個(gè)字,每條線都用點(diǎn)陣去畫吧。所以,我就可以寫一個(gè)程序,將點(diǎn)亮4個(gè)點(diǎn)封裝成函數(shù),第一個(gè)參數(shù)作為變量,給操作系統(tǒng)。這樣應(yīng)用程序只需要調(diào)這個(gè)函數(shù),就可以在任意地方畫一條橫線了。字符顯示也是類似的。那什么還要有操作系統(tǒng)呢,不直接給應(yīng)用程序?因?yàn)閼?yīng)用程序不需要關(guān)心硬件,這塊屏可大可小,或者可顯示多種顏色。操作系統(tǒng)就是在中間作為標(biāo)準(zhǔn),抽象出一個(gè)顯示設(shè)備,底下是驅(qū)動(dòng)跟硬件配合,提供操作接口,上面是應(yīng)用程序去調(diào)用接口。
有想學(xué)嵌入式的可以加我Q大家一起談?wù)換:2539424095
|
|