2017-05-05 23 views
1

我有一個基於Arm的嵌入式主板。目前RootFS是squashfs。我仍處於發展階段。 我目前的工作流程是:Buildroot將完整的rootfs加載到內存中

  1. 在開發機器中進行更改。
  2. 創建新的Root FS映像。
  3. 將圖像燒製到閃存盤上。
  4. 重新啓動並測試更改。

正如您所見,上述工作流程效率不高。浪費大量時間來創建FS的完整映像,而只需要在我的應用程序或FS中的一些腳本中進行小的更改,就可以刻錄映像並重新啓動。

我知道我可以創建Initial Ram Disk來保存RootFS,我在buildroot中選擇了這個選項,並且構建完成。

現在我有點困惑我應該在板上燒什麼?這足以避免整個重建,燃燒,重新啓動週期的發展。

我知道我需要在最後刻錄圖像以堅持在電路板上,但我只是想在確定我的更改正在工作後刻錄一張最終圖像。

回答

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型引導命令行引導時運行run nb_boot

基本上你需要內核映像,初始RAM磁盤和設備樹blob(如果你選擇不在內核中編譯它)。

這裏是英特爾愛迪生板的U-Boot選項另一示例從eMMC的引導:

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)和地址。

+0

謝謝0andriy,我設法瞭解uboot現在如何工作。我會嘗試使用網絡啓動選項,因爲它似乎對我的使用情況非常適合。 – silentnights

相關問題