191 lines
5.7 KiB
Bash
191 lines
5.7 KiB
Bash
#!/bin/bash
|
||
|
||
# NTAG424 ARM 編譯測試腳本
|
||
# 展示所有 ARM 編譯選項和問題排除
|
||
|
||
set -e
|
||
|
||
echo "🔧 NTAG424 ARM 編譯測試"
|
||
echo "========================================="
|
||
echo ""
|
||
|
||
# 檢查交叉編譯工具
|
||
echo "📋 檢查交叉編譯工具..."
|
||
make check-cross-tools
|
||
echo ""
|
||
|
||
# 顯示可用編譯選項
|
||
echo "🎯 可用的 ARM 編譯選項:"
|
||
echo ""
|
||
echo "✅ 動態連結版本 (推薦):"
|
||
echo " make arm64 # ARM 64-bit (aarch64)"
|
||
echo " make arm32 # ARM 32-bit (armhf)"
|
||
echo " make armel # ARM 軟浮點 (armel)"
|
||
echo ""
|
||
echo "⚠️ 靜態連結版本 (目前有問題):"
|
||
echo " make arm64-static # 會遇到 FTDI/libtomcrypt 依賴問題"
|
||
echo " make arm32-static # 會遇到 FTDI/libtomcrypt 依賴問題"
|
||
echo ""
|
||
|
||
# 詢問用戶要測試哪個版本
|
||
echo "請選擇要測試的編譯選項:"
|
||
echo " (1) ARM64 動態版本 (推薦)"
|
||
echo " (2) ARM32 動態版本 (推薦)"
|
||
echo " (3) ARMEL 版本"
|
||
echo " (4) ARM64 靜態版本 (展示問題)"
|
||
echo " (5) ARM32 靜態版本 (展示問題)"
|
||
echo " (6) 全部測試"
|
||
echo " (0) 退出"
|
||
echo ""
|
||
|
||
read -p "請選擇 (0-6): " choice
|
||
|
||
case $choice in
|
||
1)
|
||
echo ""
|
||
echo "🚀 編譯 ARM64 動態版本..."
|
||
make arm64
|
||
echo ""
|
||
echo "✅ ARM64 動態版本編譯成功!"
|
||
echo "📁 輸出目錄: arm64_release/"
|
||
echo "📚 需要函式庫: ufr-lib/linux/aarch64/"
|
||
;;
|
||
2)
|
||
echo ""
|
||
echo "🚀 編譯 ARM32 動態版本..."
|
||
make arm32
|
||
echo ""
|
||
echo "✅ ARM32 動態版本編譯成功!"
|
||
echo "📁 輸出目錄: arm32_release/"
|
||
echo "📚 需要函式庫: ufr-lib/linux/arm-hf/"
|
||
;;
|
||
3)
|
||
echo ""
|
||
echo "🚀 編譯 ARMEL 版本..."
|
||
make armel
|
||
echo ""
|
||
echo "✅ ARMEL 版本編譯成功!"
|
||
echo "📁 輸出目錄: armel_release/"
|
||
echo "📚 需要函式庫: ufr-lib/linux/arm-el/"
|
||
;;
|
||
4)
|
||
echo ""
|
||
echo "⚠️ 嘗試編譯 ARM64 靜態版本 (預期會失敗)..."
|
||
echo "這將展示靜態連結的已知問題..."
|
||
echo ""
|
||
if make arm64-static; then
|
||
echo "✅ 意外成功!ARM64 靜態版本編譯完成。"
|
||
else
|
||
echo ""
|
||
echo "❌ 如預期,ARM64 靜態編譯失敗。"
|
||
echo ""
|
||
echo "🔍 常見錯誤分析:"
|
||
echo "• undefined reference to 'FT_Close' - 缺少 FTDI 函式庫"
|
||
echo "• undefined reference to 'ecc_find_curve' - 缺少 libtomcrypt"
|
||
echo "• multiple definition of 'hex2bin' - 符號衝突"
|
||
echo ""
|
||
echo "💡 解決方案:"
|
||
echo "• 使用動態連結版本: make arm64"
|
||
echo "• 部署時包含函式庫目錄: ufr-lib/linux/aarch64/"
|
||
fi
|
||
;;
|
||
5)
|
||
echo ""
|
||
echo "⚠️ 嘗試編譯 ARM32 靜態版本 (預期會失敗)..."
|
||
echo "這將展示靜態連結的已知問題..."
|
||
echo ""
|
||
if make arm32-static; then
|
||
echo "✅ 意外成功!ARM32 靜態版本編譯完成。"
|
||
else
|
||
echo ""
|
||
echo "❌ 如預期,ARM32 靜態編譯失敗。"
|
||
echo ""
|
||
echo "🔍 常見錯誤分析:"
|
||
echo "• undefined reference to 'FT_Close' - 缺少 FTDI 函式庫"
|
||
echo "• undefined reference to 'ecc_find_curve' - 缺少 libtomcrypt"
|
||
echo "• multiple definition of 'hex2bin' - 符號衝突"
|
||
echo ""
|
||
echo "💡 解決方案:"
|
||
echo "• 使用動態連結版本: make arm32"
|
||
echo "• 部署時包含函式庫目錄: ufr-lib/linux/arm-hf/"
|
||
fi
|
||
;;
|
||
6)
|
||
echo ""
|
||
echo "🚀 測試所有 ARM 編譯選項..."
|
||
echo ""
|
||
|
||
# 測試動態版本
|
||
echo "📋 測試動態連結版本:"
|
||
echo ""
|
||
|
||
echo "• ARM64 動態版本..."
|
||
if make arm64; then
|
||
echo " ✅ 成功"
|
||
else
|
||
echo " ❌ 失敗"
|
||
fi
|
||
|
||
echo "• ARM32 動態版本..."
|
||
if make arm32; then
|
||
echo " ✅ 成功"
|
||
else
|
||
echo " ❌ 失敗"
|
||
fi
|
||
|
||
echo "• ARMEL 版本..."
|
||
if make armel; then
|
||
echo " ✅ 成功"
|
||
else
|
||
echo " ❌ 失敗"
|
||
fi
|
||
|
||
echo ""
|
||
echo "📋 測試靜態連結版本 (預期會失敗):"
|
||
echo ""
|
||
|
||
echo "• ARM64 靜態版本..."
|
||
if make arm64-static 2>/dev/null; then
|
||
echo " ✅ 意外成功"
|
||
else
|
||
echo " ❌ 如預期失敗 (缺少靜態依賴)"
|
||
fi
|
||
|
||
echo "• ARM32 靜態版本..."
|
||
if make arm32-static 2>/dev/null; then
|
||
echo " ✅ 意外成功"
|
||
else
|
||
echo " ❌ 如預期失敗 (缺少靜態依賴)"
|
||
fi
|
||
|
||
echo ""
|
||
echo "📊 測試總結:"
|
||
echo "• 動態連結版本: 完全支援 ✅"
|
||
echo "• 靜態連結版本: 有已知問題 ⚠️"
|
||
echo "• 建議使用動態版本進行部署"
|
||
;;
|
||
0)
|
||
echo "退出測試"
|
||
exit 0
|
||
;;
|
||
*)
|
||
echo "無效選擇"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
echo ""
|
||
echo "🎯 部署指南:"
|
||
echo ""
|
||
echo "1. 動態版本部署 (推薦):"
|
||
echo " scp arm64_release/nt4h_c_example user@arm-device:"
|
||
echo " scp -r ufr-lib/linux/aarch64/ user@arm-device:ufr-lib"
|
||
echo " ssh user@arm-device 'export LD_LIBRARY_PATH=./ufr-lib:\$LD_LIBRARY_PATH'"
|
||
echo ""
|
||
echo "2. 使用部署腳本:"
|
||
echo " ./deploy_arm.sh <主機> <使用者> <架構>"
|
||
echo ""
|
||
echo "3. 查看完整指南:"
|
||
echo " cat ARM_BUILD_GUIDE.md"
|
||
echo ""
|
||
echo "✅ 測試完成!" |