什麼是bootloader?百度一下一大堆,它就是給處理器優化出一個合適的環境,而後再把引線指向內核,剩下的事就交給內核,不會再有它什麼事(這裏的bootloader不是uboot)。那麼就有人問了:若是它在執行中想有些參數之類的東西想傳遞給內核該怎麼辦呢?這不是太荒唐了嗎?那固然不會這麼簡單了。
函數
硬件初始化的工做你們應該能猜到一二,一、確定是時鐘呀,但在這以前須要先關掉看門狗,二、固然是內存了(就是RAM),而後就到內核了(簡單吧),但這以前若是咱們的bootloader過大的話,也須要把它重定位到RAM中去。這中間有一個小技巧:就是若是你想加快bootloader的運行速度能夠開啓ICACHE來加快進程。而後進入main函數執行跳轉工做。
優化
在這個過程當中咱們bootloader會在內存中開闢一段空間把一些參數之內核可以認識的方式添加到ram段,這樣每當內核須要bootloader的參數的時候她就會取這段內存以特定的方式解析數據,而後bootloader對內核就可以間接傳參了。至於地址的重定位以及內核是如何跳轉,這些我在代碼中有比較詳細的註釋。代碼中的一些數據是從前人的uboot中copy過來,至於寄存器的操做要針對不一樣的處理器另當別論了。這篇bootloader僅僅是uboot的入門,完整的uboot比這要複雜多了。.net
代碼的參考地址:http://www.oschina.net/code/snippet_2241389_52110code