Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
God-JohnDiamond opened this issue Mar 15, 2023 · 18 comments
Closed

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

God-JohnDiamond opened this issue Mar 15, 2023 · 18 comments
Labels
documentation Improvements or additions to documentation essence Recommended essence posts

Comments

@God-JohnDiamond
Copy link

God-JohnDiamond commented Mar 15, 2023

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

@ophub
Copy link
Owner

ophub commented Mar 15, 2023

已知的都不能

@God-JohnDiamond
Copy link
Author

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

@7Ji
Copy link
Contributor

7Ji commented Mar 15, 2023

晶晨搞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的安装。我不希望被追问分区格式化之类的基础事项,如果你琢磨不透,直接放弃吧。。

@7Ji
Copy link
Contributor

7Ji commented Mar 15, 2023

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

@ophub
Copy link
Owner

ophub commented Mar 15, 2023

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

@ophub ophub added documentation Improvements or additions to documentation essence Recommended essence posts labels Mar 15, 2023
@God-JohnDiamond
Copy link
Author

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

@roseybear098765
Copy link

晶晨搞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
Copy link

cc66 commented Mar 17, 2023

这个问题是可以解决的,第一扇区大部分都是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的安装。我不希望被追问分区格式化之类的基础事项,如果你琢磨不透,直接放弃吧。。

@7Ji
Copy link
Contributor

7Ji commented Mar 17, 2023

@cc66

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

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

@ophub ophub closed this as completed Mar 19, 2023
@fanybook
Copy link

已知的都不能

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

@7Ji
Copy link
Contributor

7Ji commented Mar 21, 2023

已知的都不能

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

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

@luodaoyi
Copy link

N1 也刷不了么

@7Ji
Copy link
Contributor

7Ji commented Apr 29, 2023

N1 也刷不了么

N1 是 GXL family 的 S905D

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

@luodaoyi
Copy link

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

@cnteddybear
Copy link

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

@ophub
Copy link
Owner

ophub commented Jul 8, 2023

看文档里写的

@longfei12k
Copy link

N1 也刷不了么

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

@3nyaww
Copy link

3nyaww commented Mar 1, 2024

N1 也刷不了么

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation essence Recommended essence posts
Projects
None yet
Development

No branches or pull requests

10 participants