<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)RM的嵌入式BootLoader設計與啟動(dòng)過(guò)程

基于A(yíng)RM的嵌入式BootLoader設計與啟動(dòng)過(guò)程

作者: 時(shí)間:2012-05-21 來(lái)源:網(wǎng)絡(luò ) 收藏

3.5 呼叫主程序

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

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

-0x0c800000(uCLinux Ramdisk)。以下程序為uCLinux內核和Ramdisk文件系統拷貝過(guò)程,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操作系統啟動(dòng)過(guò)程

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

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

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

參考文獻

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

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

3 費浙平.基于A(yíng)RM的嵌入式系統開(kāi)發(fā)—系統的初始化過(guò)程.[J].單片機與嵌入式系統應用,2003.9,80-83

4 黃克彬,葉梧,馮穗力.基于A(yíng)RM+uCLinux嵌入式系統啟動(dòng)引導的實(shí)現.[J].電子技術(shù)應用. http://

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


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: 地址重映射 S3C44B0X uCLinux

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>