新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于ARM的嵌入式BootLoader設計與啟動過程

        基于ARM的嵌入式BootLoader設計與啟動過程

        作者: 時間:2012-05-21 來源:網絡 收藏

        3.5 呼叫主程序

        當系統初始化完成后,就要轉入主程序,可由跳轉指令來完成。這部分代碼為C程序,主要負責內核拷貝、 Ramdisk文件系統加載、設置啟動參數和串口通信等功能.程序最終完成內核壓縮文件和Ramdisk到RAM的拷貝,后跳轉到RAM中Linux Kernel的首地址,并交出控制權,到此Bootloader的任務完成。其中在RAM中的空間分配為0x0c000000

        -0x0c008000(內核調度用),0x0c008000-0x0c300000(uCLinux Kernel),0x0c300000

        -0x0c800000(uCLinux Ramdisk)。以下程序為uCLinux內核和Ramdisk文件系統拷貝過程,FLASH_UC_KERNEL,FLASH_UC_RAMDISK分別為內核和文件系統在Flash的起始地址,RAM_UC

        _ZIMAGE,RAM_UC_RAMDISK分別為RAM中uCLinux內核和文件系統的起始地址,FLASH_LEN_UC_

        KERNEL,FLASH_LEN_UC_RAMDISK分別為兩者大小,拷貝完后,PC指針指向RAM_UC_ZIMAGE。程序主要部分如下:

        /* Copy uClinux Kernel */

        pSource = (unsigned int *)FLASH_UC_KERNEL;

        pDest = (unsigned int *)RAM_UC_ZIMAGE;

        for (loopcnt = 0;loopcnt (FLASH_LEN_UC_KERNEL>>2);loopcnt++)

        { *pDest++ = *pSource ++; }

        /* Copy ramdisk */

        pSource = (unsigned int *)FLASH_UC_RAMDISK;

        pDest = (unsigned int *)RAM_UC_RAMDISK;

        for (loopcnt = 0;loopcnt (FLASH_LEN_UC_RAMDISK>>2); loopcnt++)

        { *pDest++ = *pSource ++; }

        /* Start Kernel */

        fp = (UClinux_Entry)RAM_UC_ZIMAGE;

        (*fp)(0);

        4 uCLinux操作系統啟動過程

        本系統采用RAM中啟動方式,將Flash中的內核先拷貝到RAM的某一段地址區間,再從該區間的首地址運行 uCLinux內核。當Bootloader完成系統初始化和拷貝完內核和Ramdisk以后,交出控制權,系統開始從RAM中執行uCLinux內核的引導程序Head.s,并將控制權交給它。在uCLinux中,Head.s在uCLinux-dist/linux-2.4.x/arch /armnommu/boot/compressed/head.s

        里。Head.s非常關鍵,它完成了加載內核的大部分工作,主要是調用Misc.c中的解壓內核函數 (decompress_kernel)來完成,另外內核的加載還必須知道系統必要的硬件信息,該硬件信息在hardware.h中并被Head.s所引用。最后跳轉到調用內核函數(call_kernel),將控制權交給解壓后的uCLinux系統[4]。系統啟動后將加載Ramdisk文件系統,進入用戶shell程序。
        5 結束語

        本系統采用Bootloader完成操作系統內核和文件系統拷貝到RAM的設計方法,提高了系統的實時性。目前,啟動代碼已經正常引導uCLinux操作系統,并實現了對輪式移動機器人驅動系統的控制,該嵌入式系統運行穩定,完全實現了設計目的。由于所選處理器的關系,本文的Bootloader是不支持Remap芯片的,但啟動裝載程序的原理都一樣,只要稍作修改就可用于支持Remap和MMU的芯片,而且對于其他操作系統同樣適用。

        參考文獻

        1 嚴國清,熊建設.中BootLoader的實現.[J].數據采集與嵌入式系統.2004,(6):40-43

        2 姜京梅,郭樹旭.ARM7啟動代碼設計方法與流程.[J].微計算機信息,2004,(20):78-79

        3 費浙平.基于ARM的嵌入式系統開發—系統的初始化過程.[J].單片機與嵌入式系統應用,2003.9,80-83

        4 黃克彬,葉梧,馮穗力.基于ARM+uCLinux嵌入式系統啟動引導的實現.[J].電子技術應用. http://

        www.cvtech.com.cn/tech_detail.asp?newsid=223


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 开封县| 昂仁县| 文登市| 通渭县| 岚皋县| 黎平县| 鸡西市| 谢通门县| 财经| 青州市| 中超| 印江| 呼伦贝尔市| 金川县| 裕民县| 尖扎县| 中超| 富宁县| 马公市| 皮山县| 仪陇县| 扶风县| 兖州市| 苍梧县| 福清市| 甘南县| 永德县| 广水市| 静乐县| 普格县| 涿鹿县| 通江县| 忻州市| 临澧县| 阿勒泰市| 许昌县| 大厂| 台中市| 运城市| 交口县| 辉县市|