mkv210_image.c文件详解
生活随笔
收集整理的這篇文章主要介紹了
mkv210_image.c文件详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以下內容源于朱有鵬《物聯網大講堂》課程的學習,如有侵權,請告知刪除。
1、mkv210_image.c的使用演示
- 裸機程序中的Makefile(實際上真正的項目的Makefile都是這樣的)是把程序的編譯和鏈接過程分開的。(平時我們用gcc a.c -o exe這種方式來編譯時,實際上把編譯和鏈接過程一步完成了。在內部實際上編譯和鏈接永遠是分開獨立進行的,編譯要使用編譯器gcc,鏈接要使用鏈接器ld)
- 鏈接器得到led.elf其實就是我們的可執行程序,(如果是在操作系統下,這個led.elf就可以執行了)但是在嵌入式裸機中我們需要的是可以燒寫的文件(可燒寫的文件就叫鏡像image),因此我們需要用這個led.elf為原材料來制作鏡像,制作工具是交叉編譯工具鏈中的arm-linux-objcopy。
- 我們使用arm-linux-objdump工具進行反編譯(反匯編),反匯編其實就是把編譯后的elf格式的可執行程序給反過來的到對應的匯編程序,的到它的匯編源代碼。我們使用反匯編主要是用來學習,見本部分最后一節。
- mkv210_image.c這個程序其實最終不是在開發板上執行的,而是在主機linux(就是用來執行make對整個項目進行編譯的那個機器)中執行的,因此編譯這個程序用gcc而不是用arm-linux-gcc。這個.c文件編譯后得到一個可執行程序mkmini210,目的是通過執行這個mkmini210程序而由led.bin得到210.bin。(210.bin是通過SD卡啟動時的裸機鏡像,這個鏡像需要由led.bin來加工的到,加工的具體方法和原理要看mkv210_image.c)
2、背景知識:S5PV210的啟動過程回顧
- 210啟動后先執行內部iROM中的BL0,BL0執行完后會根據OMpin的配置選擇一個外部設備來啟動(有很多,我們實際使用的有2個:usb啟動和SD卡啟動)。
- 在usb啟動時,內部BL0讀取到BL1后不做校驗,直接從BL1的實質內部0xd0020010開始執行,因此usb啟動的景象led.bin不需要頭信息,因此我們從usb啟動時直接將鏡像下載到0xd0020010去執行即可,不管頭信息了。
- 從SD啟動時,BL0會首先讀取sd卡得到完整的鏡像(完整指的是led.bin和16字節的頭),然后BL0會自己根據你的實際鏡像(指led.bin)來計算一個校驗和checksum,然后和你完整鏡像的頭部中的checksum來比對。如果對應則執行BL1,如果不對應則啟動失敗(會轉入執行2st啟動,即SD2啟動。如果這里已經是2st啟動了,這里校驗通不過就死定了)。(一開始計算出來的(之后被存儲在頭部16字節中),和BL0從sd卡讀取出來后重新計算的(可能由SD卡于機械特性出現錯誤),進行對比)
3、mkv210_image.c的作用:為BL1添加校驗頭
- 編譯鏈接時只得到led.bin,由led.bin得到210.bin的過程是三星的S5PV210所特有的,因此需要我們自己去完成,為此我們寫了mkv210_image.c來完成。
4、整個程序工作流分析
- 首先申請一個16KB大小的buffer,然后把所有內容按照各自的位置填充進去,最終把填充好的buffer寫入到一個文件(名叫210.bin)就形成了我們想要的鏡像。
5、代碼詳解
第1步:檢驗用戶傳參是不是3個。
第2步:分配16K Bbuffer并且填充為0.
第3步:·········
(1)main函數兩個形參的作用
- main函數接收2個形參:argc和argv。
- argc是用戶(通過命令行來)執行這個程序時,實際傳遞的參數個數。注意這個個數是包含程序執行本身的
- argv是一個字符串數組,這個數組中存儲的字符串就是一個個的傳參。
- 譬如我們執行程序時使用./mkx210 led.bin 210.bin,則argc = 3,則argv[0] = "./mkx210" ?argv[1] = led.bin ?argv[2] = 210.bin
(2)glibc讀寫文件接口
- linux中要讀取一個文件,可以使用fopen打開文件,fread讀取文件,讀完之后fclose關閉文件。
- 要寫文件用fwrite來寫。這些函數是glibc的庫函數,在linux中用man 3 可以查找。
(3)校驗和的計算方法
- 校驗和其實就是需要校驗的內存區域中,所有內存中的內容按照字節為單位來進行相加,最終相加的和極為校驗和。
總結
以上是生活随笔為你收集整理的mkv210_image.c文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 火山去水印链接_在线批量去水印下载快手图
- 下一篇: python pycharm anaco