Linux移植 2 啟動檔案

2022-08-09 17:06:11 字數 1155 閱讀 5020

分為如下幾步,可能會有些許細節漏掉,盡量完善

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...