日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Exynos4412启动过程分析

發(fā)布時(shí)間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Exynos4412启动过程分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?學(xué)習(xí)Exynos4412啟動(dòng)流程前,我們先看看三星4412芯片啟動(dòng)框圖:


我們從圖中可以看到4412內(nèi)部有64K的ROM和256K SRAM,在ROM中已經(jīng)固化好了一段代碼,當(dāng)硬件上電后首先運(yùn)行的就是這段代碼,這段代碼三星起名為BLO(iROM BOOT 代碼)。其作用是初始化SRAM,并將eMMC中256k代碼拷貝到SRAM中,進(jìn)行初始化DRAM。在圖中我們很清楚看到這一個(gè)運(yùn)行過(guò)程。

1、在芯片的iROM中已經(jīng)固化一個(gè)代碼,當(dāng)硬件上電后就讀取OM電平從而確定硬件設(shè)置的啟動(dòng)模式:0110為從eMMC啟動(dòng),1000位SD卡啟動(dòng);

2、把已經(jīng)設(shè)置啟動(dòng)存儲(chǔ)單元代碼復(fù)制到內(nèi)部RAM中并跳轉(zhuǎn)到RAM運(yùn)行;

3、運(yùn)行OS;


一、iROM

? ? ? ? iROM把啟動(dòng)設(shè)備上特定位置處的程序讀入片內(nèi)存 (iRAM) ,并執(zhí)行它。這個(gè)程序被稱(chēng)為?BL1(Bootloader 1)?,BL1 是三星公司提供的,無(wú)源碼。

? ? ? ? BL1又把啟動(dòng)設(shè)備上另一個(gè)特定位置處的程序讀入片內(nèi)內(nèi)存,并執(zhí)行它。這個(gè)被稱(chēng)為?BL2(Bootloader 2)?,是我們編寫(xiě)的源碼。

下圖是 iROM 啟動(dòng)流程圖:


? ? ? ?

???????? 由上圖可以看出,首先關(guān)閉看門(mén)狗,關(guān)閉中斷及MMU,關(guān)閉數(shù)據(jù)緩存,打開(kāi)指令緩存,清除TLB,然后將其他核進(jìn)入IDLE模式,只留CPU0,這里有了第一個(gè)跳轉(zhuǎn)分支,IROM判斷當(dāng)前啟動(dòng)模式,是冷啟動(dòng)還是喚醒,如果是喚醒模式,那么就是直接跳轉(zhuǎn)到BL1,在BL1里面我們會(huì)再次判斷是否是喚醒模式,如果是就直接跳轉(zhuǎn)到喚醒函數(shù),一般都是linux內(nèi)核的喚醒句柄。當(dāng)然在裸機(jī)里都是冷啟動(dòng)的,休眠喚醒一般是不需要關(guān)注的,當(dāng)然如果你的裸機(jī)程序需要支持休眠喚醒,就需要增加相應(yīng)的代碼了。

? ? ? 繼續(xù)分析,設(shè)置IRQ及SVC模式的棧空間,這個(gè)時(shí)間,棧地址是其內(nèi)部的一片IRAM,這小片RAM是IROM運(yùn)行的外部隨機(jī)存儲(chǔ)器,沒(méi)有這片小內(nèi)存,IROM是無(wú)法運(yùn)行的。接下了就是初始化IROM里面所使用的各種變量,初始化只讀數(shù)據(jù)段,未初始化數(shù)據(jù)段清零,導(dǎo)出部分核心函數(shù),這個(gè)函數(shù)可以在BL1中使用,獲取當(dāng)前復(fù)位的狀態(tài),設(shè)置系統(tǒng)時(shí)鐘分頻,獲取OM管腳配置模式,這里可以從多種外設(shè)啟動(dòng),具體啟動(dòng)模式如下表:


? ? ? 簡(jiǎn)單地說(shuō),iROM就是先設(shè)置程序運(yùn)行環(huán)境 (比如關(guān)看門(mén)狗、關(guān)中斷、關(guān)MMU 、設(shè)置棧 、設(shè)置棧 、啟動(dòng) PLL 等 );然后根據(jù)OM引腳確定啟動(dòng)設(shè)備 (NAND Flash/SD 卡/其他 ),把 BL1 從里面讀出存入iRAM;最后啟動(dòng) BL1 。


二、BL1?

下圖是 BL1 的啟動(dòng)過(guò)程


單地說(shuō),也是設(shè)置程序運(yùn)行環(huán)境(初始化中斷、設(shè)置棧等 );然后從啟動(dòng)設(shè)備上把 BL2讀入iRAM;最后啟動(dòng)它。


三、SD卡作為啟動(dòng)方式



? ? ?BL1 位于SD卡偏移地址 512字節(jié)處(即從第一個(gè)扇區(qū)開(kāi)始,前面有一個(gè)扇區(qū)保留,每個(gè)扇區(qū)512字節(jié),為什么保留第一個(gè)扇區(qū),如果有同學(xué)對(duì)DOS分區(qū)表有過(guò)研究,就能明白其中的道理了,第一個(gè)扇區(qū)是分區(qū)表的配置區(qū)),iROM從這個(gè)位置讀入8K 字節(jié)的數(shù)據(jù),存在iRAM地址 0x02021400位置處。 所以 BL1不能大于8K 。

? ? ?IROM計(jì)算校驗(yàn)和且驗(yàn)證通過(guò)后并解密BL1成功后就可以跳轉(zhuǎn)到BL1了,至此IROM已執(zhí)行完備,權(quán)限已交由BL1了,補(bǔ)充說(shuō)明一下,解密BL1是加密模式啟動(dòng)時(shí)才需要的,非加密模式啟動(dòng)是無(wú)需解密BL1的。

? ? ? BL2 位于 SD 卡偏移地址 (512 +8K)字節(jié)處,BL1從這個(gè)位置讀入14K 字節(jié)的數(shù)據(jù),存在iRAM 地址 0x02023400 處。 BL2 不能大于(14K – 4) 字節(jié),最后 4字節(jié)用于存放較驗(yàn)碼(在匯編流水燈試驗(yàn)中我們用mkbl2工具制作的BL2,其中mkbl2工具最主要的作用就是計(jì)算出校驗(yàn)碼)。

? ?如果我們的程序大于 (14K – 4) 字節(jié),那么需要截取前面 (14K – 4) 字節(jié)用來(lái)制作BL2并燒入SD卡偏移地址 (512 +8K) 字節(jié)處。當(dāng)BL2啟動(dòng)后,由它來(lái)將存放在SD卡另外位置的、完整程序讀入內(nèi)存。

總結(jié)

以上是生活随笔為你收集整理的Exynos4412启动过程分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。