下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、210 學(xué)習(xí)-獨立日(6)寫了這么久的 S5PV210 的 板程序了,每次編譯完成后,生成的 bin 文件總是要經(jīng)過 mktiny210spl.exe工具(是u-boot 生成的)重新生成一個新的bin 文件,而該 bin 文件只比舊的bin 文件多出四行信息(在Tiny210學(xué)習(xí)(2)中有講過),也就是說,該四行信息是 mktiny210spl.exe 幫沒有真正的從頭開始寫程序。但是,出于好奇,我今天必須要揭開 mktiny210spl.exe 的神秘面紗,實現(xiàn)真正的獨立!寫的,所以沒有真正的獨立,嘗試一:在在 Tiny210 學(xué)習(xí)(2)中有講到,IROM 從外部器中拷貝到 IRAM 中的
2、代碼的前 16 字節(jié)不能夠是真正的代碼,而應(yīng)該是頭部信息,排列格式如下:0 x0 地址:BL1 size0 x4 地址:必須設(shè)置為 0 (是規(guī)定)0 x8 地址:CheckSum0 xc 地址:必須設(shè)置為 0 (是規(guī)定)IROM 需要前 16 字節(jié)是頭部信息,那我給你頭部信息就是,該怎么做呢?按照對信息的強制要求,我做了以下嘗試,在 start.s 的開頭添加了以下代碼:.word 0 x4000.word 0 x0.word ?.word 0 x0規(guī)定 0 x0 地址存放要拷貝的大小,規(guī)定 0 x4 地址存放 0,那我給你 0給你大小,就 16K 吧(最多拷貝 16K)規(guī)定 0 x8 地址存
3、放 CheckSum,那么 CheckSum 該是多少呢?規(guī)定 0 xc 地址存放 0,那我給你 0在添加代碼的時候,出現(xiàn)了疑問,就是 CheckSum 該是多少?是一個固定值嗎?網(wǎng)上收索了大量資料后,最終得出 CheckSum 的計算公司如下(用一 C 程序來描述):#define uBlAddr直接編譯出的 bin 文件的開始地址unsignedunsignedcount;dataLength; /* 用于指明要拷貝數(shù)據(jù)的大小,即 BL1 size */unsigned char buf; /* 用于存放臨時數(shù)據(jù) */unsignedchecksum; /*要計算的結(jié)果,checksum
4、*/for(count=0;count dataLength;count+=1)buffer = (*(volatile unsigned char*)(uBlAddr+count); checksum = checksum + buffer;最終發(fā)現(xiàn),checksum 是動態(tài)生成的,是可變的,所以直接導(dǎo)致嘗試一以失敗告終!繼續(xù)查閱資料.嘗試二:查了很久的資料,最終想起,最好的資料就是 u-boot 了,這個工具不是 u-boot 生成的嗎?那么里面肯定有它的源碼,一搜索,一提煉,果然,發(fā)現(xiàn)它的代碼如下:這是一個屬于應(yīng)用程序的工具了,一看這個代碼,我才發(fā)現(xiàn)我大一學(xué)習(xí)的 C 函數(shù)中關(guān)系文件操作的
5、知識全部忘光了,不過在查閱資料以后,我還是給出了詳細(xì)的注釋.#include #include #include #defi#defi #defiEK_SETEK_CUR EK_END0 /* 文件開頭的標(biāo)記 */當(dāng)前位置的標(biāo)記 */文件末尾的標(biāo)記 */1 /*2 /*#define BUFSIZE #define IMG_SIZE#define SPL_HEADER_SIZE#define SPL_HEADER(24*1024) (24*1024)16S5PC110 HEADERmain (argc, char *argv)FILEchar*fp;*Buf, *a; BufLen;/* 定義
6、一個文件指針 */nbytes, fileLen;checksum, count;i;unsignedif (argc != 3) /* 如果參數(shù)個數(shù)錯誤,打印幫助信息 */*應(yīng)用工具時,格式必須是 ./mktiny210spl.exe old.bin new.bin prf(Usage: mkbl1 n);return -1;*/BufLen = BUFSIZE;Buf = (char *)malloc(BufLen); /* 動態(tài)分配一段 24k 的內(nèi)存空間 */ if (!Buf) /* 分配失敗,將返回 0 */prf(Alloc buffer failed!n); return -1
7、;memset(Buf, 0 x00, BufLen); /* 將上面分配的空間清零 */fp = fopen(argv1, rb); /* 以讀二進制的方式打開沒有頭部信號的 old.bin 文件 */if( fp = NULL)prf(source file open errorn); free(Buf); /* 如果打開失敗,return -1;掉原來分配的內(nèi)存,否則會造成內(nèi)存泄漏 */fseek(fp, 0L, SEEK_END); /* 讓文件位置指針指向文件末尾,便于下行的統(tǒng)計大小的操作 */fileLen = fl(fp); /* 用于得到文件位置指針當(dāng)前位置相對于文件首的偏移字
8、節(jié)數(shù),即文件大小*/ fseek(fp, 0L, SEEK_SET); /* 讓文件位置指針指向文件開始 */* 如果 old.bin 文件的大小小于規(guī)定的最大大小,則count 等于該文件的大小,否則等于最大大小 */count = (fileLen (IMG_SIZE - SPL_HEADER_SIZE) ? fileLen : (IMG_SIZE - SPL_HEADER_SIZE);memcpy(&Buf0, SPL_HEADER, SPL_HEADER_SIZE); /* 拷貝 16 字節(jié)的數(shù)據(jù)到 Buf 中,即初始化頭部信息的位置 */nbytes = fread(Buf + SP
9、L_HEADER_SIZE, 1, count, fp); /* 將編譯生成的 old.bin 文件拷貝到 buf 中,緊接著頭部信息開始拷貝*/if ( nbytes != count ) /* 返回值等于拷貝的元素的個數(shù) */prf(source file read errorn); /* 如果個數(shù)和實際的不想等,則失敗 */free(Buf); /* fclose(fp); /*return -1;內(nèi)存 */關(guān)閉文件 */fclose(fp); /* 關(guān)閉文件 */* 以下三行,用于動態(tài)生成checksum,公式見上面的嘗試一 */ a = Buf + SPL_HEADER_SIZE;f
10、or(i = 0, checksum = 0; i IMG_SIZE - SPL_HEADER_SIZE; i+)checksum += (0 x000000FF) & *a+;/* 將 checksum 寫入 buf 的第三個字節(jié)處,即該是 checksum 的位置處 */a = Buf + 8;*( (unsigned*)a ) = checksum;fp = fopen(argv2, wb); /* 以二進制寫的方式創(chuàng)建一個新的二進制文件 */ if (fp = NULL)prf(destination file open errorn);free(Buf); /*return -1;內(nèi)
11、存 */a = Buf; /* 指向內(nèi)存的首地址 */nbytes= fwrite( a, 1, BufLen, fp); /* 把 buf 中的數(shù)據(jù)寫入新創(chuàng)建的 bin 文件 */if ( nbytes != BufLen ) /* 返回值等于寫入的元素的個數(shù) */prf(destination file write errorn);free(Buf); /* fclose(fp);/*return -1;內(nèi)存 */關(guān)閉文件 */free(Buf); /*內(nèi)存 */fclose(fp);/* 關(guān)閉文件 */return 0;以上的實現(xiàn)過程就是 mktiny210spl.exe 的真實面目。接下來就是該怎么生成這個工具了,步驟如下:新建一個文件,命名為 wy_mktools.c;(畢竟花費了這么久的時間來學(xué)習(xí)它,所以就取屬于自己的名字了)將嘗試二中的代碼錄入 wy_mktools.c;編譯生成wy_mktools.exe:(Makefile 的內(nèi)容如下) wy_mktools.exe: wy_mktools.cgccwy_mktools.c-owy_mktools.exe到此,小工具終于成功了,獨立日也從此到來。以后請執(zhí)行./wy_mktools.exe old.bin new.bin 吧!注意:1.我用的是第一個流水燈實驗做的測試,用于測試的代碼放到了Tiny21
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023九年級數(shù)學(xué)下冊 第24章 圓24.6 正多邊形與圓第2課時 正多邊形的性質(zhì)說課稿 (新版)滬科版
- 2025甲指乙分包工程合同范本
- 2025酒店租賃合同
- Module 4 Unit 2 He doesnt like these trousers.(說課稿)-2024-2025學(xué)年外研版(一起)英語二年級上冊
- 2025企業(yè)管理資料勞動合同駕駛員文檔范本
- 2024年高中化學(xué) 第三章 烴的含氧衍生物 第一節(jié) 第1課時 醇說課稿 新人教版選修5
- Revision Being a good guest (說課稿)-2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 4電路出故障了(說課稿)-2023-2024學(xué)年科學(xué)四年級下冊教科版
- Unit 3 Animals Lesson 2(說課稿)-2024-2025學(xué)年人教新起點版英語一年級上冊
- Unit 1 Back to school Welcome to the unit 說課稿-2024-2025學(xué)年高中英語譯林版(2020)必修第一冊
- 水生野生動物保護與管理
- 115個低風(fēng)險組病種目錄
- 系統(tǒng)解剖學(xué)考試重點筆記
- 暖通空調(diào)基礎(chǔ)知識及識圖課件
- 重力壩水庫安全度汛方案
- 防滲墻工程施工用表及填寫要求講義
- 交通信號控制系統(tǒng)檢驗批質(zhì)量驗收記錄表
- Bankart損傷的診療進展培訓(xùn)課件
- 校園信息化設(shè)備管理檢查表
- 新版抗拔樁裂縫及強度驗算計算表格(自動版)
- API SPEC 5DP-2020鉆桿規(guī)范
評論
0/150
提交評論