基于A(yíng)RM的嵌入式Bootloader實(shí)現自動(dòng)升級
Stage1的主要任務(wù)如下:初始化計時(shí)器,初始化網(wǎng)絡(luò ),初始化Flash,裝載內核映像和文件系統映像,初始化命令控制臺等。進(jìn)入stage1的匯編代碼如下:
adr r0 , load_addr //@get stage1 entry point
ldr r9 , [r0 , #0x0c]
3 本實(shí)驗基本原理
(圖 2) |
本實(shí)驗對 Bootloader的功能進(jìn)行了擴充,加入自動(dòng)升級的功能。即:用戶(hù)需要對目標板的內核或文件系統進(jìn)行升級,只需要將新的映像文件拷貝到CF存儲卡或移動(dòng)硬盤(pán)中,然后將CF卡或移動(dòng)硬盤(pán)插入目標板相應的插槽,每次重啟目標板時(shí),先啟動(dòng)Bootloader,初始化硬件環(huán)境后,在應用程序運行前,判斷是否存在要升級的文件,如果存在則先把Flash指定的位置的內容擦除掉,然后再把要升級的內核或文件系統的映像文件寫(xiě)進(jìn)相應的位置,寫(xiě)完后立即刪除CF存儲卡或移動(dòng)硬盤(pán)上的升級文件,即完成升級。如圖2
項目開(kāi)發(fā)板上有一塊8M Byte的Flash和二塊32M Bit的DDR SDRAM。Flash的起始地址映射到0x00000000,其布局如下[7]:
(Flash布局圖)
如圖所示,在虛擬地址位置0x00030000(實(shí)際物理地址為0x46030000)擦除和重寫(xiě)內核與文件系統映像文件。要對CF卡或移動(dòng)硬盤(pán)進(jìn)行文件存取,必須將CF卡或移動(dòng)硬盤(pán)格式化成某種文件系統。本實(shí)驗所編寫(xiě)的Bootloader主要支持3種文件系統:FAT16,FAT32,EXT2。系統啟動(dòng)時(shí),Bootloader首先檢測CF卡或移動(dòng)硬盤(pán)的文件系統類(lèi)型,然后按照相應的文件系統格式查詢(xún)CF 卡或移動(dòng)硬盤(pán)的所有文件。若發(fā)現有更新的映像文件,則讀CF卡的操作,CF卡的驅動(dòng)見(jiàn)文獻[3],將映像文件讀到SDRAM中,再從SDRAM燒寫(xiě)到嵌入式開(kāi)發(fā)版的Flash中,實(shí)現升級。
生成內核和文件系統步驟如下:
1)進(jìn)入linux的armutils_2.5.127.0目錄下執行make linux-config,裁剪uClinux的配置;
2)make linux 生成kernel-2.4.22-dtv-EM8624L-romfs.bin ,這是uClinux的內核;
3)make rootfs 生成rootfs-dtv-EM8624L-romfs.ext2,這是root文件系統;
4)make romfs 生成romfs-dtv-EM8624L-romfs.bin.gz,這是rom文件系統。
評論