分為如下幾步,可能會有些許細節漏掉,盡量完善
1. 首先編譯linux核心,得到image檔案,至於如何編譯,這類工作資料很多,不贅述。
從這裡可看出,此移植過程並未對linux作任何修改,專案的結果是讓linux作業系統執行在特定的嵌入式平台中。
得到的image檔案,就是作業系統了,需要載入記憶體中,但是目前,image中的平台中是不支援本硬體環境的,這個就需要寫對應平台的支援檔案了,這部分暫不表
我們知道,在作業系統之前,有個bios,這一篇就是寫乙個類似bios的功能。
2. 新建乙個資料夾bootloader/,新增的檔案有若干個,主要檔案有幾個:
~串列埠相關的檔案,就叫serial.c
這個就是除錯用的,要不怎麼和作業系統互動
~啟動檔案,就叫start.s
這個需要用彙編寫就。硬體平台的功能,就是從某一特定實體地址開始執行程式,那麼,這個啟動檔案就是要執行的**。
start.s的功能肯定是配置工作了,配置工作做好了,硬體才可以使用。
擷取其中一段**說下:
# start config ddrc.align 5,0x0
ldr r0, =0x01ee8000
mov r1, #0x0
str r1, [r0,#0x1b0]
這個配置ddr-ctl,設定的起始位址是0x01ee8000, 查手冊,配置工作就是設定其值
3. serial.c
當配置工作做好了之後,就需要編寫串列埠程式了
unsigned int readl(unsigned int addr)這個就實現了最簡單基本的功能,到特定實體地址去讀或寫,很簡單void writel(unsigned int lval, unsigned int addr)
那麼讀取串列埠資料就是:
void uart_putc(unsigned char c)輸出字元和字串void uart_puts(char *str)
s++;
}}
對應的還有其它類似功能的函式。
當我們除錯的時候,想列印乙個字元或資訊,我們就可以呼叫寫函式,然後讓其列印出來
當然,目前最高端的除錯就只能是這樣了
先到這裡...待續
Linux核心編譯,移植以及啟動流程
linux核心移植 uboot通過thekerne kernel entry 0,board id,tag addr 傳入引數給kernel.r1暫存器儲存borad id,r2儲存tag add kernel主要做的事情 1 根據uboot傳入的r1,判斷核心是否支援該淡淡,如果支援,呼叫機器相關...
u boot移植啟動流程詳細分析(2)
學習底層的東西,首要的就是去了解他的架構,整體的思路知道了,就會在出現問題的時候有很清晰的思路,知道 出的問題,以及程式是如何執行的,相信做到上面的,所遇到的問題,大都會迎刃而解了吧,高手是有很多的,所謂的高手,不過也就那樣吧,努力努力也是可以趕超的。之前,介紹了u boot的第一階段的啟動流程,那...
Linux核心移植之四 核心啟動過程
內容來自 韋東山 嵌入式linux應用開發完全手冊 與移植u boot的過程相似,在移植linux之前,先了解它的啟動過程。linux的啟動過程可以分為兩部分 架構 開發板相關的引導過程 後續的通用啟動過程。如圖16.7所示是arm架構處理器上linux核心vmlinux的啟動過程。之所以強調是vm...