所有的S905都不能写入emmc吗?
God-JohnDiamond opened this issue · comments
Describe the bug | 问题描述
所有的S905都不能写入emmc吗?
「我的设备是S905L 是带后缀的 可以刷emmc」
已知的都不能
是缺什么数据吗 关于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
, mmcblk2boot0
和mmcblk2boot1
),且是从第二个扇区开始存放,所以可以在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
格式类似的变量,来规定分区:这个是我今天刚搞出来的u-boot分区支持,没有提交主线。上面信息来源的盒子就是这样启动的。envparts_mmc1=-@1M(root)
- 在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分区表安装的
7Ji大佬的每个回复都是经典。资深报告。解释的明明白白,并且还给出解决办法。
感谢大佬的耐心解答,从根上把我的困惑解决了
晶晨搞GXBB(S905, S905-H)这代的时候把bootloader的位置定死在了eMMC用户区域(主线内核看到的
mmcblk2
)的第一个扇区起,这个位置和主流的分区格式(MBR和GPT)均冲突了。只要写MBR/GPT分区表,就会把bootloader损坏,砖机且无法启动。这么搞,是因为晶晨觉得自己搞出来的专有格式分区表(我的项目ampart可以读写这种分区表)给自己的原厂内核用就够了,完全没考虑到非安卓和非原厂内核的使用情景。GXBB之后,GXM (S912) 和 GXL(S905X/L/D/W) 起, 他们把bootloader的位置改成了用户区域和启动区域均可以存放(主线内核看到的
mmcblk2
,mmcblk2boot0
和mmcblk2boot1
),且是从第二个扇区开始存放,所以可以在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的安装。我不希望被追问分区格式化之类的基础事项,如果你琢磨不透,直接放弃吧。。
太猛了,受教
这个问题是可以解决的,第一扇区大部分都是0,没有意义。分区后,只要重新计算一下校验和即可。
晶晨搞GXBB(S905, S905-H)这代的时候把bootloader的位置定死在了eMMC用户区域(主线内核看到的
mmcblk2
)的第一个扇区起,这个位置和主流的分区格式(MBR和GPT)均冲突了。只要写MBR/GPT分区表,就会把bootloader损坏,砖机且无法启动。这么搞,是因为晶晨觉得自己搞出来的专有格式分区表(我的项目ampart可以读写这种分区表)给自己的原厂内核用就够了,完全没考虑到非安卓和非原厂内核的使用情景。GXBB之后,GXM (S912) 和 GXL(S905X/L/D/W) 起, 他们把bootloader的位置改成了用户区域和启动区域均可以存放(主线内核看到的
mmcblk2
,mmcblk2boot0
和mmcblk2boot1
),且是从第二个扇区开始存放,所以可以在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的安装。我不希望被追问分区格式化之类的基础事项,如果你琢磨不透,直接放弃吧。。
这个问题是可以解决的,第一扇区大部分都是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卡启动?
谢谢!
看文档里写的
N1 也刷不了么
怎么样了,到底能不能刷入EMMC N1
N1 也刷不了么
怎么样了,到底能不能刷入EMMC N1
都不仔细看文的吗?上面说了这里讨论的是不带后缀的S905,N1 是S905D,可以刷入EMMC。
写入不了emmc那就u盘启动也能用,但文档似乎并没有提及如何使用u盘启动,直接刷系统到u盘就行了,不用安装吗?
拿写镜像软件把img写入U盘即可,首页有工具说明
玩客云(ws1608)就是不行的了?(非玩客云pro)