Buildroot для загрузки полных рутов в Ram
У меня есть встроенная плата на основе Arm. В настоящее время RootFS - это squashfs. Я все еще на стадии разработки. Мой текущий рабочий процесс:
- Внесите изменения в разработку машины.
- Создайте новый образ Root FS.
- Запишите образ на флэш-диск в плате.
- Перезагрузитесь и проверьте изменения.
Как вы видите вышеописанный рабочий процесс не эффективен. Создание полного образа ФС отнимает много времени, в то время как для моего приложения или некоторых сценариев в ФС требуются лишь незначительные изменения, запись образа и перезагрузка.
Я знаю, что могу создать Initial Ram Disk для хранения RootFS, я выбрал эту опцию в buildroot, и сборка завершена.
Теперь я немного растерялся, что мне записать на доске? И хватит ли этого, чтобы избежать всего цикла перестройки, прожига, перезагрузки в разработке.
Я знаю, что мне нужно будет сжечь изображение в конце, чтобы сохранить его на доске, но я просто хочу записать одно окончательное изображение после того, как убедитесь, что мои изменения работают.
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.
В основном вам нужен образ ядра, начальный RAM-диск и блоб дерева устройств (на случай, если вы решите не скомпилировать его в ядре).
Вот еще один пример опций 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) и адреса в соответствии с вашим правлением.