android架構之最底層為啟動程式boot loader, 什麼事bootloader呢 ? 就是電源開啟後, cpu 所抓取的第一個程式, 此程式主要目標為從nandfash儲存媒體(也可從sd卡, 甚至網路或數據機)載入主要程式(第二個程式)到sdram 記憶體, 並將cpu控制權轉交給他, 需要的話, 第二個程式再將第三個程式
載入記憶體..以此類推. 以android而言, 先是bootload啟動, 再載入核心程式, 而後再載入android rootfs, 所以整個系統分 3次才完成.
有人會問, 為何要分次載入程式呢 ? 一次載入不更省時省力嗎 ??? 主要問題關鍵在cpu, 奇怪 ?
怎麼跟cpu有關系呢 ? 理由如下. 當power on時, cpu 從儲存媒體讀入程式到 cpu內部之SRAM,
而不是cpu外部之記憶體(此時記憶體尚未被設定), 而cpu 內置之SRAM(embedded SRAM嵌入式SRAM)大小都不大, 因為embedded SRAM太佔空間, 成本也高, SRAM大小愈大, 則成本愈高.
所以大部分cpu的嵌入SRAM容量都只有數k的大小, 以6410為例, 其嵌入SRAM 只有8k.
話說我們的uboot code size約有190k附近, 還是遠大於8k, 解決之道, 是先uboot 也分二階段,
一小段小於8k的程式先被讀入sram, 然後取得控制權, 設定記憶體sdram( 也就是將記憶體大小, 位址等資訊寫入記憶體控制暫存器), 這樣sdram才可以被使用, 然後再將uboot整個搬進sdram, 讓uboot取得控制權
至此, 應該了解bootloader載入之方式