基于A(yíng)RM的嵌入式BootLoader設計與啟動(dòng)過(guò)程
3.5 呼叫主程序
當系統初始化完成后,就要轉入主程序,可由跳轉指令來(lái)完成。這部分代碼為C程序,主要負責uCLinux內核拷貝、 Ramdisk文件系統加載、設置啟動(dòng)參數和串口通信等功能.程序最終完成內核壓縮文件和Ramdisk到RAM的拷貝,后跳轉到RAM中Linux Kernel的首地址,并交出控制權,到此Bootloader的任務(wù)完成。其中uCLinux在RAM中的空間分配為0x0c000000
-0x0c008000(uCLinux內核調度用),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 嚴國清,熊建設.S3C44B0X中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
評論