ophub / amlogic-s9xxx-armbian

Support for Armbian in Amlogic, Rockchip and Allwinner boxes. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk3568, rk3399, rk3328, h6, etc.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

所有的S905都不能写入emmc吗?

God-JohnDiamond opened this issue · comments

Describe the bug | 问题描述
所有的S905都不能写入emmc吗?
「我的设备是S905L 是带后缀的 可以刷emmc」

commented

已知的都不能

是缺什么数据吗 关于emmc的dtb还是什么的

晶晨搞GXBB(S905, S905-H)这代的时候把bootloader的位置定死在了eMMC用户区域(主线内核看到的mmcblk2)的第一个扇区起,这个位置和主流的分区格式(MBR和GPT)均冲突了。只要写MBR/GPT分区表,就会把bootloader损坏,砖机且无法启动。这么搞,是因为晶晨觉得自己搞出来的专有格式分区表(我的项目ampart可以读写这种分区表)给自己的原厂内核用就够了,完全没考虑到非安卓和非原厂内核的使用情景。

GXBB之后,GXM (S912) 和 GXL(S905X/L/D/W) 起, 他们把bootloader的位置改成了用户区域和启动区域均可以存放(主线内核看到的mmcblk2, mmcblk2boot0mmcblk2boot1),且是从第二个扇区开始存放,所以可以在eMMC上建立MBR分区表和GPT分区表了,这个仓库里的安装脚本就是在eMMC上创建MBR分区表来安装的,也因此只能在GXM/GXL之后的平台上安装。

但是,在GXBB上,安装到eMMC并非不可能(下面信息来自使用S905的小米盒子3C (MDZ-16-AA)):

[root@mi3 ~]# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mmcblk2      179:0    0  3.7G  0 disk 
└─mmcblk2p1  179:1    0  3.7G  0 part /
mmcblk2boot0 179:32   0    2M  1 disk 
mmcblk2boot1 179:64   0    2M  1 disk 
zram0        254:0    0  932M  0 disk [SWAP]
[root@mi3 ~]# cat /boot/extlinux/extlinux.conf 
LABEL   Arch Linux
LINUX   /boot/vmlinuz-linux-aarch64-flippy
INITRD  /boot/initramfs-linux-aarch64-flippy.img
FDT     /boot/dtbs/linux-aarch64-flippy/amlogic/meson-gxbb-p201.dtb
FDTOVERLAYS /boot/dtbs/overlays/meson-disable-ethernet-mac.dtbo /boot/dtbs/overlays/meson-gxbb-disable-usb1.dtbo
APPEND  blkdevparts=mmcblk2:-@1M(root) root=/dev/mmcblk2p1 rw audit=0

如你所见,内核可以通过命令行参数blkdevparts来直接声明分区,该参数的文档见kernel.org

然后,启动前环境,有几个不同的方案可以考虑:

  • 使用我的u-boot fork仓库源码,启用配置CONFIG_ENV_PARTITION,可以通过在u-boot的环境中这样声明一个与blkdevparts格式类似的变量,来规定分区:
    envparts_mmc1=-@1M(root)
    
    这个是我今天刚搞出来的u-boot分区支持,没有提交主线。上面信息来源的盒子就是这样启动的。
  • 在blkdevparts里多声明几个分区,存储内核等,启动前环境(主线u-boot也好,原厂u-boot也罢)直接从eMMC指定偏移读取内核等,可以参考我的博文
  • 用原厂u-boot。不使用blkdevparts,而是用打了我的这个patch,启用配置CONFIG_AMLOGIC_PARTITION的内核(这边的6.1.某个版本后就打了patch且启用了),设置内核命令行apt_blkdevs=mmcblk2来读取晶晨的私有分区表,再配合ampart来修改这个分区表。
  • 用主线u-boot,利用otg的USB gadget,或者直接原生网卡,从远程tftp服务器(可以是openwrt路由器)加载内核和dtb,然后直接挂载eMMC上的root

当然,上面所有的安装路线,都需要手操。我在这里只给出思路。

实际手操安装前,我建议你确定自己能在UEFI启动的x86-84设备上,使用efibootmgr手写启动项,不经安装向导,完成一次ArchLinux或者Debian的安装。我不希望被追问分区格式化之类的基础事项,如果你琢磨不透,直接放弃吧。。

你的盒子是CM211? 那么不是GXBB的S905。S905L是可以直接用MBR分区表安装的

commented

7Ji大佬的每个回复都是经典。资深报告。解释的明明白白,并且还给出解决办法。

感谢大佬的耐心解答,从根上把我的困惑解决了

晶晨搞GXBB(S905, S905-H)这代的时候把bootloader的位置定死在了eMMC用户区域(主线内核看到的mmcblk2)的第一个扇区起,这个位置和主流的分区格式(MBR和GPT)均冲突了。只要写MBR/GPT分区表,就会把bootloader损坏,砖机且无法启动。这么搞,是因为晶晨觉得自己搞出来的专有格式分区表(我的项目ampart可以读写这种分区表)给自己的原厂内核用就够了,完全没考虑到非安卓和非原厂内核的使用情景。

GXBB之后,GXM (S912) 和 GXL(S905X/L/D/W) 起, 他们把bootloader的位置改成了用户区域和启动区域均可以存放(主线内核看到的mmcblk2, mmcblk2boot0mmcblk2boot1),且是从第二个扇区开始存放,所以可以在eMMC上建立MBR分区表和GPT分区表了,这个仓库里的安装脚本就是在eMMC上创建MBR分区表来安装的,也因此只能在GXM/GXL之后的平台上安装。

但是,在GXBB上,安装到eMMC并非不可能(下面信息来自使用S905的小米盒子3C (MDZ-16-AA)):

[root@mi3 ~]# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mmcblk2      179:0    0  3.7G  0 disk 
└─mmcblk2p1  179:1    0  3.7G  0 part /
mmcblk2boot0 179:32   0    2M  1 disk 
mmcblk2boot1 179:64   0    2M  1 disk 
zram0        254:0    0  932M  0 disk [SWAP]
[root@mi3 ~]# cat /boot/extlinux/extlinux.conf 
LABEL   Arch Linux
LINUX   /boot/vmlinuz-linux-aarch64-flippy
INITRD  /boot/initramfs-linux-aarch64-flippy.img
FDT     /boot/dtbs/linux-aarch64-flippy/amlogic/meson-gxbb-p201.dtb
FDTOVERLAYS /boot/dtbs/overlays/meson-disable-ethernet-mac.dtbo /boot/dtbs/overlays/meson-gxbb-disable-usb1.dtbo
APPEND  blkdevparts=mmcblk2:-@1M(root) root=/dev/mmcblk2p1 rw audit=0

如你所见,内核可以通过命令行参数blkdevparts来直接声明分区,该参数的文档见kernel.org

然后,启动前环境,有几个不同的方案可以考虑:

  • 使用我的u-boot fork仓库源码,启用配置CONFIG_ENV_PARTITION,可以通过在u-boot的环境中这样声明一个与blkdevparts格式类似的变量,来规定分区:

    envparts_mmc1=-@1M(root)
    

    这个是我今天刚搞出来的u-boot分区支持,没有提交主线。上面信息来源的盒子就是这样启动的。

  • 在blkdevparts里多声明几个分区,存储内核等,启动前环境(主线u-boot也好,原厂u-boot也罢)直接从eMMC指定偏移读取内核等,可以参考我的博文

  • 用原厂u-boot。不使用blkdevparts,而是用打了我的这个patch,启用配置CONFIG_AMLOGIC_PARTITION的内核(这边的6.1.某个版本后就打了patch且启用了),设置内核命令行apt_blkdevs=mmcblk2来读取晶晨的私有分区表,再配合ampart来修改这个分区表。

  • 用主线u-boot,利用otg的USB gadget,或者直接原生网卡,从远程tftp服务器(可以是openwrt路由器)加载内核和dtb,然后直接挂载eMMC上的root

当然,上面所有的安装路线,都需要手操。我在这里只给出思路。

实际手操安装前,我建议你确定自己能在UEFI启动的x86-84设备上,使用efibootmgr手写启动项,不经安装向导,完成一次ArchLinux或者Debian的安装。我不希望被追问分区格式化之类的基础事项,如果你琢磨不透,直接放弃吧。。

太猛了,受教

commented

这个问题是可以解决的,第一扇区大部分都是0,没有意义。分区后,只要重新计算一下校验和即可。

晶晨搞GXBB(S905, S905-H)这代的时候把bootloader的位置定死在了eMMC用户区域(主线内核看到的mmcblk2)的第一个扇区起,这个位置和主流的分区格式(MBR和GPT)均冲突了。只要写MBR/GPT分区表,就会把bootloader损坏,砖机且无法启动。这么搞,是因为晶晨觉得自己搞出来的专有格式分区表(我的项目ampart可以读写这种分区表)给自己的原厂内核用就够了,完全没考虑到非安卓和非原厂内核的使用情景。

GXBB之后,GXM (S912) 和 GXL(S905X/L/D/W) 起, 他们把bootloader的位置改成了用户区域和启动区域均可以存放(主线内核看到的mmcblk2, mmcblk2boot0mmcblk2boot1),且是从第二个扇区开始存放,所以可以在eMMC上建立MBR分区表和GPT分区表了,这个仓库里的安装脚本就是在eMMC上创建MBR分区表来安装的,也因此只能在GXM/GXL之后的平台上安装。

但是,在GXBB上,安装到eMMC并非不可能(下面信息来自使用S905的小米盒子3C (MDZ-16-AA)):

[root@mi3 ~]# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mmcblk2      179:0    0  3.7G  0 disk 
└─mmcblk2p1  179:1    0  3.7G  0 part /
mmcblk2boot0 179:32   0    2M  1 disk 
mmcblk2boot1 179:64   0    2M  1 disk 
zram0        254:0    0  932M  0 disk [SWAP]
[root@mi3 ~]# cat /boot/extlinux/extlinux.conf 
LABEL   Arch Linux
LINUX   /boot/vmlinuz-linux-aarch64-flippy
INITRD  /boot/initramfs-linux-aarch64-flippy.img
FDT     /boot/dtbs/linux-aarch64-flippy/amlogic/meson-gxbb-p201.dtb
FDTOVERLAYS /boot/dtbs/overlays/meson-disable-ethernet-mac.dtbo /boot/dtbs/overlays/meson-gxbb-disable-usb1.dtbo
APPEND  blkdevparts=mmcblk2:-@1M(root) root=/dev/mmcblk2p1 rw audit=0

如你所见,内核可以通过命令行参数blkdevparts来直接声明分区,该参数的文档见kernel.org

然后,启动前环境,有几个不同的方案可以考虑:

  • 使用我的u-boot fork仓库源码,启用配置CONFIG_ENV_PARTITION,可以通过在u-boot的环境中这样声明一个与blkdevparts格式类似的变量,来规定分区:

    envparts_mmc1=-@1M(root)
    

    这个是我今天刚搞出来的u-boot分区支持,没有提交主线。上面信息来源的盒子就是这样启动的。

  • 在blkdevparts里多声明几个分区,存储内核等,启动前环境(主线u-boot也好,原厂u-boot也罢)直接从eMMC指定偏移读取内核等,可以参考我的博文

  • 用原厂u-boot。不使用blkdevparts,而是用打了我的这个patch,启用配置CONFIG_AMLOGIC_PARTITION的内核(这边的6.1.某个版本后就打了patch且启用了),设置内核命令行apt_blkdevs=mmcblk2来读取晶晨的私有分区表,再配合ampart来修改这个分区表。

  • 用主线u-boot,利用otg的USB gadget,或者直接原生网卡,从远程tftp服务器(可以是openwrt路由器)加载内核和dtb,然后直接挂载eMMC上的root

当然,上面所有的安装路线,都需要手操。我在这里只给出思路。

实际手操安装前,我建议你确定自己能在UEFI启动的x86-84设备上,使用efibootmgr手写启动项,不经安装向导,完成一次ArchLinux或者Debian的安装。我不希望被追问分区格式化之类的基础事项,如果你琢磨不透,直接放弃吧。。

@cc66

这个问题是可以解决的,第一扇区大部分都是0,没有意义。分区后,只要重新计算一下校验和即可。

更新header内,0x50起的,0x10长的对header的sha256sum,可行,但这么搞,没有现成工具很容易算错,多次分区间如果忘记更新也很容易造成惨痛结果。所以我直接没写。

已知的都不能

是 s905x3 也不能写入 emmc 么,我写完启动不了

已知的都不能

是 s905x3 也不能写入 emmc 么,我写完启动不了

无关问题,开个新issue吧。这里说的是严格的无后缀S905

N1 也刷不了么

N1 也刷不了么

N1 是 GXL family 的 S905D

这里说的有问题的是 GXBB family 的 S905

我写了好几次 拔掉u盘重启都是进入盒子的recovery 证明没有写入到emmc里面

大佬好,我的盒子是BestTV R330L, s905l.已用burning tool刷安卓6.0。现在的问题是无法通过av孔复位启动TF卡或U盘, 也就是无法使用Armbian系统了(目前 s905只能在 TF/SD/USB 中使用), 目前burning tool能通过usb链接到盒子,并能烧写,有没有一个可以通过burning tool 烧写的镜像文件或者有什么方法能让盒子从U盘、TF卡启动?
谢谢!

commented

看文档里写的

N1 也刷不了么

怎么样了,到底能不能刷入EMMC N1

N1 也刷不了么

怎么样了,到底能不能刷入EMMC N1

都不仔细看文的吗?上面说了这里讨论的是不带后缀的S905,N1 是S905D,可以刷入EMMC。