基于iTop-4412的U-Boot 2017移植[0]:Exynos4412基礎(chǔ)

基于iTop-4412的U-Boot 2017移植[0]:Exynos4412基礎(chǔ)

參考資料:

Exynos4412 SoC基礎(chǔ)

- Exynos4412的地址空間

memory_map

iROM:這段地址空間對應(yīng)Exynos4412內(nèi)部固化的一段程序拗引,Exynos4412啟動(dòng)的第一條指令就存放在這里。

iRAM:這段地址空間對應(yīng)的是Exynos4412內(nèi)部的一個(gè)存儲(chǔ)器电禀,這段存儲(chǔ)器的特點(diǎn)是上電就可以用,不用初始化该肴。

DMC0:這段地址空間就是核心板上的DDR3對應(yīng)的存儲(chǔ)空間搭幻,上電后需要初始化DRAM控制器才能使用。

- Exynos4412的啟動(dòng)過程

boot

由圖中數(shù)字順序得知:

  1. iROM
  2. BL1
  3. OS

首先從iROM運(yùn)行宫患,然后根據(jù)OM的值判斷從哪個(gè)存儲(chǔ)設(shè)備(Nand\SD/MMC\eMMC\USB OTG)加載BL1到iRAM序苏;

其次手幢,BL1再根據(jù)OM的值判斷從哪個(gè)存儲(chǔ)設(shè)備加載OS到DRAM中;

最后忱详,運(yùn)行OS代碼围来。

注意: iROM固化在SoC內(nèi)部,BL1是Samsung提供的鏡像文件E4412_N.bl1.bin,OS在這里可以認(rèn)為是BL2监透,這部分是u-boot代碼中編譯生成的SPL桶错,BL2是由BL1加載到iRAM中運(yùn)行的。最后胀蛮,BL2再根據(jù)OM值院刁,從sdcard中將u-boot代碼拷貝到DRAM中。

我們接下來要進(jìn)行移植的U-Boot啟動(dòng)過程為iROM->BL1(E4412_N.bl1.bin)->BL2(U-Boot SPL)->U-Boot粪狼。

- Exynos4412的運(yùn)行空間

program_text_base

如圖退腥,標(biāo)出了iROM、BL1和BL2的運(yùn)行地址空間再榄。

iRAM的地址空間是0x02020000 - 0x02060000

  • iROM: iRAM的0x02020000 - 0x02021400的5KB地址空間分配給iROM用狡刘,用于存放iROM的全局變量(ZI/RW,分別存放全局未初始化變量不跟、全局已初始化變量)颓帝、局部變量(stack)等等米碰。

  • BL1: 從0x02021400 - 0x02023400的8KB地址空間屬于BL1窝革,可以認(rèn)為BL1的第一條指令就存放在0x02021400地址單元。

  • BL2: 緊接著的0x02023400 - 0x02027400的16KB地址空間屬于BL2吕座,即:BL2的第一條指令存放的地址就是0x02023400虐译,這個(gè)值很重要,如果我們的SPL中有非“位置無關(guān)碼”吴趴,那么就必須將SPL加載到其運(yùn)行地址處漆诽,否則在執(zhí)行那些非位置無關(guān)碼的時(shí)候會(huì)出錯(cuò)。后續(xù)編寫U-Boot的時(shí)候需要設(shè)置宏定義:#define CONFIG_SPL_TEXT_BASE 0x02023400锣枝。

- 用于Exynos4412啟動(dòng)的SD卡布局

sd_layout

其中sdcard的扇區(qū)大小是1Block = 512B厢拭。

第0個(gè)扇區(qū)是保留扇區(qū)(Reserved),第1到第16扇區(qū)共8KB的空間存放BL1(E4412_N.bl1.bin)撇叁,從第17到第48扇區(qū)的16KB空間用于存放BL2(u-boot-spl.bin)供鸠,之后的扇區(qū)可以根據(jù)實(shí)際需求自己安排。

- 制作用于Exynos4412啟動(dòng)的BL2

BL1可以自己寫也可以使用官方提供的E4412_N.bl1.bin陨闹,本次移植我們采用官方的楞捂。

Q: BL1有了,怎么制作BL2呢趋厉?

A: 使用mkbl2工具寨闹。

mkbl2.c:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
    FILE *fp;
    unsigned char src;
    char *buf, *a;
    int buf_len;
    int nbytes, file_len;
    unsigned int checksum = 0;
    int i;

    if (argc != 4) {
        printf("Usage: mkbl2 <source file> <destination file> <size> \n");
        return -1;
    }

    buf_len = atoi(argv[3]);
    buf = (char *)malloc(buf_len);
    memset(buf, 0x00, buf_len);

    fp = fopen(argv[1], "rb");
    if( fp == NULL) {
        printf("source file open error\n");
        free(buf);
        return -1;
    }

    fseek(fp, 0L, SEEK_END);
    file_len = ftell(fp);
    fseek(fp, 0L, SEEK_SET);

    nbytes = fread(buf, 1, file_len, fp);

    if (nbytes != file_len) {
        printf("source file read error\n");
        free(buf);
        fclose(fp);
        return -1;
    }

    fclose(fp);

    for(i = 0; i < (14 * 1024) - 4; i++)
        checksum += (unsigned char)(buf[i]);

    *(unsigned int*)(buf + i) = checksum;

    fp = fopen(argv[2], "wb");
    if (fp == NULL) {
        printf("destination file open error\n");
        free(buf);
        return -1;
    }

    a = buf;
    nbytes = fwrite(a, 1, buf_len, fp);

    if (nbytes != buf_len) {
        printf("destination file write error\n");
        free(buf);
        fclose(fp);
        return -1;
    }

    free(buf);
    fclose(fp);
    return 0;
}

該程序的功能就是為BL2添加校驗(yàn)碼【耍【BL2 不能大于(14K – 4B) 字節(jié)繁堡,最后 4B用于存放較驗(yàn)碼】

編譯:

$ gcc mkbl2.c -o mkbl2

使用:

$ ./mkbl2 u-boot-spl.bin bl2.bin 14336

有了上面的基礎(chǔ)知識,下面開始移植。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椭蹄,一起剝皮案震驚了整個(gè)濱河市矮瘟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌塑娇,老刑警劉巖澈侠,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異埋酬,居然都是意外死亡哨啃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門写妥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拳球,“玉大人,你說我怎么就攤上這事珍特∽>” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵扎筒,是天一觀的道長莱找。 經(jīng)常有香客問我,道長嗜桌,這世上最難降的妖魔是什么奥溺? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮骨宠,結(jié)果婚禮上浮定,老公的妹妹穿的比我還像新娘。我一直安慰自己层亿,他們只是感情好桦卒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匿又,像睡著了一般方灾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上琳省,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天迎吵,我揣著相機(jī)與錄音,去河邊找鬼针贬。 笑死击费,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的桦他。 我是一名探鬼主播蔫巩,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼谆棱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了圆仔?” 一聲冷哼從身側(cè)響起垃瞧,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坪郭,沒想到半個(gè)月后个从,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歪沃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年嗦锐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沪曙。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奕污,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出液走,到底是詐尸還是另有隱情碳默,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布缘眶,位于F島的核電站嘱根,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏磅崭。R本人自食惡果不足惜儿子,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一瓦哎、第九天 我趴在偏房一處隱蔽的房頂上張望砸喻。 院中可真熱鬧,春花似錦蒋譬、人聲如沸割岛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽癣漆。三九已至,卻和暖如春剂买,著一層夾襖步出監(jiān)牢的瞬間惠爽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工瞬哼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留婚肆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓坐慰,卻偏偏與公主長得像较性,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容