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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于ARM的嵌入式Bootloader實現(xiàn)自動升級

          基于ARM的嵌入式Bootloader實現(xiàn)自動升級

          作者: 時間:2012-03-23 來源:網(wǎng)絡(luò) 收藏

          Stage1的主要任務(wù)如下:初始化計時器,初始化網(wǎng)絡(luò),初始化Flash,裝載內(nèi)核映像和文件系統(tǒng)映像,初始化命令控制臺等。進入stage1的匯編代碼如下:

          adr r0 , load_addr //@get stage1 entry point

          ldr r9 , [r0 , #0x0c]

          3 本實驗基本原理

          (圖 2)


          本實驗對 的功能進行了擴充,加入的功能。即:用戶需要對目標(biāo)板的內(nèi)核或文件系統(tǒng)進行升級,只需要將新的映像文件拷貝到CF存儲卡或移動硬盤中,然后將CF卡或移動硬盤插入目標(biāo)板相應(yīng)的插槽,每次重啟目標(biāo)板時,先啟動,初始化硬件環(huán)境后,在應(yīng)用程序運行前,判斷是否存在要升級的文件,如果存在則先把Flash指定的位置的內(nèi)容擦除掉,然后再把要升級的內(nèi)核或文件系統(tǒng)的映像文件寫進相應(yīng)的位置,寫完后立即刪除CF存儲卡或移動硬盤上的升級文件,即完成升級。如圖2

          項目開發(fā)板上有一塊8M Byte的Flash和二塊32M Bit的DDR SDRAM。Flash的起始地址映射到0x00000000,其布局如下[7]:

          (Flash布局圖)

          如圖所示,在虛擬地址位置0x00030000(實際物理地址為0x46030000)擦除和重寫內(nèi)核與文件系統(tǒng)映像文件。要對CF卡或移動硬盤進行文件存取,必須將CF卡或移動硬盤格式化成某種文件系統(tǒng)。本實驗所編寫的主要支持3種文件系統(tǒng):FAT16,F(xiàn)AT32,EXT2。系統(tǒng)啟動時,Bootloader首先檢測CF卡或移動硬盤的文件系統(tǒng)類型,然后按照相應(yīng)的文件系統(tǒng)格式查詢CF 卡或移動硬盤的所有文件。若發(fā)現(xiàn)有更新的映像文件,則讀CF卡的操作,CF卡的驅(qū)動見文獻[3],將映像文件讀到SDRAM中,再從SDRAM燒寫到嵌入式開發(fā)版的Flash中,實現(xiàn)升級。

          生成內(nèi)核和文件系統(tǒng)步驟如下:

          1)進入linux的armutils_2.5.127.0目錄下執(zhí)行make linux-config,裁剪的配置;

          2)make linux 生成kernel-2.4.22-dtv-EM8624L-romfs.bin ,這是的內(nèi)核;

          3)make rootfs 生成rootfs-dtv-EM8624L-romfs.ext2,這是root文件系統(tǒng);

          4)make romfs 生成romfs-dtv-EM8624L-romfs.bin.gz,這是rom文件系統(tǒng)。



          關(guān)鍵詞: ARM uClinux Bootloader 自動升級

          評論


          相關(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); })();