【问题标题】:Buildroot to load full rootfs into RamBuildroot 将完整的 rootfs 加载到 Ram
【发布时间】:2017-05-05 10:52:20
【问题描述】:

我有一个基于 Arm 的嵌入式板。目前 RootFS 是 squashfs。我还处于开发阶段。 我目前的工作流程是:

  1. 在开发机器中进行更改。
  2. 创建新的 Root FS 映像。
  3. 将映像刻录到板载闪存盘中。
  4. 重新启动并测试更改。

如您所见,上述工作流程效率不高。创建 FS 的完整映像会浪费大量时间,而我的应用程序或 FS 中的一些脚本只需稍作更改,烧录映像并重新启动。

我知道我可以创建 Initial Ram Disk 来保存 RootFS,我在 buildroot 中选择了该选项,构建完成。

现在我有点困惑我应该在板上烧什么?这是否足以避免开发中的整个重建、刻录、重启周期。

我知道我需要在最后刻录图像以保留在板中,但我只想在确保我的更改正常工作后刻录一个最终图像。

【问题讨论】:

    标签: linux embedded-linux rootfs


    【解决方案1】:

    这不允许您燃烧较小的零件。您仍然需要将完整图像复制到设备上的内存中。 有一个解决方法:使用 U-Boot 中的网络工具,即 tftpboot,将映像下载到内存中并在板上运行。

    这是 PowerPC 板之一的示例:

    nb_load=dhcp;run nb_load_dtb;run nb_load_vmlinuz;run nb_load_initrd
    nb_load_initrd=tftpboot 0x1900000 /mybooklive/initrd
    nb_load_vmlinuz=tftpboot 0x1000000 /mybooklive/vmlinuz
    nb_load_dtb=tftpboot 0x1800000 /mybooklive/apollo3g.dtb
    nb_boot=setenv bootargs ${nb_bootargs}; run nb_load; bootm 0x1000000 0x1900000 0x1800000
    nb_bootargs=console=ttyS0,115200n8 ignore_loglevel
    

    在 U-boot 命令行中启动运行run nb_boot

    基本上,您需要内核映像、初始 ram 磁盘和设备树 blob(以防您选择不在内核中编译它)。

    下面是另一个从 eMMC 引导英特尔 Edison 板的 U-Boot 选项示例:

    setenv boot_edsboot 'zboot 0x100000 0 0x3000000 0x1000000'
    setenv bootargs_edsboot 'console=tty1 console=ttyS2,115200n8 rootfstype=ramfs rw'
    setenv bootcmd_edsboot 'setenv bootargs ${bootargs_edsboot}; run load_edsboot; run boot_edsboot'
    setenv load_edsboot 'load mmc 0:9 0x100000 vmlinuz.efi; load mmc 0:9 0x3000000 initrd'
    

    在 U-Boot 命令行中启动运行 run bootcmd_edsboot

    全文是here

    很明显,您需要根据您拥有的主板获取正确的文件(DTB)和地址。

    【讨论】:

    • 感谢 0andriy,我现在设法了解了 uboot 的工作原理。我将尝试使用网络启动选项,因为它似乎非常适合我的用例。
    猜你喜欢
    • 1970-01-01
    • 2013-07-26
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多