STM8自制BootLoader例程,包含BootLoader源代碼,一個(gè)APP應(yīng)用程序,一個(gè)winform寫的串口升級(jí)軟件
文件:590m.com/f/25127180-485654772-3b6f86
(訪問(wèn)密碼:551685)
以下內(nèi)容無(wú)關(guān):
-------------------------------------------分割線---------------------------------------------
(最近在論壇上,很多朋友提到關(guān)于bootlaoder的問(wèn)題,所以把自己的一些理解整理一下,做一個(gè)說(shuō)明,希望對(duì)大家有幫助,如果你覺得有問(wèn)題的,可以用任何方式,任何語(yǔ)氣提出,本人絕對(duì)不會(huì)象0bug大師那樣,呵呵。)
一.bootloader的作用
其實(shí)bootloader主要的必須的作用只有一個(gè):就是把操作系統(tǒng)映像文件拷貝到RAM中去,然后跳轉(zhuǎn)到它的入口處去執(zhí)行。而操作系統(tǒng)文件的來(lái)源,可以是flash,sd card,PC(可以通過(guò)網(wǎng)絡(luò),USB,甚至串口傳輸)等等,所謂的EBOOT,UBOOT,其實(shí)就是表明了系統(tǒng)文件是通過(guò)Ethernet或者USB從PC傳輸過(guò)去的。當(dāng)然,為了實(shí)現(xiàn)這個(gè)功能(以及其它附加功能),我們必須對(duì)硬件做一些必要的初始化,這個(gè)也是必須的(廢話?。3诉@個(gè)必須的,現(xiàn)在的bootloader還常常會(huì)加入以下功能:
1.將操作系統(tǒng)映像文件寫入FLASH/硬盤等:讀取過(guò)來(lái)的操作系統(tǒng)文件,除了可以拷貝到RAM中直接運(yùn)行,還可以燒錄到FLASH,或者寫入硬盤永久保存,這樣下次就可以直接從本機(jī)來(lái)讀取操作系統(tǒng)映像。
2.硬件診斷:如同PC的BIOS一樣,檢測(cè)硬件是否正常功能。
3.顯示一個(gè)LOGO,因?yàn)榭截惒僮飨到y(tǒng)文件和啟動(dòng)操作系統(tǒng)需要時(shí)間,所以產(chǎn)品化的設(shè)備,一般需要在這段時(shí)間顯示一個(gè)LOGO。
二.bootloader是不是必須的
bootloader并不是必須的,如果我們的硬件有足夠大的norflash,并且實(shí)現(xiàn)了XIP技術(shù),那么WinCE 操作系統(tǒng)可以直接在norflash里面運(yùn)行起來(lái),不需要將它復(fù)制到RAM中去,所以bootloader就失去了作用。
但是考慮到成本因素,現(xiàn)在的硬件一般都不會(huì)配置這么大的norflash,image文件都存儲(chǔ)在nand flash里面,所以都會(huì)用到bootloader。
三.關(guān)于nboot和eboot
國(guó)內(nèi)很多人做WinCE都是使用Samsung的2410或者2440入門的,所以對(duì)nboot和eboot是最熟悉的。eboot是微軟在WinCE里面提供的開放源代碼的一個(gè)bootloader的框架,因?yàn)樗J(rèn)的是使用ethernet從PC下載image而得名,使用該框架,根據(jù)自己的硬件做一些修改就可以直接拿來(lái)用了,那么nboot又是怎么回事呢?
之所以需要nboot(注:三星的后續(xù)產(chǎn)品中,nboot已經(jīng)改名為stepldr,ldr是looder的縮寫,step是stepstone的意思,這是三星系列CPU為解決nand啟動(dòng)而內(nèi)置的一小塊RAM),是和硬件緊密相關(guān)的。我們?cè)谠O(shè)計(jì)硬件的時(shí)候,ROM部分可以只使用norflash,也可以使用1片小容量的norflash 大容量的nandflash,還可以只使用nandflash。第一種方案,可以不用bootloader,也可以只使用eboot;第二種方案,把eboot放到norflash中,image放在nandflash中,并將硬件設(shè)置為norflash啟動(dòng)模式,也不用nboot。只有第3種方案,才需要使用nboot,這是為什么呢?
我們知道nandflash本身不能運(yùn)行程序,它里面的內(nèi)容必須拷貝到RAM中才能運(yùn)行,但是CPU上電后,RAM中是空的,誰(shuí)來(lái)執(zhí)行這個(gè)拷貝的工作呢?三星的解決方案,就是內(nèi)置了一小塊RAM(stepstone),然后從硬件上實(shí)現(xiàn)CPU上電后先讀取nand flash最開始的一段代碼到stepstone中去(當(dāng)然,要設(shè)置硬件為nandflash啟動(dòng)方式),然后從stepstone起始處(被設(shè)置為RAM的0地址)去執(zhí)行。這個(gè)stepstone一般很?。?410,2440是4K),所以它沒辦法放下一個(gè)功能復(fù)雜的bootloader(比如eboot),只能放一個(gè)功能很簡(jiǎn)單的,這就是需要nboot的原因了。nboot的功能十分單一,就是從nandflash復(fù)制image到RAM中去,然后跳轉(zhuǎn)執(zhí)行。這里的image可以是eboot的(一般開發(fā)階段這樣做),也可以是OS的。
優(yōu)龍的開發(fā)板提供了一種叫做BIOS的bootloader,它遠(yuǎn)遠(yuǎn)超出了4K的限制,但是還可以在nandflash啟動(dòng)方式下正常運(yùn)行,這是為什么呢?原來(lái),它實(shí)現(xiàn)了2次加載,也就是說(shuō)CPU上電后自動(dòng)加載了4K代碼,這4K代碼又將整個(gè)bootloader重新拷貝到RAM中再執(zhí)行,要實(shí)現(xiàn)這樣的功能要對(duì)鏈接器做一些設(shè)置,使“拷貝”功能的代碼必須放到前4K里面去。
總之,bootloader是需要直接和硬件打交道,不同的硬件設(shè)計(jì),就會(huì)影響到它的實(shí)現(xiàn),所以了解硬件的設(shè)計(jì)是理解bootloaer的第一步。
來(lái)源:https://www.icode9.com/content-4-889301.html聯(lián)系客服