魔百盒折腾记
系列文章
- 型号: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盘引导系统了。
继续观察。