Есть ли способ добавить функциональность kexec в busybox initrd? - PullRequest
0 голосов
/ 29 октября 2019

У меня на плате 3 МБ флэш-памяти SPI, и я могу упаковать в нее флэш-память bzImage, busybox initrd и coreboot ROM. Я также могу загружаться в оболочку, все с помощью ROM-kernel-as-bootloader.

На устройстве USB у меня ядро ​​большего размера. Я также могу обнаружить USB и смонтировать его. Но проблема в busybox, похоже, не имеет утилиты kexec. Я не могу использовать любой другой пакет initrd, потому что размер моего cpio (несжатого) не должен превышать 1,4 МБ из-за ограничений памяти. U-root имеет поддержку kexec, но минимальный размер изображения легко достигает 3 МБ или, по крайней мере, я не смог найти способ сделать его меньше этого размера.

Следовательно, есть лиспособ добавить поддержку kexec в busybox (скомпилировать статический двоичный файл и скопировать в initrd?) или любой другой пакет initrd, который может удовлетворить потребность в размере 1,4 МБ?

РЕДАКТИРОВАТЬ

В этом посте предполагается, что в busybox может быть доступна поддержка kexec, но я не смог найти ее след. На самом деле запрос на добавление kexec-tools в busybox был выполнен более десяти лет назад. Но когда я сделал grep в busybox, я не увидел его следов.

1 Ответ

2 голосов
/ 29 октября 2019

Двоичный файл kexec от kexec-tools занимает около 300 КБ (x86_64 с -Os). Даже если он будет добавлен в busybox, он не станет намного меньше, потому что ему нужно делать довольно сложные вещи, которые больше нигде не выполняются в busybox.

Если у вас нет даже 300 КБслева, тогда вам, вероятно, следует удалить параметры конфигурации из самого busybox, чтобы сэкономить место. С помощью uClibc вы также можете удалить некоторые ненужные опции, такие как wchar и threading. Убедитесь, что вы используете статическую компоновку, это экономит немного места.

Следующий Buildroot defconfig генерирует initramfs точно 1,4 МБ.

BR2_x86_64=y
BR2_x86_corei7=y
BR2_STATIC_LIBS=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
BR2_TOOLCHAIN_EXTERNAL_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/x86-64-core-i7/tarballs/x86-64-core-i7--uclibc--stable-2018.11-1.tar.bz2"
BR2_TOOLCHAIN_EXTERNAL_GCC_7=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_1=y
BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
BR2_PACKAGE_KEXEC=y
BR2_PACKAGE_KEXEC_ZLIB=y
BR2_TARGET_ROOTFS_CPIO=y
# BR2_TARGET_ROOTFS_TAR is not set
...