不用工具,合并 bootloader 和 APP 文件就是這么簡單!
只要你經(jīng)歷過稍微復雜一點的項目,一般都會要求 BOOT 和 APP 兩個程序,即是為了方便客戶功能升級,也是為了咱自己解 BUG,所謂好處多多。
剛畢業(yè)那年,魚鷹接手的項目中就需要 BootLoader,為此,魚鷹寫了幾篇相關的筆記《固件升級經(jīng)驗總結》《STM32固件升級之基礎知識(一)》(關注公眾號,菜單欄中有合集,或點擊藍色字體查看)。
這里面介紹的升級知識不管對初學者還是有經(jīng)驗的道友來說,都有一定的參考價值。特別是里面對一些特殊要求的處理,更有巧妙的設計(比如最后才更新 APP 前 8 個字節(jié),比如傳參等問題)。
今天魚鷹繼續(xù)介紹如何合并 BOOT 和 APP 兩個程序,方便一次下載。
在網(wǎng)上,有各種各樣的合并方法,有通過 J-flash 工具的,有通過寫入單片機再讀回來的,有自己寫合并程序的,或者魚鷹介紹的專業(yè)工具 《功能強大的 HEX 開源轉換工具,你值得擁有》,可謂八仙過海,各顯神通。
以上方法大部分方法都要使用工具,或者過程繁瑣。那么有沒有一種快速、簡單、方便的不需要借助工具的合并方法呢?當然有了。
今天魚鷹就介紹這個史上最簡單的方法(這可是老工程師傳授的技巧):
手工法
1、復制bootlaoder 的 HEX 文件后用記事本打開;
2、刪除最后一行(一般是 :00000001FF);
3、打開 APP 的HEX 文件;
4、復制所有 APP 文件的內容,粘貼到第二步文件修改后的 Boot 文件末尾。
5、保存修改后的 boot 文件,這個就是合并后的文件了。
搞定??!沒有借助任何工具(記事本算不?),在沒有工具的情況下,最快的解決方案?。?!
自動法
既然只是對文件的刪除、追加操作,我們完全可以用腳本代替,所以魚鷹寫了一個非常非常簡單的腳本,幫助我們自動完成上面的操作(本來想用windows 的批處理,可惜太菜了,搞不定,只能用 shell 了,如果有道友會這些操作,歡迎留言,這樣就更簡單了)。
第一步,先安裝 git bash,這個工具應該開發(fā)人員基本都安裝了才是,就如 MDK 一樣,畢竟 git 這么火。
然后獻上魚鷹編寫的腳本:
#!/bin/bash #"C:\Program Files\Git\bin\sh.exe" --login -i -c "./boot_app.sh" # MDK 中執(zhí)行的命令 boot_name_file_hex=./bootloader.hex # BOOT 文件所在位置和名稱 app_name_file_hex=./Objects/app.hex #dir_file_name_hex=`find ${app_dir_file_hex} -name "*.hex"` boot_app_name_file_hex=./mege-app-boot.hex cp ${boot_name_file_hex} ${boot_app_name_file_hex} # 復制新文件 boot 文件 sed -i '$d' ${boot_app_name_file_hex} # 刪除最后一行 cat ${app_name_file_hex} >> ${boot_app_name_file_hex} # 追加文件
將上面的文件保存為 boot_app.sh ,然后把它放在工程文件同級目錄下,比如這樣:
最后工程配置一下:
1
2
設置命令(在上面的文件開始處已注釋)
"C:\Program Files\Git\bin\sh.exe" --login -i -c "./boot_app.sh"
注意上面 "C:\Program Files\Git\bin\sh.exe" 路徑和自己安裝的 git 工具有關可以自行修改,boot 和 app 文件名也是如此。
完成以上操作后,編譯后就會自動在工程目錄下生成 mege-app-boot.hex 文件,這就是你要的合并文件了(名字可以隨意?。?。
關于如何下載
既然說不要工具,有種下載也不用 j-flash 或 STM32 ST-LINK Utility 呀!
安排上:《如何使用 KEIL 下載 HEX 文件?》
這樣不就一條龍服務了嘛,從如何制作 bootloader 到如何合并 到下載,大功告成。
關于如何優(yōu)化更新
其實使用調試器更新固件還是挺麻煩的,有沒有更簡單、更傻瓜的操作呢?
當然有,那就是一鍵拖曳燒錄,就像拷貝文件一樣簡單,這個估計很多人有了解,也可能實現(xiàn)過,魚鷹對此也挺感興趣的。后期有時間魚鷹也去搞搞,爭取開源一個讓大家都學習一下,對此感興趣的話,歡迎關注魚鷹吶。
*博客內容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。