日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于KEIL 的合并boot.binapp.bin的脚本文件

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于KEIL 的合并boot.binapp.bin的脚本文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在設計一個項目或者系統時,一般為了此項目在正式運行階段不需要拆機甚至不允許拆機的情況下,很有必要設計項目可以進行遠程升級,
所以項目工程一般設計boot和app,讓boot能夠將app升級達到更新或者修復bug功能。

一開始需要燒錄boot.bin,再升級app時經常需要編譯生成app.bin文件作為升級的文件,但是在工廠燒錄階段一般使用一個bin文件燒錄,
分兩次燒錄太麻煩,而每次都需要使用工具一步一步的升級,本文介紹一種編譯自動生成的方法,默認讀者已經了解新建工程和升級相關的
知識。

步驟:
1 具有boot&app的升級工程,其中在keil工程中可以將app和boot放在一個工作空間中以便查看工程代碼和工程設置。

具體如下:
1)項目工程中包含app、boot工程。output文件夾為合并工具自動生成的。

2)app的工程目錄如下:主要涉及到obj文件夾,user文件夾,其他不是必須,根據項目裁剪。

3)在E:\我的資料\appbootproject\APP\User中有合并工具MergeTool.bat,此文件工具為批處理文件,需要放在user文件夾中。

4)obj文件夾中放置編譯自動生成的工程bin文件,具體生成bin文件的方法可自行查詢,本文在后面有提到(fromelf.exe --bin -o "$L@L.bin" "#L")生成。

5) 為了統一工程的目錄結構建議設計好app目錄后復制一份作為boot的目錄。boot的user和obj中也與上面app一樣的結構。

2 在E:\我的資料\appbootproject\APP\User 中放置MergeTool.bat文件,并根據工程設置修改MergeTool.bat文件。打開此文件可
以看到一開始就有簡單的使用步驟和輸出的文件(output文件夾)目錄。

在下面的BootFlashSize = 20中修改20,本文設計boot占用20Kbit所以此處為20,其他的修改讀者可以在了解腳本文件后自行設置參數。

在第一個圖將輸出的bin文件修改成對應的工程output選項中的輸出文件名,第二個圖為app輸出的名稱,第三個圖為boot的名稱,第四個圖為需要
輸出的合成后的輸出名稱。

第一圖

第二圖app

第三圖boot

第四圖output

設置好后再在keil中設置編譯時調用此工具(boot中不需要設置與此工具有關的操作,只需要生成的boot.bin放在boot的obj文件夾中),
下面的run#1為編譯時生成bin文件的命令,run#2調用$PMergeTool.Bat命令。選擇在編譯成功后調用。

完成以上步驟后即可編譯boot工程生成boot.bin,然后編譯appg工程生成ap.bin文件,生成后自動調用工具進行合并。

出現 Merger success!合并并生成Bin文件成功 即合并成功。讀者可以自行使用比對工具將原始的bin文件與合并后的bin文件進行比對校驗是否成功合并。

如需要交流或者討論的請與作者聯系,微信號:tt824564795,請注明讀者姓名在哪里看到的遇到的問題以便作者了解。

最后附上原始代碼MergeTool.bat

:: 開/關顯示cli信息
@echo off

echo ---------------------------------------------------------------
echo 合并bin工具MergeTool.Bat文件
echo 使用步驟:
echo 【1】 該文件需要放在APP的項目工程文件夾目錄下。
echo 【2】 在keil的options選項的user中After Build里填寫$PMergeTool.BAT并勾選Run#2。
echo 【3】 在MergeTool.Bat文件中修改app和boot的實際路徑
echo 【4】 在MergeTool.Bat文件中填寫具體的boot大小"BootFlashSize",單位Kb。
echo 【5】 如有需要可以編輯MergeTool.Bat文件,修改部分參數以適應工程需求。
echo Data: 2017-09-09
echo ---------------------------------------------------------------

::文件夾目錄結構示意圖:
::┆
::┞┈Project
:: └┈┈┈┈┈┈OutField
:: └┈┈┈┈┈┈DataField-01
:: ┝┈┈┈┈┈┈BootFirmwareField
:: ┝┈┈┈┈┈┈ServerFirmwareField
:: └┈┈┈┈┈┈MergeFirmwareField
:: └┈┈┈┈┈┈DataField-02
:: ┝┈┈┈┈┈┈BootFirmwareField
:: ┝┈┈┈┈┈┈ServerFirmwareField
:: └┈┈┈┈┈┈MergeFirmwareField

::<-----獲取本.bat文件所在目錄并截取上兩級的目錄----->
if %cd%%cd:~,3% echo 當前目錄已經是%cd:~,1%盤的根目錄!&goto end
cd…
set “ProjectPath0=%cd%”
cd…
set “ProjectPath=%cd%”
if “%ProjectPath%”"%ProjectPath0%" (echo 上一級目錄是: %cd:~,1%盤的根目錄!)
:end
::echo Project目錄: %ProjectPath%

echo 【一、 定義變量】
::<-----定義指定工程下的app和boot的.bin文件路徑----->
set AppFile=%ProjectPath%\APP\OBJ\A8-App.bin
set BootFile=%ProjectPath%\Boot\OBJ\Bootloader.bin
set MergeName=Merge-V1.0.bin

::<-----定義BootFlashSiz指定Boot所占的文件大小----->
set /a BootFlashSize = 20

::<-----定義自動生成由時間組成的文件夾名稱字段DataField,列:2020-11-23-11-31-28----->
set DataField=%date:0,4%-%date:5,2%-%date:8,2%-%time:0,2%-%time:3,2%-%time:6,2%

::<-----定義文件夾名稱字段OutField=Output----->
set OutField=Output
set BootFirmwareField=Boot燒錄固件
set ServerFirmwareField=服務器升級固件
set MergeFirmwareField=生產燒錄固件

::<-----定義Merge為最終生成的生產固件字段----->
set MergeFile="%ProjectPath%%OutField%%DataField%%MergeFirmwareField%%MergeName%"

::<-----打印出AppFile、BootFile、MergeFile字段(調試使用)----->
:: echo %AppFile%
:: echo %BootFile%
:: echo %MergeFile%

echo 【二、 創建文件夾】
::<-----創建目標文件夾Output,包含創建服務器、生產、Boot所需的文件夾----->
if not exist %ProjectPath%%OutField% mkdir %ProjectPath%%OutField%
if not exist %ProjectPath%%OutField%%DataField% mkdir “%ProjectPath%%OutField%%DataField%”

mkdir “%ProjectPath%%OutField%%DataField%%ServerFirmwareField%”
mkdir “%ProjectPath%%OutField%%DataField%%MergeFirmwareField%”
mkdir “%ProjectPath%%OutField%%DataField%%BootFirmwareField%”

echo 【三、 復制文件】
::<-----將工程下的boot和app的bin文件分別復制到對應的文件夾----->
copy %AppFile% “%ProjectPath%%OutField%%DataField%%ServerFirmwareField%”
copy %BootFile% “%ProjectPath%%OutField%%DataField%%BootFirmwareField%”

::<-----準備boot文件 空bin文件撐開不需要寫部分,size取決于app在flash起始地址之前的空間大小----->
set /a bootsize = %BootFlashSize%*1024
for %%a in (%BootFile%) do set /a size="%bootsize%"-%%~za
echo Boot文件大小:【%BootFlashSize% Kb】

fsutil file createnew temp.bin %size%

copy /b %BootFile% + temp.bin boot.bin

echo 【四、 合并文件】
::<-----生成合并文件----->
copy /b boot.bin + %AppFile% %MergeFile%

echo 【五、 刪除臨時文件】
::<-----刪除臨時文件----->
del temp.bin
del boot.bin

::<-----檢查執行成功與否----->
if exist %MergeFile% (goto success) else goto failure

:success
echo ***************************************************
echo Merger success!合并并生成Bin文件成功
echo ***************************************************
::Pause
exit

:failure
echo ***************************************************
echo Merger failure!合并并生成Bin文件失敗
echo ***************************************************
::Pause
exit

總結

以上是生活随笔為你收集整理的基于KEIL 的合并boot.binapp.bin的脚本文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。