新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于ARM的Linux系統移植研究與實現

        基于ARM的Linux系統移植研究與實現

        作者: 時間:2013-03-14 來源:網絡 收藏

        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

        a.JPG


        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處理器平臺上的移植。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 葵青区| 荆门市| 门源| 金塔县| 平乐县| 延安市| 新兴县| 侯马市| 儋州市| 凤庆县| 东兴市| 通州区| 虎林市| 昌乐县| 黔西县| 灌阳县| 江口县| 青神县| 洪江市| 乐清市| 分宜县| 西贡区| 象州县| 邯郸县| 竹溪县| 清徐县| 西林县| 社会| 丹江口市| 洮南市| 汕尾市| 漳浦县| 双柏县| 高尔夫| 凌海市| 肇州县| 东阳市| 常州市| 靖江市| 新密市| 伊春市|