ophub/amlogic-s9xxx-armbian

Ugoos X3 BL有锁版 支持使用 Mainline U-boot

livelier opened this issue · 6 comments

目前已测试此版主线支持的内核版本有 5.15.81 6.0.11,仅测了支持情况,其他问题及其他内核版本未测试。
欢迎手里有 X3 并且是有BL锁的盒子,来测试,验证是否为个例支持。

方法1

  • 第1步 更新 x3 安卓固件到 0.4.2 或 0.5.4 二选一。注意BL无锁版,不要尝试,会锁掉BL,并且不能降级!

  • 第2步 写入 eMMC 不使用 Mainline u-boot

替换 u-boot 文件

/boot/u-boot.emmc
/boot/u-boot.ext
/boot/u-boot-ugoos-x3.bin
/usr/lib/u-boot/ugoos-x3-u-boot.bin.sd.bin

写入 eMMC

armbian-install -m no -a yes ( 写入完成后,已经可以正常使用 eMMC )

  • 第3步 写入 Mainline u-boot
MYBOX_UBOOT="/usr/lib/u-boot/ugoos-x3-u-boot.bin.sd.bin"
DEV_EMMC="/dev/mmcblk2"
dd if=${MYBOX_UBOOT} of="${DEV_EMMC}" conv=fsync bs=1 count=444
dd if=${MYBOX_UBOOT} of="${DEV_EMMC}" conv=fsync bs=512 skip=1 seek=1

方法2

  • 第1步 修改 /usr/sbin/armbian-install 在353-354行之间增加:
    elif [[ "${FDTFILE}" == "meson-sm1-ugoos-x3.dtb" ]]; then
        BLANK1="4"
        BOOT="256"
        BLANK2="0"

BLANK1="108" # Tencent Aurora 3Pro: Must skip [ 108 MiB ]
BOOT="512" # A total of [ 768 MiB ] can be used in this block, gave up [ 768-512=256 MiB ]
BLANK2="562" # Can set the rootfs partition after [ 1182 MiB ] of the total disk, [ 1182-108-512=562 MiB ]
else
BLANK1="68"
BOOT="256" # S905x3: A total of [ 1120 MiB ] can be used in this block, and the remaining [ 864 MiB ] can be used.

替换 u-boot 文件

/boot/u-boot.emmc
/boot/u-boot.ext
/boot/u-boot-ugoos-x3.bin
/usr/lib/u-boot/ugoos-x3-u-boot.bin.sd.bin
  • 第2步 写入 eMMCMainline u-boot

写入 eMMC
armbian-install -m yes -a no

附件

Mainline U-boot 下载链接
ugoos-x3-mainline-u-boot

Android Firmware BL有锁版 下载链接
ugoos-x3-android-firmware-0.4.2
ugoos-x3-android-firmware-0.5.4

BL无锁版x3未做测试,目前已知固件版本 0.3.9 ~ 0.5.4 都是BL有锁版。
BL无锁版x3恢复安卓,建议使用原有BL无锁的固件版本。

ophub commented

安卓固件你有没,提供个下载链接。

使用 ampart 工具是固定跳过 117MB 后都可以使用,不分设备都一样。

7Ji commented

使用主线后,保留的空间还能够减少到多少,未测试

使用 ampart 工具是固定跳过 117MB 后都可以使用,不分设备都一样。

用主线的话可以压榨更多空间,哪怕非主线下data::-1:4这个快照实际上也有比117MiB起更多的空间(4MiB+32MiB, 100MiB+16MiB,以及其他重要分区内的无数据部分,比如reserved分区内0x480000后的预留空位,bootloader中的实际数据结尾后)(小米设备是例外,小米设备分区间预留0B,需要配合ampart--gap-reserved 0, --gap-partition 0参数且即使原厂bootloader也能拉到69MiB)。当然117MiB确实是任何设备上都能保证连续分区安全的最小起始点。

SM1/S905X3对应的bootloader在基本保持默认的uboot kconfig的情况下以约763KiB的大小打出来的u-boot.bin在打包成bootloader后最多1.5MiB(我手头的HK1Box是1.5MiB,BPi M5是1.2MiB),所以实际上可以调整到以2MiB作为分区起始点(fdisk下是以第4096个扇区作为分区开始点)而完全没有问题(如果不追求对齐到1MiB可以拉到更靠前),并且约1.5MiB后的512KiB如果不分区的话也可以用来存放env而不浪费,u-boot编译时设置env存储在mmc设备2分区0,偏移0x180000,大小0x80000就好,以后编辑启动环境就比重新编译简单多了

[root@hk17ji ~]# fdisk -l /dev/mmcblk2
Disk /dev/mmcblk2: 116.48 GiB, 125069950976 bytes, 244277248 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd2cac74f

Device         Boot Start       End   Sectors   Size Id Type
/dev/mmcblk2p1       4096 244277247 244273152 116.5G 83 Linux
[root@hk17ji ~]# cat /etc/fw_env.config 
/dev/mmcblk2    0x180000        0x80000
[root@hk17ji ~]# fw_printenv bootcmd
bootcmd=sysboot mmc 2 ext2 0x8000000 /boot/extlinux/extlinux.conf

其实还有个挺有用的内核选项CONFIG_CMDLINE_PARTITION,自己编译内核的话可以打开。kernel.org有对应文档,用安卓bootloader的话可以整,一般设备用不到所以没有必要。可以直接在内核命令行上手动对块设备划定分区,而不在块设备里保存任何分区表,这样就可以超过MBR的四分区上限且不用因扩展分区而浪费空间,而不动用比较危险的GPT(Amlogic的bootloader的范围很明显和GPT重叠了所以是不可能用的),把边边角角的小空间全给划分。同时,在保有EPT分区表的情况下从eMMC上启动主线内核,并且让任意多主线/非主线内核的系统和安卓在eMMC上共存也就变得可行了。

@ophub o大,固件下载链接已更新。

@7Ji 感谢 7大 详尽讲解。已测试,此版主线在x3盒子上最小起点为 4M

root@armbian:~# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mmcblk2      179:0    0 57.9G  0 disk
├─mmcblk2p1  179:1    0  255M  0 part /boot
└─mmcblk2p2  179:2    0 57.7G  0 part /var/log.hdd
ophub commented

4 M就是极限了,前4m写u-boot

刚好主线的ENV也写在前4M内😂

Ничего не понял! Но мне очень нужно... Объясните, пожалуйста!