基于S3C44B0X的Bootloader設計與實現(xiàn)
1.引言
本文引用地址:http://m.butianyuan.cn/article/171603.htmBootloader(引[1]導加載) 程序[1]是系統(tǒng)加電后首先運行的一段程序代碼,用來初始化硬件環(huán)境、改變處理器運行模式和重組中斷向量,建立內(nèi)存空間的映射圖(有的CPU沒有內(nèi)存映射功能如 S3C44B0X ),將系統(tǒng)的軟、硬件環(huán)境帶到一個由用戶定制的特定狀態(tài),然后加載操作系統(tǒng)內(nèi)核。對于不使用操作系統(tǒng)的嵌入式系統(tǒng)而言,應用程序的運行同樣也需要依賴一個準備好的軟、硬件環(huán)境,因此從這個意義上來講,BootLoader對于嵌入式系統(tǒng)是必需的。
Bootloader是依賴于目標硬件實現(xiàn)的,主要包括以下兩方面[2]:
(1)每種嵌入式微處理器體系結(jié)構(gòu)都有不同的Bootloader.應用比較廣泛的Bootloader有VIVI、U-Boot、Blob、RedBoot 等。有些BootLoader也可以支持多種體系結(jié)構(gòu)的嵌入式微處理器。如U-Boot同時支持ARM和MIPS體系結(jié)構(gòu)。
(2)Bootloader依賴于具體的嵌入式板級硬件設備的配置。比如板卡的硬件地址配置、微處理器的類型和其他外設的類型等。也就是說,即使是基于相同嵌入式微處理器構(gòu)建的不同嵌入式目標板,要想讓運行在一個板子上的Bootloader程序同樣運行在另一個板子上,仍需要修改Bootloader的源程序。
作者在參與中國民用航空總局科技基金項目“機場噪聲自動監(jiān)測與數(shù)據(jù)傳輸?shù)难芯颗c實
現(xiàn)”的研發(fā)中,設計了一款基于S3C44B0X的ARM7核心板,并實現(xiàn)了其引導加載程序Bootloader.
2.ARM7核心板介紹
2.1ARM7核心板的構(gòu)成
作者設計的ARM7 核心板主要由CPU、電源管理、存儲單元、JTAG接口和串口五部分組成。圖1是其結(jié)構(gòu)圖。CPU這里用的是Samsung的S3C44BOX微處理器[3], 它是由Samsung Electronics Co.,Ltd為手持設備設計的低功耗、高度集成的基于ARM7TDMI核的微處理器,采用精簡指令系統(tǒng)(RISC)和三級流水線結(jié)構(gòu),且具有豐富的內(nèi)置部件。電源管理部分采用開關電源將AC220V轉(zhuǎn)換成DC5V,然后采用線性穩(wěn)壓電源LM1085將DC5V分別轉(zhuǎn)換成3.3V 的I/O口電源電壓和2.5V 的S3C44B0X內(nèi)核邏輯電壓。存儲單元由Flash存儲器和SDRAM存儲器構(gòu)成。Flash存儲器用的是SST公司的 39VF3201 CMOS FLASH,容量為4MB,16位數(shù)據(jù)寬度,可以重復擦寫。Flash存儲器主要用來存放已經(jīng)調(diào)試好的應用程序、嵌入式操作系統(tǒng)和需要保存的用戶數(shù)據(jù)。 SDRAM存儲器選用的是SAMSUNG公司的8MB K4S641632H,16位數(shù)據(jù)寬度,工作電壓3.3V。由于SDRAM執(zhí)行速度比較快,其通常作為系統(tǒng)運行時的主要區(qū)域,用來存放系統(tǒng)及用戶數(shù)據(jù)、堆棧等。另外,除了可用于下載和通信的串口,還包括用于調(diào)試的JTAG接口。
2.2S3C44B0X的存儲器映射
系統(tǒng)復位后,S3C44B0X的存儲空間映射圖[3]如圖2所示。ARM處理器S3C44B0X的系統(tǒng)存儲空間分為8段(Bank0-Bank7),因此可以配置8個存儲體,其中每個存儲體的大小為32MB,總共可達256MB的存儲空間。可以自由配置訪問存儲體的數(shù)據(jù)總線寬度(8位/16位/32位),在本核心板中,F(xiàn)LASH和SDRAM存儲器的總線寬度設置為16位,在8個可配置存儲體中,Bank0-Bank5可支持ROM、SRAM類型的存儲器;Bank6和Bank7可支持ROM、SRAM以及FP/EDO/SDRAM等其他類型的存儲器,此處Bank0接 FLASH存儲器39VF3201(采用片選信號nGCS0),地址范圍為:0x00000000-0x003fffff.Bank6接8MB的 SDRAM存儲芯片K4S641632H(采用片選信號nGCS6),地址范圍為0x00000000-0x007fffff。其他存儲空間(Bank2、Bank3、Bank4、Bank5、Bank7)暫時保留。
3.Bootloader 啟動流程設計
系統(tǒng)加電或復位后,CPU通常都從CPU制造商預先安排的地址上取指令。如基于ARM7TDMI
內(nèi)核的CPU在復位時都從地址0x00000000處取它的第一條指令。而嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲設備(比如:ROM、EEPROM 或FLASH等)被安排在這個起始地址上。因此在系統(tǒng)加電或復位后,處理器將首先執(zhí)行存放在起始地址處的程序。通過集成開發(fā)環(huán)境IDE可以將 BootLoader定位在起始地址開始的存儲空間內(nèi)。所以,BootLoader是系統(tǒng)加電后,操作系統(tǒng)內(nèi)核或用戶應用程序運行之前,首先必須運行的一段代碼。對于ARM S3C44B0X微處理器,BootLoader是從0x00000000地址開始存放的,此地址采用了可引導的固態(tài)存儲設備FLASH。
從操作系統(tǒng)的角度看,BootLoader的總目標就是正確的調(diào)用內(nèi)核來執(zhí)行。另外由于BootLoader的實現(xiàn)依賴于CPU的體系結(jié)構(gòu),因此大多數(shù)BootLoader都分為stage1和stage2兩部分[4],依賴CPU體系結(jié)構(gòu)的代碼,比如設備初始化代碼等,通常都放在stage1中,而且通常都用匯編語言來實現(xiàn),以達到短小精悍的目的。而stage2通常用C語言來實現(xiàn),這樣可以實現(xiàn)復雜的功能,而且代碼會具有更好的可讀性和可移植性。
存儲器相關文章:存儲器原理
評論