編譯 Linux 核心產生 uImage 時,若出現 mkimage command not found,表示缺少 U-Boot 提供的映像封裝工具。本文提供三種解決方案:原始碼編譯、系統套件安裝、手動複製,並說明交叉編譯工具鏈配置細節。
# 1. 進入 U-Boot 原始碼目錄
cd /usr/src/arm/u-boot-1.1.5 # 或您的 U-Boot 路徑
# 2. 修改 Makefile 設定交叉編譯器
# 找到:
ifeq ($(ARCH),arm)
CROSS_COMPILE =
# 改為:
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-gnueabi- # 依實際工具鏈前綴調整
# 3. 執行編譯
make distclean
make 您的開發板_config # 例:make at91sam9260ek_config
make
# 4. 複製到系統路徑
sudo cp tools/mkimage /usr/bin/mkimage
sudo apt-get update
sudo apt-get install uboot-mkimage
安裝後即可直接使用 mkimage 指令,無需配置路徑。
# 加入 ~/.bashrc 或 /etc/profile
export PATH=$PATH:/usr/src/arm/u-boot-1.1.5/tools
# 立即生效
source ~/.bashrc
mkimage -V
# 輸出版本資訊即成功
| 錯誤 | 原因 | 解決 |
|---|---|---|
| make: arm-linux-gnueabi-gcc: Command not found | 交叉編譯器未安裝或不在 PATH | sudo apt-get install gcc-arm-linux-gnueabi 或設定正確路徑 |
| mkimage: not found 執行 make uImage 時 | 核心 Makefile 找不到 mkimage | 確認 which mkimage 有輸出,或在核心 .config 設定 CONFIG_MKIMAGE |
| 生成的 mkimage 執行報錯 | 動態連結庫缺失(如 glibc 版本不符) | 優先使用方案二套件管理器安裝的版本 |
mkimage 將原始核心映像 zImage/Image 封裝為 U-Boot 可識別的 uImage,加入載入位址、啟動位址、映像類型、壓縮格式、CRC 校驗等標頭資訊:
mkimage -A arm -O linux -T kernel -C none -a 0x80008000 -e 0x80008000 \
-n "Linux-5.15" -d arch/arm/boot/zImage uImage
掌握 mkimage 取得與編譯,是嵌入式 Linux 核心建置與啟動流程除錯的基礎技能。