Мы работаем с несколькими одноплатными компьютерами (SBC). Мы генерируем встроенные образы Linux с помощью Yocto (используя U-boot в качестве загрузчика) и вручную развертываем его на SD-картах. Это хорошо работает сейчас, когда мы находимся на этапе тестирования и у нас не так много SBC. Но позже это будет определенно слишком медленно.
У нас есть центральный сервер для сети SBC. В настоящее время это простой DHCP-сервер, влияющий на IP-адреса в зависимости от MAC-адресов карт. Сначала мы подумали о создании PXE-сервера, но кажется, что внутренний загрузчик ПЗУ некоторых SBC (например, Freescale i.MX6 sabresd) не поддерживает процесс загрузки PXE.
Поэтому мы хотели бы загрузить на карты только u-boot, а затем использовать сценарий (boot.scr) для загрузки всего, что необходимо (zImage, dtb и rootfs) для загрузки. Мы не хотим использовать NFS (никакого тонкого клиента, мы хотим, чтобы все необходимое было загружено на карты). В настоящее время мы можем загрузить ядро и файл dtb, используя это:
U-Boot > dhcp ${image}; tftpboot ${fdt_addr} ${fdt_file} ; fdt addr ${fdt_addr}
U-Boot > bootz ${loadaddr} - ${fdt_addr}
Конечно, поскольку rootfs отсутствует, загрузка ядра заканчивается паникой ядра. Но мы не знаем, как загрузить rootfs и заставить ядро использовать его. Любые предложения, как это сделать, приветствуются. Спасибо.
Итак, я нашел, как это сделать:
tftpboot 0x12000000 zImage
tftpboot ${fdt_addr} ${fdt_file}
tftpboot 0x19000000 core-image-minimal-boot.cpio.gz.u-boot
bootz 0x12000000 0x19000000 ${fdt_addr}
Для создания .cpio.gz.u-boot
, Мне нужно отредактировать conf/local.conf
:
IMAGE_CLASSES += "image_types_uboot"
IMAGE_FSTYPES = "cpio.gz.u-boot"