从 U-Boot 终端修复 uEnv.txt?

从 U-Boot 终端修复 uEnv.txt?

我有一个 BeagleBone Black,带有 Debian 8.3、Linux 4.1.15-ti-rt-r43。

编辑: 系统安装在内置闪光灯

我修改了 /boot/uEnv.txt 以加载不同的 dtb 文件,显然文件名错误,因此它无法启动到 Linux。

所以我通过 PC 上的 J1 引脚/UART0 -> 终端程序进行连接。我看到 U-Boot 抱怨找不到文件,因此它无法启动 Linux,并给了我 U-Boot 命令。输入“帮助”后列出的内容看起来不太有用。

是否有可能并且可行,使用 U-Boot 命令从我的串行控制台修复 uEnv.txt - 这会起作用......如何?或者,最好的方法还有什么?


编辑#2:在这个网站上找到一些有用的碎片,这些碎片并没有完全说明问题,但引导了一个有用的方向:https://www.compulab.co.il/utilite-computer/wiki/index.php/Utilite_U-Boot_User_How-To%27s我发现我实际上可以看到uEnv.txt在U-Boot控制台中输入:“ls mmc 1 boot”,U-Boot中的ls命令需要设备名称+num,显然我的SD卡是mmc0,内部闪存mmc1,有趣的顺序。唉,U-Boot 没有“猫”,显然更不用说编辑器了。就像一个拿着遥控手臂的孩子试图抓住毛绒动物以获取一些硬币一样,无法完全抓住我的文件,而且它是如此接近,啊!


编辑#3:我看到 mmc1 上有 uEnv.txt 的旧备份文件。 U-Boot 命令“load”用于将文件加载到内存中,“save”用于保存文件。您必须指定地址和大小。您可以从“ls mmc 1 boot”命令中看到的文件大小。查看本幻灯片第 35 页上的内存映射:https://www.slideshare.net/chrissimmonds/embedded-linux-quick-start-guide,RAM 开始于0x80000000。猜测如果 RAM 中只有 U-Boot,那么希望在 384 MB 处什么都没有,我尝试将文件加载到98000000,并从那里保存,但保存返回“无法写入文件”。太糟糕了。

答案1

好吧,我放弃了 U-Boot 路线,尽管如果它有效的话会很酷。

我获取了 BeagleBone Debian 映像的 IoT 变体(仅控制台,无 GUI,下载速度更快),例如“Stretch IoT(无图形桌面)”: https://beagleboard.org/latest-images

并按照此处的步骤操作: http://beagleboard.org/getting-started

有一个关于如何刷新它的链接,即需要额外的步骤 - 很好,我记错了。担心 sdcard 启动会刷新内部 emmc,这是我不想要的。

如前所述,当插入SD卡时,sdcard mmc设备编号将为0,内部闪存(emmc)将为1。而且,emmc上的文件系统显然是ext4。所以你需要安装它:

debian@beaglebone:~$ sudo mkdir /mnt/emmc
debian@beaglebone:~$ sudo mount -t ext4 /dev/mmcblk1p1 /mnt/emmc

然后你就可以进入已安装的 emmc 上的 boot 文件夹:

debian@beaglebone:/$ cd /mnt/emmc/boot/

并使用编辑器或您事先制作的备份修复那里的 uEnv.txt ;)

答案2

我稍后写,但它可以帮助别人。

如果您有 的备份uEnv.txt,那么备份过程既快捷又简单。如果你的电脑上有它,那么你可以将它复制到SD卡,然后从SD卡复制到RAM,从RAM复制到EMMC

  • 首先,将文件内容复制到 RAM 内存:

    ext4load mmc 1 0x80000000 /boot/uEnv.txt_bck
    
  • 然后将文件内容写入新文件:

    ext4write mmc 1 0x80000000 /boot/uEnv.txt 7FA 0
    

注意:ext4write 采用十六进制字节数。

注:mmc 1我的rootfs 分区。使用该命令mmc list查看设置中的分区。

相关内容