Завершить процесс вместо паники на hung_task

Buildroot

Defconfig qemu_x86_64_defconfig почти работал, за исключением того, что мне пришлось добавить ::sysinit:/sbin/mdev -s в inittab . Я думаю, это потому, что Buildroot полагается на CONFIG_DEVTMPFS_MOUNT для создания /dev.

Rootfs:

git clone git://git.buildroot.net/buildroot
cd buildroot
git checkout 2017.02
make qemu_x86_64_defconfig

# Custom inittab.
echo 'BR2_ROOTFS_OVERLAY="rootfs_overlay"' >>.config
make olddefconfig
mkdir -p rootfs_overlay/etc
printf '
::sysinit:/bin/mount -t proc proc /proc
::sysinit:/bin/mount -o remount,rw /
::sysinit:/bin/mkdir -p /dev/pts
::sysinit:/bin/mkdir -p /dev/shm
::sysinit:/bin/mount -a
::sysinit:/sbin/mdev -s
::sysinit:/bin/hostname -F /etc/hostname
::sysinit:/etc/init.d/rcS
console::respawn:/sbin/getty -n -L console 0 vt100
::ctrlaltdel:/sbin/reboot
::shutdown:/etc/init.d/rcK
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
' > rootfs_overlay/etc/inittab

# Build image.
make BR2_JLEVEL=$(($(nproc)-2))
cp output/images/rootfs.ext2 /path/to/linux

Затем в исходном коде ядра:

cd /path/to/linux
git checkout v4.9
make mrproper
make defconfig ARCH=um
make ARCH=um
./linux eth0=tuntap,,,192.168.0.254

Теперь вы находитесь внутри виртуальной машины и можете выйти с:

poweroff

Файловая система является постоянной, попробуйте:

date >f

и перезагрузитесь.

НЕОБХОДИМО заставить сеть работать. Текущий eth0= является просто фиктивным, чтобы предотвратить зависание инициализации Buildroot в ожидании сетевого устройства.

Вы также можете выполнить пошаговую отладку ядра, как показано по адресу: https://stackoverflow.com/questions/4943857/linux-kernel-live-debugging-how-its-done-and-what-tools-are. -used/44669413#44669413

TODO Я не знаю, что делать с модулями ядра, так как они должны быть скомпилированы для UML, а не для x86. Первая проблема заключается в том, что insmod потерпит неудачу, потому что UML не имеет SMP, что влияет на vermagic, и если вы принудительно используете vermagic, происходят странные вещи, такие как printk ничего не печатает. Связанный: https://stackoverflow.com/questions/2488625/user-mode-linux-installing-a-module-error

Вы также можете проверить этот образ с помощью QEMU, если хотите:

qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -net user

Протестировано в Ubuntu 14.04, хост ядра 3.13.0.

1
13.09.2015, 17:07
0 ответов

Теги

Похожие вопросы