• 型号:e900v22d
  • CPU:S905L3A
  • 运行内存:2G
  • 机身内存:8G

入手的魔百盒型号是e900v22d。使用U盘可以直接引导进入armbian系统。
进入armbian系统的方法非常简单。
首先,去github上下载系统镜像https://github.com/ophub/amlogic-s9xxx-armbian。选择s905l3a型号的。其中:

  • bullseye是Debian系统。
  • jammy是Ubuntu系统。
    二者选择喜欢的一个即可,没有本质区别。不过,国内的Debian系统源比较多,所以,我选择了bullseye,Ubuntu的源需要使用ubuntu-ports源(关于这个也是浏览开源镜像网站时偶然了解到的)。
    还有一个要选择的就是内核版本,有5.10和5.15,其中5.15存在一些问题:
  • 在启动过程中会花屏,启动后正常。
  • 内置网卡有概率无法识别,多次重启有可能会恢复。

相对而言,5.10更稳定一些。

经过半个月的使用后发现存在两个问题:

  • 连续运行5天左右会死机。
    该问题又能可以通过降频解决。降频的方法是执行sudo armbian-config,路径依次为System->CPU->750000->1800000->conservative,是否真的可以解决,有待观察。
  • 重启的时候有一定概率无法启动。无法启动是因为U盘出现一直断开连接再断开的死循环,不清楚是个例还是通用问题。 降频后感觉这个问题也有一些缓解。

尝试通过armbian-install将系统刷入emmc。注意:在刷入前一定要使用armbian-ddbr进行备份emmc上面的系统。并且备份完成后要将备份文件复制出来。我备份了,没有复制出来,结果执行armbian-install时备份的文件被自动删除了,欲哭无泪。

更要命的是,刷入到emmc以后系统无法启动了。因为emmc的有些地方无法写。导致分区变成只读。经过一系列尝试后发现,系统分区被我搞坏了。万幸还剩下boot分区是正常的。由于在内核的根文件系统中有busybox,还可以挂载boot分区改文件。于是,更改u-boot的启动脚本uEnv.txt。将启动系统分区的UUID改成了U盘中系统分区的UUID。当然,如果二者相同,还是会无法启动。可能重新刷一个其他版本的系统镜像到U盘就可以了。最终,通过这个方法正常进入U盘中的系统。

然后,发现armbian-install将系统刷入emmc以后的boot分区中,没有考虑U盘启动。解决方法很简单,将/boot/boot.cmd改成下面的内容就可以了。

echo "Start AMLOGIC mainline U-boot"
if printenv bootfromsd; then exit; fi;
setenv loadaddr "0x44000000"
setenv l_mmc "0 1 2 3"
setenv ethaddr "9E:61:82:29:95:AA"
for devtype in "usb mmc" ; do
        if test "${devtype}" = "mmc"; then
                setenv l_mmc "1"
        fi 
        for devnum in ${l_mmc} ; do
                if test -e ${devtype} ${devnum} uEnv.txt; then
                        load ${devtype} ${devnum} ${loadaddr} uEnv.txt
                        env import -t ${loadaddr} ${filesize}
                        setenv bootargs ${APPEND}
                        if printenv mac; then
                                setenv bootargs ${bootargs} mac=${mac}
                        elif printenv eth_mac; then
                                setenv bootargs ${bootargs} mac=${eth_mac}
                        elif printenv ethaddr; then
                                setenv bootargs ${bootargs} mac=${ethaddr}
                        fi
                        if load ${devtype} ${devnum} ${kernel_addr_r} ${LINUX}; then
                                if load ${devtype} ${devnum} ${ramdisk_addr_r} ${INITRD}; then
                                        if load ${devtype} ${devnum} ${fdt_addr_r} ${FDT}; then
                                                fdt addr ${fdt_addr_r}
                                                booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}
                                        fi
                                fi
                        fi
                fi
        done
done
# Recompile with:
# mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr

其实,这个文件就是U盘的引导分区中的。而刷入到emmc以后的内容会是:

echo "Start AMLOGIC mainline U-boot"
if printenv bootfromsd; then exit; fi;
setenv loadaddr "0x44000000"
setenv devtype "mmc"
setenv l_mmc "2 1 0"
setenv ethaddr "12:34:56:78:9A:BC"
for devnum in ${l_mmc} ; do
        if test -e ${devtype} ${devnum} uEnv.txt; then
                load ${devtype} ${devnum} ${loadaddr} uEnv.txt
                env import -t ${loadaddr} ${filesize}
                setenv bootargs ${APPEND}
                if printenv mac; then
                        setenv bootargs ${bootargs} mac=${mac}
                elif printenv eth_mac; then
                        setenv bootargs ${bootargs} mac=${eth_mac}
                elif printenv ethaddr; then
                        setenv bootargs ${bootargs} mac=${ethaddr}
                fi
                if load ${devtype} ${devnum} ${kernel_addr_r} ${LINUX}; then
                        if load ${devtype} ${devnum} ${ramdisk_addr_r} ${INITRD}; then
                                if load ${devtype} ${devnum} ${fdt_addr_r} ${FDT}; then
                                        fdt addr ${fdt_addr_r}
                                        booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}
                                fi
                        fi
                fi
        fi
done
# Recompile with:
# mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr

这个配置文件完全没有考虑U盘引导。这是很欠考虑的。毕竟刷入到emmc还是有一定风险的。

很可惜,引入备份文件被删,导致无法恢复原来的系统了。另外,自己制作了一个公对公的USB线也无法进行线刷。好在系统救回来了,又可以使用U盘引导系统了。

继续观察。