當前位置:
首頁 > 知識 > 第一章之s5pv210啟動順序

第一章之s5pv210啟動順序

我所使用的開發板是:友善之臂smart210,cpu為s5pv210.u-boot版本是:u-boot-2012-10

1,首先在u-boot中配置相對應的開發板的配置文件

#make s5p_goni_config

2,設事先編譯好的交叉編譯器放在Makefile中添加上去,打開Makefile

在67行補充CROSS_COMPILE ?= arm-linux-

3,通過s5pv210啟動順序可以看出,啟動由兩個過程來進行boot,分別稱為BL1,BL2。

(1)BL0:是指S5PV210的iROM中固化的啟動代碼

作用:初始化系統時鐘,設置看門狗,初始化堆和棧,載入BL1

(2)BL1:是批在iRAM自動從外擴存儲器(nand/sd/usb)中拷貝的uboot.bin二進位文件的頭最大16K代碼

作用:初始化RAM,關閉Cache,設置棧,載入BL2

(3)BL2:是指在代碼重定向後在內存中執行的uboot的完整代碼

作用:初始化其它外設,載入OS內核

(4)三者之間的關係:(Interal ROM固化代碼)BL0將BL1(bootloader的前16KB--BL1)載入到iRAM;BL1然後在iRAM中運行將BL2(剩下的bootloader)載入到SDRAM;BL2載入內核,把OS在SDRAM中運行起來,最終OS是運行在SDRAM(內存)中的。

BL1 MAX SIZE IS 16K BL2 MAX SIZE IS 80K.

第一章之s5pv210啟動順序

4,製作u-boot.bin文件的16k的代碼如下:(此文件在開發板附贈光碟的裸機代碼/src/cdram中)

1 /* 在BL0階段,Irom內固化的代碼讀取nandflash或SD卡前16K的內容,
2 * 並比對前16位元組中的校驗和是否正確,正確則繼續,錯誤則停止。
3 */
4 #include <stdio.h>
5 #include <string.h>
6 #include <stdlib.h>
7
8 #define BUFSIZE (16*1024)
9 #define IMG_SIZE (16*1024)
10 #define SPL_HEADER_SIZE 16
11 #define SPL_HEADER "S5PC110 HEADER "
12
13 int main (int argc, char *argv[])
14 {
15 FILE *fp;
16 char *Buf, *a;
17 int BufLen;
18 int nbytes, fileLen;
19 unsigned int checksum, count;
20 int i;
21
22 // 1. 3個參數
23 if (argc != 3)
24 {
25 printf("Usage: mkbl1 <source file> <destination file>
");
26 return -1;
27 }
28
29 // 2. 分配16K的buffer
30 BufLen = BUFSIZE;
31 Buf = (char *)malloc(BufLen);
32 if (!Buf)
33 {
34 printf("Alloc buffer failed!
");
35 return -1;
36 }
37
38 memset(Buf, 0x00, BufLen);
39
40 // 3. 讀源bin到buffer
41 // 3.1 打開源bin
42 fp = fopen(argv[1], "rb");
43 if( fp == NULL)
44 {
45 printf("source file open error
");
46 free(Buf);
47 return -1;
48 }
49 // 3.2 獲取源bin長度
50 fseek(fp, 0L, SEEK_END);
51 fileLen = ftell(fp);
52 fseek(fp, 0L, SEEK_SET);
53 // 3.3 源bin長度不得超過16K-16byte
54 count = (fileLen < (IMG_SIZE - SPL_HEADER_SIZE))
55 ? fileLen : (IMG_SIZE - SPL_HEADER_SIZE);
56 // 3.4 buffer[0~15]存放"S5PC110 HEADER "
57 memcpy(&Buf[0], SPL_HEADER, SPL_HEADER_SIZE);
58 // 3.5 讀源bin到buffer[16]
59 nbytes = fread(Buf + SPL_HEADER_SIZE, 1, count, fp);
60 if ( nbytes != count )
61 {
62 printf("source file read error
");
63 free(Buf);
64 fclose(fp);
65 return -1;
66 }
67 fclose(fp);
68
69 // 4. 計算校驗和
70 // 4.1 從第16byte開始統計buffer中共有幾個1
71 a = Buf + SPL_HEADER_SIZE;
72 for(i = 0, checksum = 0; i < IMG_SIZE - SPL_HEADER_SIZE; i++)
73 checksum += (0x000000FF) & *a++;
74 // 4.2 將校驗和保存在buffer[8~15]
75 a = Buf + 8;
76 *( (unsigned int *)a ) = checksum;
77
78 // 5. 拷貝buffer中的內容到目的bin
79 // 5.1 打開目的bin
80 fp = fopen(argv[2], "wb");
81 if (fp == NULL)
82 {
83 printf("destination file open error
");
84 free(Buf);
85 return -1;
86 }
87 // 5.2 將16k的buffer拷貝到目的bin中
88 a = Buf;
89 nbytes = fwrite( a, 1, BufLen, fp);
90 if ( nbytes != BufLen )
91 {
92 printf("destination file write error
");
93 free(Buf);
94 fclose(fp);
95 return -1;
96 }
97
98 free(Buf);
99 fclose(fp);
100
101 return 0;
102 }

5,#gcc -o mkv210 mkv210_image.c生成可執行文件的

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

web組件工具之獲取表單數據:webUtils
VMware workstation批量創建虛擬機和自動化安裝操作系統(一)
Python:使用Kivy將python程序打包為apk文件
bboss quartz定時任務使用案例介紹

TAG:達人科技 |

您可能感興趣

金士頓發布NVMe SSD新品A2000:順序讀寫速度最高2200/2000MB/s,最大1TB容量
QoS優先順序技術 深信服 AC-1180售26800元
我的2017:按時間順序
一加7系列UFS 3.0快閃記憶體速度出爐:順序讀取1.4GB/s
摳門!2019款MacBook Air在SSD上縮水了,順序讀速度慢了35%
明朝帝王世系——1368年—1644年歷任皇帝順序排列
1TB UFS 3.0快閃記憶體跑分出爐 順序讀取達2.3GB/s
UFS 3.0快閃記憶體跑分曝光:順序讀取達2.3GB/s
「EXO」「分享」181024 關於預告照公開順序,我們又有了新的想法
「EXO」「分享」190425 放學時間到,請小朋友們按順序排好隊……
12雙!Yeezy登場順序一覽!
新房到手了,但裝修順序你知道嗎?50年師傅就靠這12步裝完5000套
2019好萊塢大片上半年觀賞順序
SK海力士回歸消費級固態市場:首發Gold S31,2.5寸SATA SSD,順序讀取560MB/s
iPhone8P跌破五千大關:優先順序別高於三星S9
2018年一級建造師備考順序及方法
6399:第五人格求生者擊殺順序介紹 第五人格求生者先殺哪一個
殲20做桶滾動作模擬驅離外機?殲20出擊的順序或在蘇-35之後!
萬能糖醋汁有秘訣「54321」,牢記這個配方和順序,萬無一失
Win10怎麼調整輸入法的順序?