達(dá)芬奇數(shù)字媒體片上系統(tǒng)的架構(gòu)和Linux啟動過程
完成以上步驟之后,U-boot準(zhǔn)備引導(dǎo)ARM Linux。
(1)配置系統(tǒng)的內(nèi)存(通過ATAG_ MEM塊和mem=)NAND Flash和DDR2。
(2)通過TFTP加載等加載方式,加載內(nèi)核到指定的存儲地址。
(3)如果定義過,加載RAM Disk。
(4)初始化傳遞到內(nèi)核的引導(dǎo)參數(shù)(EMAC地址,串口,控制臺,視頻格式等)
(5)獲得ARM Linux機(jī)類型值(DVEVM為#901)。
(6)設(shè)置kernel tagged list。
(7)用初始值設(shè)置ARM的寄存器。
(8)調(diào)用內(nèi)核。
> Linux 初始化步驟
(1)Linux內(nèi)核需要從引導(dǎo)加載程序(U-boot)中得到以下參數(shù)。
* 已經(jīng)初始化的memory系統(tǒng)。
* R0=0;R1為ARM Linux機(jī)類型值。
* R2指向ATAG結(jié)構(gòu)體的內(nèi)容:①物理memory區(qū);②是否使用RAM DISK及其壓縮版的地址;③視頻驅(qū)動程序具體的初始化參數(shù);④內(nèi)核命令行;⑤其他參數(shù)(串口和版本號)。
更多關(guān)于Linux內(nèi)核引導(dǎo)參數(shù)的信息可以參考Linux/Documentation/kernel-parameters.txt。如果要想傳遞給內(nèi)核更多的參數(shù),再u-boot中的bootargs中設(shè)置就可以了。
(2)對于壓縮的內(nèi)核(aka uImage),Linux 最初啟動Linux/arch/kernel/head.s。
(3)start_kernel()運(yùn)行。位于Linux/init/main.c。
(4)Linux的第一個進(jìn)程init()運(yùn)行。
總結(jié)
經(jīng)過上面介紹,很多DSP工程師可能會對達(dá)芬奇DMSoC及Linux啟動流程有一個感性的認(rèn)識,雙核架構(gòu)的達(dá)芬奇DMSoC帶給我們的是一加一大于二的性價比,要想了解更多的細(xì)節(jié),請參考數(shù)據(jù)手冊和應(yīng)用文檔。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
評論