Beaglebone bootloader杂谈
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
??? 既然是雜談,內(nèi)容就比較輕松一點(diǎn)。這里沒有教大家怎樣一步步去針對新的硬件平臺去修改U-Boot代碼(說真的,要想學(xué)這些還是去看U-Boot的文檔比較靠譜),在這我只是泛泛的侃侃Bootloader和怎樣生成針對Beaglebone的bootloader,嗯,閑話少敘,這就開始。
先說說Beaglebone的boot過程
??? 大部分處理器的BOOT過程都要經(jīng)歷多個階段,所謂的“chained loading method”,每一步新的bootloader都完成一些CPU初始化工作,加載下一步要運(yùn)行的程序,然后將CPU的控制權(quán)完全轉(zhuǎn)交。
??? 對于Beaglebone平臺來說,其使用的是AM335x系列的CPU,系統(tǒng)boot過程分為四大步:
??? 1)處理器PoR(power-on reset)后就會跳到復(fù)位向量所指的程序段去運(yùn)行,這段程序位于處理器的ROM中,由處理器生產(chǎn)廠商提供,我們稱其為ROM Boot Loader(RBL)。RBL在初始化固定存儲設(shè)備(NAND Flash,MMC,Etc.)后,根據(jù)CPU的跳線選擇,從持久性存儲設(shè)備中將第二部要用到的bootloader讀入內(nèi)存(至于是內(nèi)部還是外部,要根據(jù)ROM中的程序來定,Beaglebone是內(nèi)部ram),而后將控制權(quán)轉(zhuǎn)交。
???? 2)這一步的bootloader我們稱為Secondary Program Loader(SPL),當(dāng)然這是TI的叫法,你也可以稱其為xloader,UBL。SPL完成有限的初始化工作,最重要的就是初始化DDR RAM(或是其他大一點(diǎn)的外部RAM),因?yàn)橄乱徊降腢-Boot將要進(jìn)駐其中。在這之后,SPL從持久性存儲設(shè)備中將U-Boot(其他bootloader也行,我們這里以U-Boot為例)讀入DDR RAM中,隨后轉(zhuǎn)交CPU控制權(quán)。
??? 3)終于到了萬眾矚目的U-Boot階段,使能大部分的處理器功能,將操作系統(tǒng)內(nèi)核讀入DDR RAM中,而后配置啟動參數(shù)啟動Linux內(nèi)核。當(dāng)然U-Boot的功能可不止這些,U-Boot中提供了很多應(yīng)用程序,可以使用tftp下載文件,或是格式化存儲設(shè)備等等。
??? 4)Linux內(nèi)核啟動……內(nèi)核初始化,MMU使能,外部設(shè)備初始化,PID(1)Init進(jìn)程啟動……
WHY 4 STEPS?
??? 好了,那可能有人會問,搞得那么麻煩干嘛?一步Boot起來不行嗎?>_< 其實(shí)任何一門技術(shù)都是讓我們的生活變的簡單,Bootloader也是,所以其不可能是麻煩……首先,第一步的RBL不可能太復(fù)雜,ROM大小是一個限制,最重要的還是因?yàn)槠渌塬@取的系統(tǒng)信息太少,所以處理器只能使用簡單的方法去尋找能完成復(fù)雜功能的代碼,而后將處理器初始化工作交給它來完成。其次,SPL也不能很復(fù)雜,因?yàn)槠湮挥谔幚砥鞯膬?nèi)部RAM中,一般處理器的內(nèi)部RAM都要小于128KB,其大小注定其不能完成很復(fù)雜的功能,是故,再尋找能力更強(qiáng)大一些的代碼,將處理器初始化工作交給它來完成。到了在DDR RAM中執(zhí)行的Bootloader(U-Boot算一個),其功能就比較完善了,此時就可以啟動操作系統(tǒng)了。
??? 最后上兩張圖:
圖1 Beaglebone boot圖解
圖2 硬件跳線提示RBL從何處讀取SPL
下面就該說說U-BOOT了
??? U-Boot全名是DAS U-Boot,一看就是德國佬做的,DAS嗎…… 背景就不多介紹了,大家自己Google吧。
??? 處理器在BOOT的前三個階段都是不適用MMU的,也就是說在此三個階段運(yùn)行的程序,都是直接訪問處理器的物理地址,只有到操作系統(tǒng)進(jìn)行MMU初始化后,虛擬地址地址系統(tǒng)才算啟動。為什么說這個?如果大家寫了裸機(jī)程序想使用U-Boot加載運(yùn)行,別忘了在編譯的時候指明要加載的硬件地址!
??? U-Boot 主要完成的功能有:
??? 1)初始化處理器時鐘,設(shè)置pin mux。
??? 2)讀取內(nèi)核鏡像。
??? 3)使用用戶指定的內(nèi)核啟動參數(shù)啟動內(nèi)核。
今天先到這里,有點(diǎn)不舒服……
轉(zhuǎn)載于:https://my.oschina.net/u/614480/blog/112660
總結(jié)
以上是生活随笔為你收集整理的Beaglebone bootloader杂谈的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html之marquee详解
- 下一篇: ssp是什么(大厂ssp是什么意思)