CONFIG_BLK_DEV_INITRD=y
Этот параметр конфигурации ядра также обязателен. Он включает поддержку initrd в ядре Linux.
К счастью, Buildroot устанавливает его для нас по умолчанию, когда дается BR2_TARGET_ROOTFS_CPIO=y
.
Затем вы передаете CPIO в QEMU с опцией qemu -initrd
. Моя полная команда QEMU:
./buildroot/output.x86_64~/host/usr/bin/qemu-system-x86_64 -m 128M -monitor telnet::45454,server,nowait -netdev user,hostfwd=tcp::45455-:45455,id=net0 -smp 1 -M pc -append ' nopat nokaslr norandmaps printk.devkmsg=on printk.time=y console=ttyS0' -device edu -device lkmc_pci_min -device virtio-net-pci,netdev=net0 -kernel./buildroot/output.x86_64~/images/bzImage -nographic -initrd './buildroot/output.x86_64~/images/rootfs.cpio'
Вот минималистичный полностью автоматизированный пример Buildroot + QEMU:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/b3868a3b009f2ab44fa6d3db3d174930b3cf7b69#initrd
Тонкая деталь, которую я упустил, это дополнительный --аргумент listen для демона в случае службы systemd, как показано в исходном посте. Аргумент прослушивания --управляется настройкой LISTENER в /etc/default/distcc
, и по умолчанию используется значение 127.0.0.1, что позволяет принимать соединения только с локального хоста.
В моем случае я должен был установить значение 192.168.0.1
, чтобы прослушивать все машины в локальной сети.