CPU上电后加载程序的流程 | 基于RK3399
芯片上電解復位之后執行的第一段程序,在芯片中稱之為Bootrom loader。這部分程序在芯片制造過程中固化到其內部的ROM空間,具備只讀屬性,在實際使用過程中無法修改這部分內容,這部分程序的知識產權也僅歸屬于芯片公司所有。其實,你也可以將Bootrom loader稱之為固件。
對于ARM架構的處理器而言,芯片上電解復位后的PC通常是指向0x00000000或0xffff0000地址,也就是說,它會去該地址處取第一條指令、譯碼、執行。CPU能支持的啟動模式通過硬件撥碼的方式告知CPU,CPU上電解復位后內部邏輯會識別bootmode。依據識別出的bootmode決定去何處取第一條指令。假設解析bootmode后發現并不是從bootrom啟動,而是從其他存儲外設啟動,例如norflash、nandflash、qspiflash等,這些外設就會變為CPU的一級啟動設備,而CPU內部邏輯也會將這些啟動外設的地址空間進行remap處理。
RK3399內部包含4個ARM cortex-A53以及2個cortex-A72,典型的cluster結構,cortex-A53作為小核而cortex-A72作為大核。當系統上電解復位之后,cortex-A53的core0作為第一個啟動的核心,執行0xffff0000處的Bootrom loader程序。
其完整的啟動流程如下圖所示:
+--------+----------------+----------+-------------+---------+ |?Boot???|?Terminology?#1?|?Actual???|?Rockchip????|?Image???| |?stage??|????????????????|?program??|??Image??????|?Location| |?number?|????????????????|?name?????|???Name??????|?(sector)| +--------+----------------+----------+-------------+---------+ |?1??????|??Primary???????|?ROM?code?|?BootRom?????|?????????| |????????|??Program???????|??????????|?????????????|?????????| |????????|??Loader????????|??????????|?????????????|?????????| |????????|????????????????|??????????|?????????????|?????????| |?2??????|??Secondary?????|?U-Boot???|idbloader.img|?0x40????|?pre-loader |????????|??Program???????|?TPL/SPL??|?????????????|?????????| |????????|??Loader?(SPL)??|??????????|?????????????|?????????| |????????|????????????????|??????????|?????????????|?????????| |?3??????|??-?????????????|?U-Boot???|?u-boot.itb??|?0x4000??|?including?u-boot?and?atf |????????|????????????????|??????????|?uboot.img???|?????????|?only?used?with?miniloader |????????|????????????????|??????????|?????????????|?????????| |????????|????????????????|?ATF/TEE??|?trust.img???|?0x6000??|?only?used?with?miniloader |????????|????????????????|??????????|?????????????|?????????| |?4??????|??-?????????????|?kernel???|?boot.img????|?0x8000??| |????????|????????????????|??????????|?????????????|?????????| |?5??????|??-?????????????|?rootfs???|?rootfs.img??|?0x40000?| +--------+----------------+----------+-------------+---------+RK3399的二級啟動設備支持SPI NOR FLASH、SPI NAND FLASH、eMMC、SD以及USB load,可以將二級啟動程序放置于上述靜態存儲設備中,RK3399通過讀取ID BLOCK信息決定當前啟動程序是否有效。
RK3399提供了鏡像文件更新的軟件工具AndroidTool.exe,該工具可以更新二級啟動程序及之后的所有鏡像。
對于如何進入到固件更新模式,這取決于板卡的設計方式,例如我們手中的這塊板子,它進入固件更新方式如下:
使用 Type-C 線連接開發板和主機,按住 recover 鍵然不要松開然后按 reset 鍵系統復位,大約兩秒后,松開 recover 鍵。系統將提示發現 loader 設備。
推薦閱讀:
專輯|Linux文章匯總
專輯|程序人生
專輯|C語言
我的知識小密圈
關注公眾號,后臺回復「1024」獲取學習資料網盤鏈接。
歡迎點贊,關注,轉發,在看,您的每一次鼓勵,我都將銘記于心~
嵌入式Linux
微信掃描二維碼,關注我的公眾號
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的CPU上电后加载程序的流程 | 基于RK3399的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求大神杀毒
- 下一篇: java xml转换xsd,将java类