7Ji / amlogic-s9xxx-archlinuxarm

ArchLinux ARM for Amlogic s9xxx tv box.
GNU General Public License v3.0
68 stars 13 forks source link

写入设备emmc的boot分区内容可以直接复制U盘boot么 #6

Closed langyxxl closed 1 year ago

langyxxl commented 1 year ago

我按照https://7ji.github.io/embedded/2022/11/08/alarm-install.html#extra-partitioning-of-emmc--%E7%BB%99emmc%E5%88%86%E5%8C%BA 安装好之后,唯独看https://7ji.github.io/embedded/2022/11/11/amlogic-booting.html#setups--%E5%AE%89%E8%A3%85%E6%96%B9%E6%B3%95 决定不了/boot分区里的内容

可以图省事,把U盘的boot分区内容直接复制到emmc的boot分区么 emmc上也是一个fat32的boot和ext4的root

我想u盘能启动,那么u盘的boot分区内容是对的,那把boot分区复制到emmc那只要改一下root=UUID= 是不是就可以了

7Ji commented 1 year ago

首先/etc/fstab也是一定要更新的 你现在eMMC上的bootloader是原厂的还是后写的带主线u-boot的?如果是主线的话,默认的启动参数会逐个尝试mmc设备,所以扔过去是可以的,但是sd和usb在eMMC前,测试可能会有点蛋疼 如果是原厂的话,bootcmd是直接写死加载某分区的某文件吗?如果写死的话肯定是不行的,如果是逐个尝试mmc设备的话那么是可以的 最好能画个启动流程示意图写你的启动流程,因为我写的可能的启动流程太多了。 我自己的盒子,都是带主线u-boot的bootloader写在emmc,然后一条写死的bootcmd直接指定启动设备,因为嫌弃逐个尝试浪费时间。像我这样的话,外面搬到eMMC就是一条rsync整个root克隆一遍,再把sysboot和/etc/fstab的配置更新一下。

langyxxl commented 1 year ago

我是魔百和CM311-1a YST的盒子,没有主线u-boot支持,只有原厂的。

刚测试了一下直接把boot分区的内容拷贝过去,果然启动不起来。只能放弃了

7Ji commented 1 year ago

是盒子整个启动不起来还是单纯进不了eMMC系统?如果是后者的话可以调整一下启动参数和启动脚本

7Ji commented 1 year ago

CM311-1a-YST和UNT403A貌似互为克隆?我今天刚到手一个UNT403A的盒子,等我折腾下主线bootloader

langyxxl commented 1 year ago

单纯进不去emmc系统,但是插上u盘,可以自动进入emmc系统,并且生效的内核参数是emmc boot分区的extlinux/extlinux.conf中设置的配置,uEnv.txt中的内核参数不起作用。

我一开始只在uEnv.txt中设置audit=0,结果启动起来还是一直打audit log,后来设置在emmc的extlinux/extlinux.conf里面就不打audit log了

貌似从现象看,是得借助u盘的启动过程来启动emmc

7Ji commented 1 year ago

用的是extlinux的话,那就是主线u-boot作为payload被原厂bootloader加载了,那设置一条从emmc加载u-boot 的bootcmd就可以无U盘启动了

系统内

fw_setenv bootcmd 'fatload mmc 1 0x1000000 u-boot.ext; go 0x1000000'

需要的/etc/fw_env.config应该是下面这样

/dev/mmcblk2 ENV区偏移 0x10000

其中env偏移你要用ampart看mmcblk2上的EPT

langyxxl commented 1 year ago
截屏2023-02-04 15 15 32

测试了一下,拔掉u盘还是没办法直接从emmc启动,插上u盘之后变成直接从u盘启动了

7Ji commented 1 year ago

emmc上的boot分区是/dev/mmcblk2p1吗,因为fatload mmc 1 0x1000000 u-boot.ext这里我省略了分区号,mmc 1默认指到mmc设备1分区1,如果是其他分区的话要明确写明1:2 1:3这个样子

7Ji commented 1 year ago

哦,还想到个问题,aml的u-boot的文件系统判断逻辑很扯淡,会先读分区表里面的标识。如果你是用fdisk分区的,没有加FAT-16的那个类型,aml的u-boot的fatload命令会直接当作不是fat分区放弃。

langyxxl commented 1 year ago
截屏2023-02-04 15 52 44 截屏2023-02-04 15 54 10

试了一下改成FAT-16,还是一样,拔掉u盘还是没办法直接从emmc启动,插上u盘之后变成直接从u盘启动了

7Ji commented 1 year ago
=> ls mmc 1
unable to select a mode : -110
** Bad device specification mmc 1 **
Couldn't find partition mmc 1

我可能发现问题所在了,你是不是用的e900v22c的u-boot? 这个u-boot在我的UNT403A上无法设置mmc1(eMMC)的速度,所以读取不了文件。你在系统里用的是什么DTB?有自己拆包修改过eMMC频率吗?我的盒子不改频率直接没法IO到eMMC。u-boot除了改eMMC应该也要改别的东西。我适配一下能读eMMC的主线u-boot

langyxxl commented 1 year ago

非常感谢,我把env里面的恢复成出厂,bootcmd=run start_autoscript; run storeboot,然后设置fat16,就可以成功自动从emmc启动了 emmc的boot分区内容就是u盘的boot分区内容拷贝过来

谢谢啦

langyxxl commented 1 year ago
截屏2023-02-04 16 32 46