<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM的嵌入式BootLoader設(shè)計(jì)與啟動(dòng)過(guò)程

          基于ARM的嵌入式BootLoader設(shè)計(jì)與啟動(dòng)過(guò)程

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

          3.5 呼叫主程序

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

          -0x0c008000(內(nèi)核調(diào)度用),0x0c008000-0x0c300000(uCLinux Kernel),0x0c300000

          -0x0c800000(uCLinux Ramdisk)。以下程序?yàn)閡CLinux內(nèi)核和Ramdisk文件系統(tǒng)拷貝過(guò)程,F(xiàn)LASH_UC_KERNEL,F(xiàn)LASH_UC_RAMDISK分別為內(nèi)核和文件系統(tǒng)在Flash的起始地址,RAM_UC

          _ZIMAGE,RAM_UC_RAMDISK分別為RAM中uCLinux內(nèi)核和文件系統(tǒng)的起始地址,F(xiàn)LASH_LEN_UC_

          KERNEL,F(xiàn)LASH_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操作系統(tǒng)啟動(dòng)過(guò)程

          本系統(tǒng)采用RAM中啟動(dòng)方式,將Flash中的內(nèi)核先拷貝到RAM的某一段地址區(qū)間,再?gòu)脑搮^(qū)間的首地址運(yùn)行 uCLinux內(nèi)核。當(dāng)Bootloader完成系統(tǒng)初始化和拷貝完內(nèi)核和Ramdisk以后,交出控制權(quán),系統(tǒng)開始從RAM中執(zhí)行uCLinux內(nèi)核的引導(dǎo)程序Head.s,并將控制權(quán)交給它。在uCLinux中,Head.s在uCLinux-dist/linux-2.4.x/arch /armnommu/boot/compressed/head.s

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

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

          參考文獻(xiàn)

          1 嚴(yán)國(guó)清,熊建設(shè).中BootLoader的實(shí)現(xiàn).[J].數(shù)據(jù)采集與嵌入式系統(tǒng).2004,(6):40-43

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

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

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

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


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

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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();