虽然 bananapi m2u 是 4 核 32 位的 Cortex-A7, damn是他的支持是全面的, 不会像 raspi 那样因为 dtb 报错。(我还没试, 不过我运行 raspi3b 确实跑不起来, 我等待大概 5 分钟)

wget <https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.14.6.tar.xz>
tar xf linux-6.14.6.tar.xz
cd linux-6.14.6
make ARCH=arm sunxi_defconfig
make LLVM=1 ARCH=arm -j$(nproc)

# copy it to image
cp arch/arm/boot/zImage ../bananapi_m2u
cp arch/arm/boot/dts/allwinner/sun8i-r40-bananapi-m2-ultra.dtb ../bananapi_m2u

运行一下, 虽然没有根文件系统。

qemu-system-arm -M bpim2u -nographic \\
      -kernel zImage \\
      -dtb sun8i-r40-bananapi-m2-ultra.dtb \\
      -append 'console=ttyS0,115200'

喜讯, panic

image.png

因为 bananapi_m2u 的支持是完整的, 隔壁还有个 orangepi 也是 32 位机器, 后续看他两资料情况, 我会选择一个作为嵌入式linux信息的模拟机器。对个人而言, 不需要板子就能体验嵌入式linux开发学习, 先熟悉驱动的编写, 以及设备树的修改。虽然没有硬件的直观感受。但是设备树和模拟机使用基本和硬件一致。

你可以根据 编译 u-boot && kernel && rootfs运行 && 根文件系统 制作你的根文件系统, 后续或许可以操作 desktop

后续

我基于 busybox 制作了一个 initrd , init 脚本如下

#!/bin/sh

echo "Loading, please wait..."

[ -d /dev ] || mkdir -m 0755 /dev
[ -d /root ] || mkdir --mode=0700 /root
[ -d /sys ] || mkdir /sys
[ -d /proc ] || mkdir /proc
[ -d /tmp ] || mkdir /tmp
[ -d /mnt ] || mkdir /mnt

# Mount /proc and /sys:
mount -n proc /proc -t proc
mount -n sysfs /sys -t sysfs

# Note that this only becomes /dev on the real filesystem if udev's scripts
# are used; which they will be, but it's worth pointing out
#mount -t tmpfs -o mode=0755 udev /dev
[ -e /dev/console ] || mknod /dev/console c 5 1
[ -e /dev/null ] || mknod /dev/null c 1 3

# this will scan device update /dev list
mdev -s
# Do your stuff here.
echo "This script just mounts and boots the rootfs, nothing else!"

# Mount the root filesystem.
[ -d /mnt/root ] || mkdir /mnt/root
mount -o rw /dev/mmcblk0p1 /mnt/root

# Clean up.
umount /proc
umount /sys
exec switch_root /mnt/root /sbin/init

然后就是只安装了 openrcalpine-base 的 rootfs, 默认的串口使用 ttyS0