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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于S3C44B0X的Bootloader設(shè)計(jì)與實(shí)現(xiàn)

          基于S3C44B0X的Bootloader設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2012-04-16 來源:網(wǎng)絡(luò) 收藏

          1.引言

          本文引用地址:http://www.ex-cimer.com/article/171603.htm

          (引[1]導(dǎo)加載) 程序[1]是系統(tǒng)加電后首先運(yùn)行的一段程序代碼,用來初始化硬件環(huán)境、改變處理器運(yùn)行模式和重組中斷向量,建立內(nèi)存空間的映射圖(有的CPU沒有內(nèi)存映射功能如 ),將系統(tǒng)的軟、硬件環(huán)境帶到一個(gè)由用戶定制的特定狀態(tài),然后加載操作系統(tǒng)內(nèi)核。對(duì)于不使用操作系統(tǒng)的嵌入式系統(tǒng)而言,應(yīng)用程序的運(yùn)行同樣也需要依賴一個(gè)準(zhǔn)備好的軟、硬件環(huán)境,因此從這個(gè)意義上來講,BootLoader對(duì)于嵌入式系統(tǒng)是必需的。

          是依賴于目標(biāo)硬件的,主要包括以下兩方面[2]:

          (1)每種嵌入式微處理器體系結(jié)構(gòu)都有不同的.應(yīng)用比較廣泛的Bootloader有VIVI、U-Boot、Blob、RedBoot 等。有些BootLoader也可以支持多種體系結(jié)構(gòu)的嵌入式微處理器。如U-Boot同時(shí)支持ARM和MIPS體系結(jié)構(gòu)。

          (2)Bootloader依賴于具體的嵌入式板級(jí)硬件設(shè)備的配置。比如板卡的硬件地址配置、微處理器的類型和其他外設(shè)的類型等。也就是說,即使是相同嵌入式微處理器構(gòu)建的不同嵌入式目標(biāo)板,要想讓運(yùn)行在一個(gè)板子上的Bootloader程序同樣運(yùn)行在另一個(gè)板子上,仍需要修改Bootloader的源程序。

          作者在參與中國民用航空總局科技基金項(xiàng)目“機(jī)場噪聲自動(dòng)監(jiān)測(cè)與數(shù)據(jù)傳輸?shù)难芯颗c實(shí)

          現(xiàn)”的研發(fā)中,了一款的ARM7核心板,并了其引導(dǎo)加載程序Bootloader.

          2.ARM7核心板介紹

          2.1ARM7核心板的構(gòu)成

          作者的ARM7 核心板主要由CPU、電源管理、存儲(chǔ)單元、JTAG接口和串口五部分組成。圖1是其結(jié)構(gòu)圖。CPU這里用的是Samsung的S3C44BOX微處理器[3], 它是由Samsung Electronics Co.,Ltd為手持設(shè)備的低功耗、高度集成的ARM7TDMI核的微處理器,采用精簡指令系統(tǒng)(RISC)和三級(jí)流水線結(jié)構(gòu),且具有豐富的內(nèi)置部件。電源管理部分采用開關(guān)電源將AC220V轉(zhuǎn)換成DC5V,然后采用線性穩(wěn)壓電源LM1085將DC5V分別轉(zhuǎn)換成3.3V 的I/O口電源電壓和2.5V 的內(nèi)核邏輯電壓。存儲(chǔ)單元由Flash存儲(chǔ)器和SDRAM存儲(chǔ)器構(gòu)成。Flash存儲(chǔ)器用的是SST公司的 39VF3201 CMOS FLASH,容量為4MB,16位數(shù)據(jù)寬度,可以重復(fù)擦寫。Flash存儲(chǔ)器主要用來存放已經(jīng)調(diào)試好的應(yīng)用程序、嵌入式操作系統(tǒng)和需要保存的用戶數(shù)據(jù)。 SDRAM存儲(chǔ)器選用的是SAMSUNG公司的8MB K4S641632H,16位數(shù)據(jù)寬度,工作電壓3.3V。由于SDRAM執(zhí)行速度比較快,其通常作為系統(tǒng)運(yùn)行時(shí)的主要區(qū)域,用來存放系統(tǒng)及用戶數(shù)據(jù)、堆棧等。另外,除了可用于下載和通信的串口,還包括用于調(diào)試的JTAG接口。

          28.jpg

          2.2S3C44B0X的存儲(chǔ)器映射

          系統(tǒng)復(fù)位后,S3C44B0X的存儲(chǔ)空間映射圖[3]如圖2所示。ARM處理器S3C44B0X的系統(tǒng)存儲(chǔ)空間分為8段(Bank0-Bank7),因此可以配置8個(gè)存儲(chǔ)體,其中每個(gè)存儲(chǔ)體的大小為32MB,總共可達(dá)256MB的存儲(chǔ)空間??梢宰杂膳渲迷L問存儲(chǔ)體的數(shù)據(jù)總線寬度(8位/16位/32位),在本核心板中,F(xiàn)LASH和SDRAM存儲(chǔ)器的總線寬度設(shè)置為16位,在8個(gè)可配置存儲(chǔ)體中,Bank0-Bank5可支持ROM、SRAM類型的存儲(chǔ)器;Bank6和Bank7可支持ROM、SRAM以及FP/EDO/SDRAM等其他類型的存儲(chǔ)器,此處Bank0接 FLASH存儲(chǔ)器39VF3201(采用片選信號(hào)nGCS0),地址范圍為:0x00000000-0x003fffff.Bank6接8MB的 SDRAM存儲(chǔ)芯片K4S641632H(采用片選信號(hào)nGCS6),地址范圍為0x00000000-0x007fffff。其他存儲(chǔ)空間(Bank2、Bank3、Bank4、Bank5、Bank7)暫時(shí)保留。

          29.jpg

          3.Bootloader 啟動(dòng)流程設(shè)計(jì)

          系統(tǒng)加電或復(fù)位后,CPU通常都從CPU制造商預(yù)先安排的地址上取指令。如基于ARM7TDMI

          內(nèi)核的CPU在復(fù)位時(shí)都從地址0x00000000處取它的第一條指令。而嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲(chǔ)設(shè)備(比如:ROM、EEPROM 或FLASH等)被安排在這個(gè)起始地址上。因此在系統(tǒng)加電或復(fù)位后,處理器將首先執(zhí)行存放在起始地址處的程序。通過集成開發(fā)環(huán)境IDE可以將 BootLoader定位在起始地址開始的存儲(chǔ)空間內(nèi)。所以,BootLoader是系統(tǒng)加電后,操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序運(yùn)行之前,首先必須運(yùn)行的一段代碼。對(duì)于ARM S3C44B0X微處理器,BootLoader是從0x00000000地址開始存放的,此地址采用了可引導(dǎo)的固態(tài)存儲(chǔ)設(shè)備FLASH。

          從操作系統(tǒng)的角度看,BootLoader的總目標(biāo)就是正確的調(diào)用內(nèi)核來執(zhí)行。另外由于BootLoader的依賴于CPU的體系結(jié)構(gòu),因此大多數(shù)BootLoader都分為stage1和stage2兩部分[4],依賴CPU體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都放在stage1中,而且通常都用匯編語言來實(shí)現(xiàn),以達(dá)到短小精悍的目的。而stage2通常用C語言來實(shí)現(xiàn),這樣可以實(shí)現(xiàn)復(fù)雜的功能,而且代碼會(huì)具有更好的可讀性和可移植性。

          存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理



          上一頁 1 2 3 下一頁

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