在 Armbian 和 LibreELEC 换用主线内核之后就不能识别到 Android 分区了。可以解包 dtb 或用 ampart 查看 Android 各分区的 offset,然后根据 offset 用 losetup 映射成块设备,再挂载这个块设备。

先用 ampart 查看分区表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
LibreELEC:~ # ./ampart-v1.3-aarch64-static /dev/mmcblk1

EPT report: 13 partitions in the table:
===================================================================================
ID| name | offset|( human)| size|( human)| masks
-----------------------------------------------------------------------------------
0: bootloader 0 ( 0.00B) 400000 ( 4.00M) 0
(GAP) 2000000 ( 32.00M)
1: reserved 2400000 ( 36.00M) 4000000 ( 64.00M) 0
(GAP) 800000 ( 8.00M)
2: cache 6c00000 ( 108.00M) 20000000 ( 512.00M) 2
(GAP) 800000 ( 8.00M)
3: env 27400000 ( 628.00M) 800000 ( 8.00M) 0
(GAP) 800000 ( 8.00M)
4: logo 28400000 ( 644.00M) 2000000 ( 32.00M) 1
(GAP) 800000 ( 8.00M)
5: recovery 2ac00000 ( 684.00M) 2000000 ( 32.00M) 1
(GAP) 800000 ( 8.00M)
6: rsv 2d400000 ( 724.00M) 800000 ( 8.00M) 1
(GAP) 800000 ( 8.00M)
7: tee 2e400000 ( 740.00M) 800000 ( 8.00M) 1
(GAP) 800000 ( 8.00M)
8: crypt 2f400000 ( 756.00M) 2000000 ( 32.00M) 1
(GAP) 800000 ( 8.00M)
9: misc 31c00000 ( 796.00M) 2000000 ( 32.00M) 1
(GAP) 800000 ( 8.00M)
10: boot 34400000 ( 836.00M) 2000000 ( 32.00M) 1
(GAP) 800000 ( 8.00M)
11: system 36c00000 ( 876.00M) 40000000 (1024.00M) 1
(GAP) 800000 ( 8.00M)
12: data 77400000 ( 1.86G) 32ca00000 ( 12.70G) 4
===================================================================================

可以看到 data 分区的 offset 为 77400000,然后执行:

1
2
LibreELEC:~ # losetup --find --show --offset 0x77400000 /dev/mmcblk1
/dev/loop1

挂载 /dev/loop1

1
LibreELEC:~ # mount -o rw,suid,acl,noatime,nodiratime /dev/loop1 /data

system 分区也是同理:

1
2
3
LibreELEC:~ # losetup --find --show --offset 0x36c00000 /dev/mmcblk1
/dev/loop2
LibreELEC:~ # mount -o ro /dev/loop2 /system

开机挂载脚本:

/storage/.config/autostart.sh
1
2
3
4
5
6
7
8
9
10
#!/bin/sh

# mount
EMMCDEV="/dev/mmcblk1"

SYSTEMLOOP="$(losetup --find --show --offset 0x36c00000 $EMMCDEV)"
mount -o ro $SYSTEMLOOP /system

DATALOOP="$(losetup --find --show --offset 0x77400000 $EMMCDEV)"
mount -o rw,suid,acl,noatime,nodiratime $DATALOOP /data

PS:按理说下面这两条命令应该就行了,但是我的会报错:mount: mounting /dev/mmcblk1 on /data failed: Invalid argument

1
2
3
4
LibreELEC:~ # mount -o ro,loop,offset=0x36c00000,sizelimit=0x40000000 /dev/mmcblk1 /system
mount: mounting /dev/mmcblk1 on /system failed: Invalid argument
LibreELEC:~ # mount -o rw,suid,acl,noatime,nodiratime,loop,offset=0x77400000 /dev/mmcblk1 /data
mount: mounting /dev/mmcblk1 on /data failed: Invalid argument

PS2:LibreELEC 的 / 下没有 data system opt 目录,需要用 unsquashfs 解包优盘的 SYSTEM 后创建,再用 mksquashfs -comp zstd squashfs-root/ SYSTEM 打包回去。(压缩方式可以用 file SYSTEM 查看。)改完就可以用 Entware 和 Termux 啦。