通用量產鏡像打包工具教程(可適用所有平臺)
1. 項目概述
通用量產鏡像打包工具是一套適用于多種芯片平臺的完整鏡像構建與打包解決方案,可快速生成包含完整系統的量產鏡像,支持多平臺配置與自定義參數設置。
主要功能與特點:
- 集成BSP、rootfs、SPL和UBOOT等完整系統組件
- 支持自定義分區表配置,滿足不同項目需求
- 提供交互式和命令行參數兩種操作模式
- 支持多平臺選擇
- 可自定義物理磁盤大小和最終鏡像大小
- 提供完整的TFTP鏡像燒寫指南
2. 項目結構詳解
項目采用模塊化設計,將不同功能組件和配置文件清晰分離,便于維護和擴展。
2.1 整體目錄結構
image_packer/
├── README.md # 項目說明文檔
├── platform/ # 平臺相關配置和鏡像文件
│ ├── platform_1/ # 平臺1配置
│ └── platform_2/ # 平臺2配置
├── rootfs/ # 根文件系統目錄
│ ├── apps/ # 應用程序
│ └── etc/ # 系統配置文件
├── script/ # 核心構建腳本
│ ├── build.sh # 主構建腳本
│ ├── mk-config.sh # 配置生成腳本
│ ├── mk-update.sh # 更新鏡像生成腳本
│ ├── mk-rootfs.sh # 根文件系統鏡像生成腳本
│ └── mktpsfs # 專用文件系統創建工具
└── os_files/ # 操作系統文件
├── boot.bin # 啟動文件
└── boot.dtb # 設備樹文件
2.2 核心目錄功能說明
- platform/: 包含各目標平臺的特定文件,如bootloader、環境配置和分區表參數
- rootfs/: 包含完整的根文件系統,包括應用程序、庫文件和配置
- script/: 包含所有構建和打包腳本,是項目的核心執行部分
- os_files/: 包含目標操作系統的核心啟動文件
3. 鏡像打包原理與實現
3.1 鏡像組成與分區結構
生成的update.img鏡像采用GPT分區表格式,通常包含以下三個主要分區:
| 分區名稱 | 分區類型 | 分區大小 | 主要功能 |
|---|---|---|---|
| uboot | EF02 | 約3MB | 存儲bootloader和啟動相關程序 |
| boot | FAT32 | 約64MB | 存儲操作系統引導文件和配置 |
| rootfs | TPSFS/EXT4 | 剩余空間 | 根文件系統,包含所有應用程序和數據 |
分區表配置存儲在platform目錄下的partparam.txt文件中,可根據項目需求進行調整。
3.2 構建流程詳解
整個鏡像構建過程由build.sh主腳本協調整合,通過調用多個專用子腳本完成各階段任務:
- 配置解析階段:解析命令行參數或通過交互式輸入獲取平臺、磁盤大小和鏡像大小等配置
- 參數驗證階段:驗證平臺有效性、磁盤大小和鏡像大小是否符合要求
- 配置準備階段:通過mk-config.sh腳本準備各平臺所需文件和環境
- 鏡像創建階段:
- 通過mk-update.sh創建初始鏡像文件和GPT分區表
- 通過mk-fat.sh格式化FAT32分區
- 通過mk-rootfs.sh創建指定格式的根文件系統
- 內容導入階段:通過mk-import.sh導入系統文件到對應分區
- 環境配置階段:通過mk-env.sh配置系統環境參數
- 鏡像調整階段:調整最終鏡像大小以優化存儲空間
4. 從零構建鏡像詳細步驟
4.1 環境準備
- 需要Linux系統環境(推薦Ubuntu 18.04或更高版本)
- 需要root或sudo權限執行構建腳本
- 確保已安裝必要工具:sgdisk、dd、losetup、mkfs.vfat等
4.2 構建前配置檢查
在執行構建前,請確認以下內容:
-
平臺文件完整性:檢查platform目錄下對應平臺文件夾是否包含完整文件:
- bl2.bin:二級引導加載程序
- env.bin:環境配置文件
- partparam.txt:分區表參數配置
- uboot.img:uboot引導鏡像
-
根文件系統準備:確認rootfs目錄包含完整的文件系統結構
-
操作系統文件準備:確認os_files目錄包含boot.bin和boot.dtb等必要的系統文件
4.3 執行鏡像構建
項目支持兩種構建模式:交互式模式和命令行參數模式。
4.3.1 命令行參數模式
這是最常用的模式,直接在命令中指定所有必要參數:
cd /path/to/image_packer/script
sudo ./build.sh --platform=target_platform --disk-size=29G --image-size=84M
參數說明:
--platform:指定目標平臺,根據實際平臺名稱填寫--disk-size:指定物理磁盤大小,最小1G,如29G、30G等--image-size:指定生成的量產鏡像大小,最小84M
4.3.2 交互式模式
如果不熟悉參數配置,可以使用交互式模式:
cd /path/to/image_packer/script
sudo ./build.sh
系統會引導您逐步選擇平臺、輸入磁盤大小和鏡像大小等參數。
4.4 構建過程詳解
當執行build.sh腳本后,系統會按以下步驟進行操作:
-
配置驗證:驗證所選平臺是否存在、磁盤和鏡像大小是否符合要求
-
環境準備:創建必要的輸出目錄、設置環境變量
-
文件鏈接:將平臺相關文件從platform目錄鏈接到臨時工作目錄
-
分區表創建:通過sgdisk工具創建GPT分區表,按partparam.txt定義創建三個分區
-
文件系統格式化:對boot分區進行FAT32格式化,rootfs分區后續使用專用工具處理
-
根文件系統生成:使用專用工具基于rootfs目錄創建指定格式的文件系統鏡像
-
系統文件導入:將目標操作系統文件導入到對應分區
-
環境配置導入:導入ENV.BIN配置文件
-
鏡像大小調整:使用truncate命令將鏡像大小調整為指定的實際大小
-
創建軟鏈接:在項目根目錄創建指向output/update.img的軟鏈接,方便訪問
構建成功后,您將在output目錄下看到生成的update.img鏡像文件。
5. 鏡像燒寫完整指南
5.1 TFTP服務準備
- 在Linux主機上安裝并配置TFTP服務
- 將生成的update.img和platform/target_platform/bl2.bin文件復制到TFTP服務器目錄
- 確保開發板與TFTP服務器在同一網絡中
5.2 板卡燒寫步驟
-
啟動開發板,在啟動過程中按下
Ctrl + D進入UBOOT命令行 -
配置網絡參數(根據實際網絡環境調整):
# 以下命令僅供參考,具體命令和地址根據實際設備和網絡環境調整 # 設置TFTP服務器IP和開發板IP setenv serverip 192.168.1.100; setenv ipaddr 192.168.1.101 -
燒寫update.img鏡像:
# 下載鏡像到開發板內存 tftp 0x880000000 update.img # 配置MMC并燒寫鏡像 mmc partconf 0 0 0 0; mmc write 0x880000000 0 0x2A000 -
驗證分區是否正確創建:
mmc part成功后應顯示三個分區:uboot、boot和rootfs
-
燒寫bl2.bin引導文件:
# 下載并燒寫bootloader tftp 0x880000000 bl2.bin; mmc partconf 0 1 1 1; mmc write 0x880000000 0 0x2fd -
重啟開發板完成整個燒寫過程
6. 高級功能與定制化
6.1 自定義分區表
如需調整分區大小或添加新分區,可以修改對應平臺目錄下的partparam.txt文件:
# 格式:分區號:起始扇區:結束扇區:分區類型:分區名稱:文件系統類型
1:2048:8191:21686148-6449-6e6f-744e-656564454649:uboot:
2:8192:139263:ebd0a0a2-b9e5-4433-87c0-68b6b72699c7:boot:fat32
3:139264:auto:c12a739a-f81f-66d2-df4b-00a0c93ec9d5:rootfs:tpsfs
- 分區號:從1開始的數字
- 起始扇區:分區的起始位置
- 結束扇區:分區的結束位置,"auto"表示自動計算
- 分區類型:GPT分區類型GUID
- 分區名稱:分區的可讀名稱
- 文件系統類型:支持fat32和tpsfs
6.2 添加自定義應用到rootfs
如需將自定義應用程序添加到系統鏡像中,只需將應用程序復制到rootfs目錄的相應位置,然后重新構建鏡像即可:
# 例如,添加自定義應用到/usr/bin目錄
cp your_app /path/to/image_packer/rootfs/usr/bin/
# 然后重新構建鏡像
cd script && sudo ./build.sh --platform=target_platform --disk-size=29G --image-size=84M
6.3 清理構建環境
如需清理所有生成的鏡像文件和臨時文件,可以使用清理模式:
cd script && sudo ./build.sh --clean
這將刪除output目錄、images目錄以及所有生成的.img和.bin文件。
7. 常見問題與解決方案
7.1 權限問題
問題:執行腳本時提示權限不足
解決方案:確保使用sudo或以root用戶身份運行腳本
7.2 平臺文件缺失
問題:提示找不到指定平臺的文件
解決方案:檢查platform目錄下是否存在指定平臺的文件夾,以及文件夾內是否包含完整的必要文件
7.3 工具缺失
問題:執行過程中提示找不到sgdisk、mkfs.vfat等工具
解決方案:使用apt-get或其他包管理器安裝缺失的工具
7.4 鏡像大小問題
問題:生成的鏡像大小與預期不符
解決方案:確保指定的image-size參數不小于84M,且不大于disk-size參數
8. 總結
通用量產鏡像打包工具提供了一套完整、靈活的解決方案,可幫助開發者快速構建和部署適用于多種芯片平臺的系統鏡像。通過本文檔的詳細介紹,您應該能夠理解鏡像打包的原理、掌握從零構建鏡像的步驟、并能夠根據項目需求進行定制化配置。
這套工具的設計思路體現了模塊化、自動化和可配置性的特點,使得復雜的鏡像構建過程變得簡單高效,大大提高了開發和生產效率。通過適當配置platform目錄下的平臺文件和調整分區表參數,可以輕松適配不同的硬件平臺和操作系統需求。
9. 項目獲取
需要項目可郵箱私信我 2584439485@qq.com
本文來自博客園踩坑狹,作者:韓若明瞳,轉載請注明原文鏈接:http://www.rzrgm.cn/han-guang-xue/p/19108844

浙公網安備 33010602011771號