踩坑记录:自编译 amlogic-s9xxx-openwrt 写入 eMMC 后无法启动的解决方案
前言
接上文 《中兴机顶盒 ZXV10 B860AV3.2-M 刷入 openwrt 或 armbian 系统》后,我打算自行编译 openwrt 固件。
编译好后写入U盘,可以正常启动。
但是安装进 eMMC 后,却无法正常启动了。
现象
eMMC 启动时会卡在这个位置,但是U盘启动可以正常进入
Starting kernel ...
uboot time: 5984161 us
错误排查
我先安装上 amlogic-s9xxx-openwrt
官方的编译固件,顺利从 eMMC 启动了。
偶然间我发现:
root@ImmortalWrt:~# df -hl
Filesystem Size Used Avail Use% Mounted on
udev 731M 0 731M 0% /rom/dev
tmpfs 174M 888K 173M 1% /rom/run
/dev/mmcblk2p2 960M 295M 572M 34% /rom
tmpfs 868M 4.6M 864M 1% /tmp
tmpfs 512K 0 512K 0% /dev
cgroup 868M 0 868M 0% /sys/fs/cgroup
/dev/mmcblk2p4 5.0G 5.9M 5.0G 1% /mnt/mmcblk2p4
/dev/mmcblk2p1 158M 147M 11M 94% /boot
/dev/mmcblk2p3 960M 5.7M 947M 1% /mnt/mmcblk2p3
注意启动分区 /boot
几乎快满了。
此时我又想到之前对比了自己编译的和官方编译的固件,有个别文件大小差异明显 (左官方,右自编译):
发现了什么?自己编译的固件大了14MB左右,而启动分区安装官方固件时仅剩11MB。
这时再看 uboot 日志,豁然开朗。
官方固件的 zImage,大小对上了
reading /zImage
40174080 bytes read in 1226 ms (31.3 MiB/s)
而这个是自编译固件写入 eMMC 后,明显少了将近4MB
reading /zImage
43327488 bytes read in 1321 ms (31.3 MiB/s)
解决方案
先制作好启动U盘,然后删除启动分区中不必要的文件。
先把 u-boot-*.bin
删除。
然后打开 uEnv.txt
,找到 FDT=
开头的行:
FDT=/dtb/amlogic/meson-gxl-s905l3b-m302a.dtb
说明用到了 /dtb/amlogic/meson-gxl-s905l3b-m302a.dtb
这个文件
那么可以删除 /dtb/amlogic/
中其他的dtb文件。
精简完成后插入U盘,启动进系统,再次安装到 eMMC 即可。