首頁 > 軟體

全志 Allwinner A20 機上盒刷入原生 Debian

2020-06-16 17:53:25

花費 60 大洋購買了一台天敏電視精靈 3 安卓機上盒。買來的目的就是為了刷入原生的 Debian 或其他發行版本。

檢視了一下具體的硬體:全志 Allwinner A20 雙核 CPU,Cortex-A7 架構;記憶體 1G;快閃記憶體 4G;兩個 USB,一個 HDMI,一個 AV。大體看了一下 Sunxi 的 Wiki,發現可以按照以下的辦法來刷入。最好有一根 ttl 線來接入盒子的 UART 介面檢視輸出資訊。

下面是操作步驟:

第一部分:

進入預設的安卓系統,通過 ttl,使用 root 賬戶直接掛載 nanda 分割區,獲取其中的 script.bin。如果你沒有 ttl 線,可以先嘗試用 adb 連線盒子,然後用 root 大師來獲取 root 許可權,之後順序操作即可:先把盒子連線上 Wifi,然後 adb connect IPADDRESS,root。總之,就是為了獲取 script.bin。

獲取 script.bin方法:

# mkdir /sdcard/nanda
# mount -t vfat /dev/block/nanda /sdcard/nanda
# exit
# adb pull /sdcard/nanda/script.bin

取得 script.bin 後,如果要修改其中的節點,那麼需要 sunxi-tools:

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

編輯 fex 檔案,編輯後,重新生成二進位制檔案:

./fex2bin script.fex script.bin

script.bin 檔案是 fex 檔案的二進位制實現,fex 檔案定義 SoC 是如何工作的,它設定 GPIO 引腳並設定 DRAM、顯示(如 HDMI、VGA、解析度)等引數。

第二部分:

1、編譯 uboot

這邊的編譯環境為 Linux version 3.16.0-4-686-pae (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian 3.16.7-ckt11-1+deb8u3 (2015-08-04),預設的編譯工具為 gcc-arm-linux-gnueabihf,在“deb http://emdebian.org/tools/debian/ jessie main”源中可以找到。

因為我這邊沒有也找不到盒子的 uboot 原始碼,我嘗試用了 cubieboard2 的 uboot 原始碼,編譯後可以正常使用。

git clone https://github.com/linux-sunxi/u-boot-sunxi -b wip/a20
make cubieboard2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

找一個 SD 卡,用來引導,全志盒子預設為 SD 卡引導。用 fdisk 給 SD 卡分兩個區,第一個為 fat,第二個為 ext4 格式,具體不再贅述。按照我的是 sdb1、sdb2。

將編譯好的 uboot 寫入到 sdcard:

# dd if=spl/sunxi-spl.bin of=/dev/sdb bs=1024 seek=8
# dd if=u-boot.bin of=/dev/sdb bs=1024 seek=32

新建一個 boot.cmd 檔案,輸入以下內容:

setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait
panic=10 ${extra}
fatload mmc 0 0x48000000 uImage
bootm 0x48000000

使用 cmd 檔案來生成 scr 檔案:

mkimage -C none -A arm -T script -d boot.cmd boot.scr

2、編譯核心

依舊使用 cubieboard2 的核心,因為我使用 Sunxi 的核心編譯後無法啟動,本人菜鳥折騰了幾天沒精力了。直接使用 cubieboard2 的核心可以啟動,但是需要新增盒子的 PHY 網絡卡驅動。天敏電視精靈 3 的 PHY 為 ICplus 晶片。如下操作:

# git clone https://github.com/cubieboard2/linux-sunxi
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun7i_defconfig
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

進入 menuconfig 狀態,新增 ICplus 網絡卡的支援:

# make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output modules_install

生成的核心和模組路徑:

arch/arm/boot/uImage
output/lib/

製作 Debian rootfs:

# debootstrap --verbose --arch=armhf --foreign jessie debian http://ftp.cn.debian.org/debian
# cd debian
# cp /usr/bin/qemu-arm-static usr/bin/
# LC_ALL=C LANGUAGE=C LANG=C chroot . /debootstrap/debootstrap --second-stage
# LC_ALL=C LANGUAGE=C LANG=C chroot . dpkg --configure -a

chroot 並部署 rootfs:

passwd
echo "a20" > etc/hostname
echo "127.0.0.1 a20" >> etc/hostname
echo T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt100 >> etc/inittab
echo deb http://ftp.cn.debian.org/debian/ jessie main contrib non-free > etc/apt/sources.list
echo deb http://security.debian.org/ jessie/updates main contrib non-free >> etc/apt/sources.list
apt-get update
apt-get dist-upgrade
apt-get install openssh-server
apt-get install locales
echo "en_US.UTF-8 UTF-8" > etc/locale.gen
echo "zh_CN.UTF-8 UTF-8" >> etc/locale.gen
locale-gen

需要修改 rootfs 下的兩個檔案 /etc/network/interfaces 和 /etc/ssh/sshd_config,開啟靜態 ip 地址和支援 root 登入。

所有的製作完成了,下面拷貝檔案到 SD 卡相應分割區:

拷貝到 sdb1 下的檔案:

uImage script.bin boot.scr

然後將 Debian 的 rootfs 檔案拷貝到 sdb2,核心模組拷貝到 /lib 下。

插入 SD 卡到盒子,通電後等待片刻即可用 ssh 登入盒子了,一個完整原生的 Debian 系統跑起來了。

目前先研究到這裡,使用 /dev/fb0 應該可以繼續啟動 Xorg,跑跑 LXDE 應該沒什麼問題。

目前存在的問題:盒子上的兩個 USB 介面無法使用!因為是套用的 cubieboard2 的原始碼和 uboot,具體到底是 script.bin 的緣故還是原始碼的緣故,我折騰了幾天,依然搞不定。希望有精通嵌入式的朋友幫我看下能否解決該問題,謝謝大家!

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-09/122898.htm


IT145.com E-mail:sddin#qq.com