基于ARM的Linux系統移植研究與實現
2.3 引導程序移植bootloader
引導程序bootloader是與體系結構緊密相關的部分,是操作系統內核和應用程序運行之前運行的一小段程序,用于完成系統的啟動和加載。它類似于PC機中的BIOS程序。bootloade嚴重依賴于硬件實現,一般在嵌入式系統中建立一個通用的bootloader是不可能的。用戶必須自己編寫這一小段程序,從而完成硬件設備的初始化,建立內存空間的映射圖,將系統的軟硬件帶到一個合適的狀態,為操作系統內核的運行做準備。
通常bootloader移植分為兩步:
第一步常用匯編語言實現依賴于CPU體系結構的代碼。主要包括硬件設備初始化;為加載bootloader準備RAM空間;拷貝bootloader到RAM空間中;設置好堆棧。
第二步常用C語言來實現。即:初始化本階段要使用到的硬件設備;檢測系統內存映射(memory map);將kernel映像和根文件系統映像從flash上讀到ram空間中;為內核設置啟動參數;調用內核。圖1所示是bootloader的工作流程圖。本文引用地址:http://www.104case.com/article/148080.htm
2.4 內核移植
內核移植首先應當啟動操作系統,完成內存管理、任務調度、進程管理、加載驅動程序、網絡等功能,然后執行應用程序或等待用戶命令。雖然各功能之間存在復雜的調度關系,但由于Linux分層結構的特點,已將其中硬件相關的代碼獨立了出來,因此,移植過程中只需要改動進程管理、內存管理和設備管理中與硬件相關的那部分代碼。
一般情況下,從官方網站上下載的內核不能直接在硬件平臺上運行,而要跟據具體的硬件平臺重新裁剪、編譯內核,并根據硬件平臺特性編寫相應的硬件相關的代碼,將Linux移植到硬件平臺。對內核代碼的修改包括以下部分:
(1)修改內核目錄樹根下的Makefile,找到ARCH和CROSS_COMPILE,修改ARCH=arm,CROSS_COMPILE=armlinux,然后設置PATH環境變量,在文件bashrc中添加expor PATH=/usr/local/arm/3.4.4/bin:$PATH,使其可以找到交叉編譯工具鏈,然后重新登陸。
(2)設置flash分區,修改arch/arm/machSBC2410/devs.c用以指明分區信息,該文件的內容建立nand flash分區表;修改arch/arm /machSBC2410/machsmdk2410.c文件指定啟動時初始化,并在kernel啟動時依據對分區的設置進行初始配置。在Linux源文件目錄下,執行makemenuconfig命令,配置內核產生config文件,選擇處理器類型為SBC2410,選擇串口驅動設備,完成后保存config文件。
在完成內核的裁減之后,執行命令make clean,編譯內核之前先把環境給清理干凈,也可以用makerealclean或makemrproper來徹底清除相關依賴,保證沒有不正確的文件存在,最后將zimage下載到開發板。
3 結語
經過移植,Uboot和Linux在SBC2410平臺就能運行,在此基礎上,還可以進一步開發各類驅動程序及應用軟件。用串口線將SBC2410和PC機相連,通過超級終端可以看到移植成功。系統成功啟動后,就可以進入根文件系統。本文通過分析Linux的特點和移植方法,總結出了一種基于ARM的Linux系統移植的方法,并實現了Linux系統內核在SBC2410處理器平臺上的移植。
評論