hzyitc / u-boot-onecloud

u-boot for onecloud. 玩客云用u-boot
Other
71 stars 39 forks source link

请问能否在 Armbian 中通过 dd 的方式刷入 u-boot? #2

Closed kuoruan closed 2 years ago

kuoruan commented 2 years ago

不好意思,在不恰当的地方提问了。

我的版本是 v1.0 版本,通过 USB 线刷等一系列教程,刷到了 Armbian 5.90: https://www.right.com.cn/forum/thread-4754348-1-1.html

现在发现再想通过 USB Burning tool 刷你的 burn.img,软件上已经没有任何反映了。 尝试通过 USB 刷普通 img 也无法成功(不知为何 USB 引导失败)。但 Armbian 运行正常

于是就想请教一下是否能通过 dd 命令来刷入 uboot.bin?

例如

dd if=/boot/uboot.bin of=/dev/mmcblk0boot0
hzyitc commented 2 years ago

理论可以,但我没试过。

识别不了可能是因为u-boot没有调用update尝试USB 烧写。可以通过短接来使eMMC暂时失效,进而进入USB 烧写模式

kuoruan commented 2 years ago

感谢,确实可以。

  1. 通过 U 盘启动其他系统(可能在本系统上也可以)
  2. echo 0 > /sys/block/mmcblk0boot0/force_ro 启用 /dev/mmcblk0boot0 的读写权限
  3. dd if=Armbian_22.08.0-trunk_Onecloud_jammy_edge_5.18.0.img of=/dev/mmcblk0 status=progress 写入新的镜像文件
  4. dd if=uboot.bin of=/dev/mmcblk0boot0 status=progress 写入新的 uboot
  5. reboot now 重新启动

现在按住 reset 进行 USB 直刷已经可以了。

只不过启动之后灯是红色的,能否改为蓝色?@hzyitc

kuoruan commented 2 years ago

玩客云红灯故障说明

1.没插网线或网线接触不良 请插入网线,并确保网线接口没有松动 2.网线损坏 网线存在质量问题,请更换网线 3.联网方式不正确 玩客云默认支持动态ip,如需静态ip请在app中设置 4.网络禁止陌生设备 网络禁止陌生设备接入,请联系网管添加信任设备

玩客云黄灯故障说明

1.没有正确插入存储设备 请在USB口插入移动硬盘或U盘 2.存储设备存在质量问题 存储设备老化或存在质量问题,请更换 3.文件系统格式不支持 玩客云支持FAT/FAT32/NTFS/EXT3/EXT4/HFS+ 4.存储设备有写保护 请检查并解除存储设备的写保护

玩客云白灯故障说明

白灯极大可能是机器固件出错,例如固件升级中断导致

hzyitc commented 2 years ago

你是说armbian启动后吗,可以在/sys/class/leds/里面修改

hzyitc commented 2 years ago

有几个问题

U-boot不仅需要写入mmcblk1boot0也需要写入mmcblk1,同时最好也写入mmcblk1boot1

U-boot会在mmcblk1中存放env,具体位置见u-boot中的分区表(注意不是MBR中的)。

在将U-boot写入mmcblk1后,会 直接覆盖掉分区表。这是为了将MBR分区表与U-boot分区表正确对齐。当然你也可以避免这个操作,但 请注意不要覆盖到U-boot的数据

因此请不要直接用 dd 把 整个硬盘镜像 刷入。

quidlaw commented 2 years ago

有几个问题

U-boot不仅需要写入mmcblk1boot0也需要写入mmcblk1,同时最好也写入mmcblk1boot1

dd到/dev/mmcblk1之后又dd到了mmcblk1boot0 。有除了dd之外更好的方法来进行这个双更新吗?

U-boot会在mmcblk1中存放env,具体位置见u-boot中的分区表(注意不是MBR中的)。

也就是说单更新mmcblk1boot0会导致u-boot不一致?(同时有新旧两个u-boot?)

在将U-boot写入mmcblk1后,会 直接覆盖掉分区表。这是为了将MBR分区表与U-boot分区表正确对齐。当然你也可以避免这个操作,但 请注意不要覆盖到U-boot的数据

编译的固件可以去掉boot分区吗?这样可以独立更新rootfs和boot分区?又或者说怎么把img固件不覆盖boot分区写入到mmcblk1p2分区

因此请不要直接用 dd 把 整个硬盘镜像 刷入。

这样是等效同时覆盖了u-boot和rootfs分区吗?是否有办法类似armbian官方那样通过dpkg的方式更新uboot(如果这样更新是不是就属于无损更新?)。

如果要分别安装u-boot和系统,最好的方式是什么?确实有发现单独dd会有分区表被破坏的问题。

最后似乎最新的u-boot始终无法引导emmc(usb可以正确引导),方法是:我在dd整个镜像后dd了u-boot.bin到mmcblk1p1和mmcblk1boot0。还有个随机问题不知道和u-boot是否有关,就是有一定几率在开机的时候有线网卡不工作(灯熄灭)断电重启后概率恢复正常。

quidlaw commented 2 years ago

有个单独的疑问,就是u-boot.binu-boot-comp.bin是什么区别,我有查过其他的回答,似乎是相同的?

kuoruan commented 2 years ago

用 dd 直刷的原因是现有镜像无法用 USB 线刷,先用 dd 刷入此包之后,线刷就正常了,后续可以再线刷一次。

hzyitc commented 2 years ago

原因我上面解释了,直接 dd 整个镜像 会导致boot分区env重叠。导致U-boot环境变量出错,然后会保存默认变量到env中,进而破坏了boot分区

lanlanpy commented 2 years ago

我有一个全志H3的板子,线刷过armbian的直刷固件后,lsblk看到的emmc的分区只有boot0 boot1 还有p1 。 armbian官方后续更新的固件都是ext4格式的img,把boot内容打包在一个rootfs分区了,挂载后只有一个ext4分区。 有个boot文件夹包含了内核以及dtb文件,然后刷入emmc是通过内存卡启动后 用nand-sata-install 写入的emmc p1分区,同时更新了boot文件夹里面的uboot启动系统参数, uboot启动后好像是直接读取的p1分区的boot文件夹,如果换成f2fs格式的话,uboot从这分区格式读取文件,uboot是不是还得加入支持读取f2fs格式分区的驱动。