Buildroot для загрузки полных rootfs в Ram

У меня есть встроенная плата на базе Arm. В настоящее время RootFS называется squashfs. Я все еще нахожусь в стадии разработки. Мой текущий рабочий процесс:

  1. Внесите изменения в машину разработки.
  2. Создайте новый образ Root FS.
  3. Запишите образ на флешку в плате.
  4. Перезагрузитесь и проверьте изменения.

Как видите, приведенный выше рабочий процесс неэффективен. На создание полного образа ФС уходит очень много времени, при этом требуются только мелкие изменения в моем приложении или какие-то скрипты в ФС, записать образ и перезагрузиться.

Я знаю, что могу создать Initial Ram Disk для хранения RootFS, я выбрал эту опцию в buildroot, и сборка завершена.

Теперь я немного запутался, что я должен записать в плату? И будет ли этого достаточно, чтобы избежать всего цикла пересборки, записи, перезагрузки в процессе разработки.

Я знаю, что мне нужно будет записать образ в конце, чтобы сохранить его на доске, но я просто хочу записать один окончательный образ после того, как удостоверюсь, что мои изменения работают.


person silentnights    schedule 05.05.2017    source источник


Ответы (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

Для загрузки запустите run nb_boot в командной строке U-boot.

По сути, вам нужен образ ядра, начальный электронный диск и большой двоичный объект дерева устройств (на случай, если вы решите не компилировать его в ядре).

Вот еще один пример опций U-Boot для платы Intel Edison для загрузки с 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'

Для загрузки запустите run bootcmd_edsboot в командной строке U-Boot.

Полная версия статьи находится здесь.

Очевидно, что вам нужно получить правильные файлы (DTB) и адреса в соответствии с вашей платой.

person 0andriy    schedule 06.05.2017
comment
Спасибо 0andriy, удалось понять как теперь работает uboot. Я попытаюсь использовать опцию загрузки по сети, так как она кажется вполне подходящей для моего варианта использования. - person silentnights; 10.05.2017