Buildroot将完整的rootfs加载到Ram

时间:2017-05-05 10:52:20

标签: linux embedded-linux rootfs

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

  1. 在开发机器中进行更改。
  2. 创建新的Root FS映像。
  3. 将图像刻录到主板上的闪存盘中。
  4. 重新启动并测试更改。
  5. 如您所见,上述工作流程效率不高。创建FS的完整映像需要花费大量时间,而我的应用程序或FS中的某些脚本只需要进行微小的更改,刻录映像并重新启动。

    我知道我可以创建初始Ram磁盘,保存RootFS,我已经在buildroot中选择了该选项,并且构建完成了。

    现在我有点困惑我应该在董事会中烧掉什么?这足以避免开发中的整个重建,刻录,重启周期。

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

1 个答案:

答案 0 :(得分:2)

这不允许您刻录较小的部件。您仍然需要将完整图像复制到设备上的内存中。 有一种解决方法:在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(如果你选择不在内核中编译它)。

以下是英特尔Edison开发板从eMMC启动的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)和地址。