HiKey970
环境准备
WSL2 作为上位机
识别 Windows 11 Host 的 USB Serial Device
分别在 Windows 11 上安装 usbipd-win, 在 WSL2 上安装 user space tools for USB/IP
1 | Microsoft Windows [版本 10.0.22621.1702] |
WSL2 Ubuntu-20.04 创建 /dev/ttyUSB0
1 | [Thu Jun 15 19:19:44 2023] vhci_hcd vhci_hcd.0: pdev(0) rhport(0) sockfd(3) |
Recovery 模式应该连接哪个 Type-C (USB SERIAL) 接口
HiKey970 有两个 Type-C 接口,而且当板子被设置为 Recovery 模式时,两个接口均会被识别为“串口”。在左手边的 (J3101) 是用来访问 Debug UART 的,而在 HDMI 和 USB 中间的那个(J1801)是在 Recovery 模式下使用的。而且这两个接口是两个不同厂家提供的芯片,使用完全不同的内核驱动模块

- 前者(J3101):
Bus 001 Device 003: ID 04e2:1410 Exar Corp. XR21V1410 USB-UART IC

- 后者(J1801):
Bus 001 Device 002: ID 12d1:3609 Huawei Technologies Co., Ltd. USB SER

Build rootfs.img and boot.img
boot.img
boot.img 主要提供 bootloader, 所以它可以只包含 grub.efi, Hikey970 使用的 boot.img 是 64M 大小
rootfs.img
rootfs.img 就是整个系统了(根文件系统),内核可执行文件(Image)和设备树二进制文件(.dtb) 都包含在它的 boot 目录里,Hikey970 使用的 rootfs.img 原始大小是 4.0GB, 但经过 android-tools 工具包里的 img2simg 处理后只有 716M
1 | -rw-r--r-- 1 luc luc 4.0G 11月26日 06:48 rootfs.img |
debootstrap
/usr/sbin/qemu-debootstrap/usr/sbin/debootstrap
是两个 Shell 脚本, 主要就是通过下载相应平台的 binaries,通过 chroot 来制作根文件系统
fastboot
fastboot 是用来从 Host 向开发板烧写固件和镜像的常用工具之一,在 Arch Linux 上它可以通过以下命令安装
1 | yay -S android-sdk-platform-tools |
fastboot 常用命令
1 | fastboot getvar all |
1 | fastboot devices |
1 | fastboot flash ptable 64gtoendprm_ptable.img |
1 | fastboot -S 8M flash system rootfs.sparse.img |
启动
Bootloader
1 | ➜ /mnt ls -lh /mnt/EFI/BOOT |
1 | hikey970% ls -lhR /boot |

NOTE:
HiKey970 的输入电压要求在 8V ~ 18V 之间,但最好使用 12V 以上接近 18V的输入电压,否则可能出现fastboot flash时出现板子自己重启的怪现象
连接 WiFi


xfce4 桌面
吃灰5,6年的板子又再一次亮了

制作 rootfs, initramfs
环境是 qemu-system-aarch64 Debian 13 Trixie, 折腾了一圈,最后还是发现 Ubuntu, Debian, Arch Linux 这3个,还是 Debian 对 Aarch64 支持最好,Ubuntu 甚至还一个桌面版的 Arm 安装镜像都没有(Arm架构的安装镜像似乎都是服务器版的)。

NetworkManager vs wpasupplicant
点亮吹灰 Hikey970 用的是 hikey970-ubuntu-image, 它的 rootfs 里安装的是 NetworkManager, 当我试着将 hikey970-ubuntu-image 转换成 hikey970-debian-image 时,发现 debootstrap 会因为奇怪的包依赖问题,无法安装 NetworkManager, 而且了解到 wpasupplicant 可以完成同样的事情(连接 WiFi,让板子联网), 而且体量更小,更适合这种开发板。
所以这个 Debian 12 rootfs 网络这块使用了 wpasupplicant, iw, iproute2, dhcpcd5 四剑客
- wpasupplicant
1 | [Unit] |
Note:
- 当
systemctl enable wpa_supplicant@wlan0.service时 systemd 会自动创建一个符号链接文件到/etc/systemd/system/wpa_supplicant@.service, 而文件里的%i是无线网络设备接口名,即 wlan0. - 手动创建
/etc/wpa_supplicant/wpa_supplicant.conf1
wpa_passphrase <SSID> <PASSWORD> >/etc/wpa_supplicant/wpa_supplicant.conf
- iw
1 | iw dev wlan0 scan | grep 'SSID:' |
- iproute2
1 | ip link show wlan0 |
- dhcpcd5
1 | systemctl enable dhcpcd.service |
显示
flowchart LR
DPE["Display Engine<br>(display controller)"]
DSI["Display Serial Interface"]
HDMI["external HDMI converter"]
subgraph in-chip
DPE -- RGB timing --> DSI
end
DSI --> HDMI
新内核
- kernel + dtb

- kernel only

