Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

全志芯片機頂盒刷入原生 Debian 系統完整實戰指南

編輯:關於 Linux

基於全志 Allwinner SoC (如 H3, H6, A64) 的電視盒子/開發板,通過主線 Linux 內核與 U-Boot 支持,可刷入原生 Debian 系統,擺脫廠商定制 Android 限制。本文以典型 H6 盒子為例,覆蓋 script.bin/.fex 配置提取修改、主線 U-Boot/內核編譯、rootfs 部署、啟動介質制作的全流程。

一、硬件與前置知識

  • 目標設備:全志 H6 盒子 (如 Tanix TX6, Beelink GS1, X96 Max+ 等),內存 2GB+,存儲 16GB+ eMMC/SD。
  • 核心組件:
    script.bin (舊) / board.dtb (新) — SoC 運行時配置 (GPIO、DRAM、顯示、PMIC 等)。
    u-boot-sunxi-with-spl.bin — SPL + U-Boot 合併二進制。
    Image + dtb — 內核鎮像與設備樹。
    rootfs.tar.gz — Debian 基礎根文件系統。
  • 工具鏈:sunxi-tools (bin2fex/fex2bin)、armbian-build 或手動交叉編譯環境。

二、提取並修改板級配置 (關鍵步驟)

1. 進入 Android 獲取 script.bin

# 方法 A:TTL 串口進入 U-Boot 命令行 (最可靠)
# 斷電 -> 短接啟動選擇引腳 (如有) -> 上電 -> 串口輸入打斷啟動
# U-Boot> mmc dev 0; fatload mmc 0:1 0x43000000 script.bin; go 0x43000000
# 進入 Android 後:
adb shell
su
mkdir /sdcard/nanda
mount -t vfat /dev/block/nanda /sdcard/nanda
exit
adb pull /sdcard/nanda/script.bin .

# 方法 B:若已 Root,直接 adb pull
adb root
adb pull /dev/block/by-name/nanda script.bin  # 部分分區可直接讀取

2. 反編譯為可編輯 FEX 文本

git clone https://github.com/linux-sunxi/sunxi-tools
cd sunxi-tools
make
./bin2fex script.bin script.fex

3. 核心配置項修改 (script.fex)

[dram_para]          ; 內存參數 (必須與物理內存匹配,錯誤導致無法啟動)
dram_clk       = 600
dram_type      = 3        ; 3=DDR3, 7=LPDDR3, 8=LPDDR4
dram_rank_num  = 1
dram_chip_density = 4096  ; 4Gbit = 512MB/顆粒,按總內存計算

[gpio_para]          ; GPIO 分配 (按原理圖核對)
gpio_used      = 1
gpio_num       = 12
gpio_pin_1     = port:PL10<1><0>  ; 例如 LED
...

[disp_init]          ; 顯示輸出配置
disp_init_enable = 1
disp_mode      = 0        ; 0=HDMI, 1=LCD, 2=TV, 3=VGA
screen0_output_type = 3   ; 3=HDMI
screen0_output_mode = 4   ; 4=1080p60, 10=4K30, 查表確認
fb0_format     = 0
fb0_width      = 1920
fb0_height     = 1080

[hdmi_para]          ; HDMI 參數
hdmi_used      = 1
hdmi_power     = "vcc-hdmi-18"
hdmi_cts_compatibility = 1

[rtc_para]           ; RTC 時鐘
rtc_used       = 1
rtc_type       = 1        ; 1=內置, 2=外置 PCF8563 等

4. 重新編譯為二進制

./fex2bin script.fex script.bin
# 或新版內核使用 DTB:
# 修改 linux/arch/arm64/boot/dts/allwinner/sun50i-h6-.dts
# make dtbs

三、構建主線啟動組件

1. U-Boot (帶 SPL)

git clone https://github.com/u-boot/u-boot.git -b v2024.01 --depth=1
cd u-boot
make _defconfig   # 如 tanix_tx6_defconfig, beelink_gs1_defconfig
make -j$(nproc) CROSS_COMPILE=aarch64-linux-gnu-
# 輸出:u-boot-sunxi-with-spl.bin

2. Linux 內核 (主線 6.x+)

git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git -b v6.6 --depth=1
cd linux
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- _defconfig  # 或 sun50i_h6_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) Image dtbs
# 輸出:arch/arm64/boot/Image, arch/arm64/boot/dts/allwinner/sun50i-h6-.dtb

四、準備 Debian Rootfs

方案 A:debootstrap 構建極簡 Rootfs (推薦,純淨可控)

# 在 x86_64 主機 (需 qemu-user-static)
sudo apt-get install debootstrap qemu-user-static binfmt-support
sudo debootstrap --arch=arm64 --foreign bookworm /tmp/debian-rootfs https://deb.debian.org/debian
sudo cp /usr/bin/qemu-aarch64-static /tmp/debian-rootfs/usr/bin/
sudo chroot /tmp/debian-rootfs /debootstrap/debootstrap --second-stage
# 配置 apt 源、設置 root 密碼、安裝內核模塊、systemd、network-manager 等
sudo tar -czf debian-bookworm-arm64-rootfs.tar.gz -C /tmp/debian-rootfs .

方案 B:使用 Armbian 預構建 Rootfs (最快)

# 從 Armbian 下載頁面獲取對應板卡的 focal/jammy/bookworm rootfs 壓縮包
# 解壓並根據需要精簡/擴展

五、制作啟動 SD 卡 / eMMC 燒錄映像

分區佈局 (MBR/GPT 均可,U-Boot SPL 需特定偏移)

分區起始扇區大小類型內容
1 (SPL+UBOOT)8192 (4MB)4MB原始dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
2 (Boot)16384128MBFAT32Image, dtb, boot.scr, script.bin (可選)
3 (Rootfs)+262144剩餘ext4Debian rootfs

自動化腳本制作映像文件 (可直接 dd 寫入 SD/eMMC)

#!/bin/bash
# build_sd_image.sh
set -euo pipefail
IMG=debian-h6-$(date +%F).img
dd if=/dev/zero of=$IMG bs=1M count=3800  # 3.7GB 映像
# 分區
sfdisk $IMG << EOF
label: dos
unit: sectors
start=8192, size=8192, type=6
start=16384, size=262144, type=c, bootable
start=278528, type=83
EOF
# 映射回環設備
LOOP=$(losetup -f --show -P $IMG)
# 寫入 U-Boot
dd if=u-boot-sunxi-with-spl.bin of=$LOOP bs=1024 seek=8 conv=fsync
# 格式化分區
mkfs.vfat -n BOOT ${LOOP}p2
mkfs.ext4 -L ROOTFS ${LOOP}p3
# 掛載複製文件
mkdir -p /mnt/boot /mnt/root
mount ${LOOP}p2 /mnt/boot
mount ${LOOP}p3 /mnt/root
cp Image sun50i-h6-.dtb /mnt/boot/
cp script.bin /mnt/boot/  # 兼容舊版
tar -xzf debian-rootfs.tar.gz -C /mnt/root/
# 生成 boot.scr (U-Boot 啟動腳本)
cat > /mnt/boot/boot.cmd << 'EOF'
setenv bootargs console=ttyS0,115200 root=LABEL=ROOTFS rootwait panic=10
load mmc 0:1 0x40080000 Image
load mmc 0:1 0x4fa00000 sun50i-h6-.dtb
booti 0x40080000 - 0x4fa00000
EOF
mkimage -C none -A arm64 -T script -d /mnt/boot/boot.cmd /mnt/boot/boot.scr
# 同步卸載
sync
umount /mnt/boot /mnt/root
losetup -d $LOOP
echo "Image ready: $IMG"
echo "Write to SD: sudo dd if=$IMG of=/dev/sdX bs=4M status=progress conv=fsync"

六、eMMC 燒錄 (無 SD 卡槽設備)

  • 進入 U-Boot (TTL),通過 USB 大容量存儲模式 (UMS) 將 eMMC 暴露為 USB 磁盤:
    ums 0 mmc 0
  • 宿主機識別到 USB 磁盤後,dd if=debian-h6.img of=/dev/sdX bs=4M status=progress conv=fsync。
  • 或使用 fastboot (需設備支持) 燒錄分區映像。

七、首次啟動與驗證

  1. 插入 SD 卡 / 燒錄 eMMC 後上電,串口輸出應顯示 U-Boot → 內核啟動 → systemd 服務啟動。
  2. 登錄 (root/無密碼或預設密碼),執行:
    uname -a 確認內核版本
    cat /etc/os-release 確認 Debian 版本
    df -h / 確認根分區掛載正常
    ip a 確認網絡 (eth0/wlan0)
  3. 安裝額外軟件:apt update && apt install -y vim htop iperf3 docker.io。

全志盒子刷機流程圖

八、常見故障排查

現象可能原因排查方向
串口無輸出 / 停在 SPLDRAM 參數錯誤 / U-Boot 配置不匹配核對 script.fex dram_para,確認 U-Boot defconfig
內核 panic: VFS: Unable to mount root fsroot= 參數錯誤 / 缺少驅動 / 分區標簽不匹配檢查 boot.cmd root=LABEL=ROOTFS,確認 ext4 模塊內建
HDMI 無顯示disp_init/hdmi_para 配置錯誤 / EDID 讀取失敗修改 script.fex screen0_output_mode,嘗試 force 模式
網卡不識別缺少 firmware / DTB 缺少 phy 节點安裝 linux-firmware,補全 DTB gmac/phy 配置

九、總結

  1. 獲取 script.bin → bin2fex → 修改 DRAM/顯示/GPIO → fex2bin。
  2. 編譯主線 U-Boot (SPL) + 內核 + DTB。
  3. 構建/獲取 Debian arm64 Rootfs。
  4. 制作分區映像:SPL@8KB、FAT32 Boot (Image+DTB+boot.scr)、ext4 Rootfs。
  5. dd 寫入 SD 或 UMS 燒錄 eMMC。
  6. 串口驗證啟動,享受原生 Debian 的純淨與自由。

掌握此流程,您將能將任意全志盒子轉化為功能完整的 Linux 微型服務器/開發板,釋放硬件真正潛力。

Copyright © Windows教程網 All Rights Reserved