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

CM311 写入EMMC 后怎样再从U盘启动 #565

Closed
wbchn opened this issue Sep 16, 2022 · 18 comments
Closed

CM311 写入EMMC 后怎样再从U盘启动 #565

wbchn opened this issue Sep 16, 2022 · 18 comments
Labels
documentation Improvements or additions to documentation

Comments

@wbchn
Copy link

wbchn commented Sep 16, 2022

Describe the bug
CM311 写入EMMC后,无法从U盘启动U盘中的系统。
在过往的N1设备中插入U盘后会优先从U盘启动进入U盘中的Armbian。

可能我没有找到正确的操作方法,麻烦O大跟大家帮忙看一下,先谢谢了。

To Reproduce
Steps to reproduce the behavior:

  1. CM311-1A(2g+16g) 按照教程写入EMMC(btrfs)后,可拔掉U盘正常使用。
  2. 断电后(poweroff 或直接按电源断电两种均试过)插入U盘
  3. 再次上电启动后仍显示系统是在EMMC上,未从U盘启动。

Expected behavior
希望了解怎样插入U盘后从U盘的Armbian系统启动,以避免EMMC中系统损坏(当我提这个issue时已经发生了)
时,不用线刷回Android固件,再重新安装Armbian。

Screenshots
这是插着U盘启动后的一些信息

# /boot 显示仍是 emmc
-> % lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda            8:0    1   7.5G  0 disk
├─sda1         8:1    1   255M  0 part
└─sda2         8:2    1   2.5G  0 part
mmcblk2      179:0    0  14.6G  0 disk
├─mmcblk2p1  179:1    0   255M  0 part /boot
└─mmcblk2p2  179:2    0  13.8G  0 part /var/lib/docker/btrfs
                                       /var/log.hdd
                                       /
mmcblk2boot0 179:32   0     4M  1 disk
mmcblk2boot1 179:64   0     4M  1 disk
zram0        254:0    0 977.1M  0 disk [SWAP]
zram1        254:1    0    50M  0 disk /var/log
zram2        254:2    0 977.1M  0 disk /var/tmp

# emmc 上 uEnv.txt,其中 /dev/mmcblk2p2: LABEL="ROOTFS_EMMC" UUID="037cdef8-a497-4a29-bdda-becce827cdc9"
-> % cat /boot/uEnv.txt
LINUX=/zImage
INITRD=/uInitrd
FDT=/dtb/amlogic/meson-g12a-s905l3a-e900v22c.dtb
APPEND=root=UUID=037cdef8-a497-4a29-bdda-becce827cdc9 rootflags=compress=zstd:6 rootfstype=btrfs console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1

# U盘上 uEnv.txt,其中 /dev/sda2: LABEL="ROOTFS" UUID="2367c8e7-c17c-4dab-a1ee-cfd392ba50b6"
-> % cat /mnt/uEnv.txt
LINUX=/zImage
INITRD=/uInitrd
FDT=/dtb/amlogic/meson-g12a-s905l3a-e900v22c.dtb
APPEND=root=UUID=2367c8e7-c17c-4dab-a1ee-cfd392ba50b6 rootflags=data=writeback rw rootfstype=ext4 console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1

Armbian Version

  • Image: Armbian_22.11.0_Aml_s905l3a_jammy_5.10.142_server_2022.09.13.img
  • Kernel Version: 5.15 (armbian-update 升级的)
  • Release: jammy
  • Edition: server

Device (please complete the following information):

  • SOC: S095x3
  • Brand: CM311-1A(2g+16g)

查询到的其他信息,未成功
参考1,我的是btrfs,方法1未起到作用 link

8.1 我想重置(重装系统),怎么搞?
有两种,取决于你选择的分区格式(btrfs选择1,ext4选择2)
1.直接启动
插入写好系统的u盘(参考步骤2.2),哪个口都可以 。
这样就会自动启动到u盘,再重复步骤2.2,比较方便。
4.格式化boot分区
警告:风险很大!请fsck之前再三确认路径中有没有“boot”字样!比如/dev/mmcblk1boot1
会变砖!我试过,由于无法正常init(bootloader),死活刷不了安卓救砖系统包,卡在4%!
很重要!很重要!
以root执行以下命令:
mkfs.ext4 /dev/mmcblk1p1

参考2,来自恩山N1的帖子中

/dev/data 是安装armbain时候生成的一个虚拟的设备是从eMMC上划出来的一个区域,大约4.1GB左右,也就是以前安卓系统的 /data 分区。
你要重装系统的之前,用 mkfs.ext4  /dev/data 执行一下相当于把这块区域重新整形了一下(格式化),自然,里面所有数据也就都消失了。
然后你执行 /root/install.sh 的时候,其实是把U盘里的系统复制到eMMC里面来了,并在uBoot分区里写入了
启动顺序: U盘-->eMMC-->安卓这样,既可以从U盘启动,也可以拔掉U盘后从eMMC里启动

@ophub
Copy link
Owner

ophub commented Sep 16, 2022

重新下载固件,重新使用这个工具刷写镜像至USB: Rufus
如果USB系统正常,应该是可以直接从USB启动的

@wbchn
Copy link
Author

wbchn commented Sep 16, 2022

好的,已经在下载新版本固件了。

我用的是 Linux跟MacOS,Rufus 没有对应的支持。现在我是用dd直接写入的,上次安装也是相同的方法写入的。请问dd跟 Rufus 写入有区别么,会造成从USB启动的问题么?

@ophub
Copy link
Owner

ophub commented Sep 16, 2022

MAC用这个写:balenaEtcher

@xcray
Copy link

xcray commented Sep 16, 2022

自从adb执行reboot update后一直都是插U盘就从U盘启、不插U盘就从emmc启,怀疑是安卓固件的bootloader决定的?我没刷所谓的主线uboot(刷过不好使只好放弃)。

不执行poweroff直接关电源的做法要不得啊,没有任何理由支持这么干吧?

@FallenDawn
Copy link

windows下用rufus比balenaEtcher好吗?

@ophub
Copy link
Owner

ophub commented Sep 16, 2022

我日常2个都用,但是有时balenaEtcher刷的u盘无法启动,使用rufus却可以。
在f大的群里,也有不少人反应需要使用rufus刷u盘才可以。

@yuan6975
Copy link

你可以这样 把u盘里面boot目录boot.cmd boot.scr文件直接替换到emmc的boot目录下然后插U盘就会优先引导启动u盘下的系统

@FallenDawn
Copy link

然而coreelec 目录下只有 aml_autoscript 换这个行不

顺便问下f大的群可以进么

@ophub
Copy link
Owner

ophub commented Sep 16, 2022

自由进,从他的仓库首页有链接。

@wbchn
Copy link
Author

wbchn commented Sep 16, 2022

@ophub @xcray 重新刷写了一次。

在安装到EMMC时,大概是上次使用了 armbian-install no,致使uboot(UBOOT_OVERLOAD: u-boot-e900v22c.bin) 未写入,使用的是原android固件中的uboot,未用到armbian的uboot(启动顺序: U盘>EMMC)。

我再继续使用测试下。

@wbchn
Copy link
Author

wbchn commented Sep 16, 2022

你可以这样 把u盘里面boot目录boot.cmd boot.scr文件直接替换到emmc的boot目录下然后插U盘就会优先引导启动u盘下的系统

谢谢,我检查了下EMMC系统的 /boot 下已经包含了这几个文件,我遇到的问题目前怀疑是uboot没写入 mmcblk2

> df -Th /boot
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/mmcblk2p1 vfat  255M  100M  156M  39% /boot

> ls -al /boot/boot*
-rwxr-xr-x 1 root root 38518 Sep 16 13:29 /boot/boot.bmp
-rwxr-xr-x 1 root root   953 Sep 16 13:29 /boot/boot.cmd
-rwxr-xr-x 1 root root   571 Sep 16 13:29 /boot/boot.ini
-rwxr-xr-x 1 root root     0 Sep 16 13:29 /boot/boot.ini.out
-rwxr-xr-x 1 root root  1025 Sep 16 13:29 /boot/boot.scr

@yuan6975
Copy link

都说了是替换 你为什么就不打开文件看看内容呢?

@wbchn
Copy link
Author

wbchn commented Sep 16, 2022

@yuan6975 sorry, 因为再启动没问题,只看了文件存在,大意了。

的确对比了下这两个文件,emmc系统中去掉了 for devtype in "usb mmc"usb。下次遇到问题我覆盖了试试看。

给大佬递茶 🐶

@ophub ophub closed this as completed Sep 16, 2022
@FallenDawn
Copy link

搞定了!
加这几行就行了 不用担心什么bootloader 位移什么的 适用于所有系统
setenv loadaddr "0x44000000"
setenv l_mmc "0 1 2 3"
usb start
for devtype in "usb mmc" ; do

@wang25669
Copy link

wang25669 commented Nov 22, 2022

搞定了! 加这几行就行了 不用担心什么bootloader 位移什么的 适用于所有系统 setenv loadaddr "0x44000000" setenv l_mmc "0 1 2 3" usb start for devtype in "usb mmc" ; do

这几行插在哪个文件?大佬
我现在遇到的问题和楼主一样,翻遍了issue,虽然O大一再说默认就可以,可是我这边一直都不行 @ophub
我的实际情况是刷了好多次
CM311-1a YST,刷了安卓,用adb reboot update重启,进入u盘上的armbian,然后armbian-install ,完成安装,
然后一天左右root密码就会被改/-_-||,所以想用U盘直接重刷,试过下载最新的镜像重新rufus写U盘再插上开机,进的都是emmc上的系统,没办法只能每次都刷回安卓重头再来

@ophub ophub added the documentation Improvements or additions to documentation label Nov 22, 2022
@wbchn
Copy link
Author

wbchn commented Nov 23, 2022

搞定了! 加这几行就行了 不用担心什么bootloader 位移什么的 适用于所有系统 setenv loadaddr "0x44000000" setenv l_mmc "0 1 2 3" usb start for devtype in "usb mmc" ; do

这几行插在哪个文件?大佬 我现在遇到的问题和楼主一样,翻遍了issue,虽然O大一再说默认就可以,可是我这边一直都不行 @ophub 我的实际情况是刷了好多次 CM311-1a YST,刷了安卓,用adb reboot update重启,进入u盘上的armbian,然后armbian-install ,完成安装, 然后一天左右root密码就会被改/-_-||,所以想用U盘直接重刷,试过下载最新的镜像重新rufus写U盘再插上开机,进的都是emmc上的系统,没办法只能每次都刷回安卓重头再来

参见上面兄弟发的:

你可以这样 把u盘里面boot目录boot.cmd boot.scr文件直接替换到emmc的boot目录下然后插U盘就会优先引导启动u盘下的系统

例如默认的:

$ head /boot/boot.cmd
echo "Start AMLOGIC mainline U-boot"
if printenv bootfromsd; then exit; fi;
setenv loadaddr "0x44000000"
setenv devtype "mmc"
setenv l_mmc "2 1 0"
for devnum in ${l_mmc} ; do

@wang25669
Copy link

参见上面兄弟发的:

你可以这样 把u盘里面boot目录boot.cmd boot.scr文件直接替换到emmc的boot目录下然后插U盘就会优先引导启动u盘下的系统

例如默认的:

$ head /boot/boot.cmd
echo "Start AMLOGIC mainline U-boot"
if printenv bootfromsd; then exit; fi;
setenv loadaddr "0x44000000"
setenv devtype "mmc"
setenv l_mmc "2 1 0"
for devnum in ${l_mmc} ; do

没用,替换了boot.cmd和boot.scr俩文件,还是从emmc启动
尝试添加usb start这一句,倒是能从usb启动了,可也只能从usb启动。。。拔了U盘就不启动了 /-_-||,

@wbchn
Copy link
Author

wbchn commented Nov 23, 2022

没用,替换了boot.cmd和boot.scr俩文件,还是从emmc启动 尝试添加usb start这一句,倒是能从usb启动了,可也只能从usb启动。。。拔了U盘就不启动了 /-_-||,

参见安装脚本,替换回原来的文件, 理论上会遍历完 usb后再去emmc上去找:
https://github.com/ophub/amlogic-s9xxx-armbian/blob/main/build-armbian/common-files/rootfs/usr/sbin/armbian-install#L435

这个issue 已经关闭了,大佬们可能没注意,建议再开一个issue,补充信息来讨论这个新的问题(附上 usb: /boot/boot.cmd 和 emmc: /boot/boot.cmd)。

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
Projects
None yet
Development

No branches or pull requests

6 participants