В данной статье мы создадим raw образ диска, добавим в него загрузчик grub и образ linux с busybox собранный в предыдущей статье.
В предыдущей части статьи мы генерировали raw образ диска с помощью dd, но так же это можно сделать с помощью qemu (так же qemu может создавать образы других форматов) :
qemu-img create -f raw disk.raw 10000m
Для установки grub на образ воспользуемся live cd с linux — например https://www.archlinux.org/download/. Для этого запустим qemu с нашим образом в качестве основного диска, а в cd rom qemu вставим наш iso образ live cd:
qemu-system-x86_64 -hda ./disk.raw -cdrom ./archlinux-2016.12.01-dual.iso -m 2048
После загрузки ОС, создаем mbr (dos) раздел на нашем диске (с помощью fdisk или cfdisk).
Далее cоздаем ext4 файловую систему на этом разделе:
mkfs.ext4 /dev/sda1
Теперь можно примонтировать данный раздел и установить на него grub:
mount /dev/sda1 /mnt
grub-install –boot-directory=/mnt/boot /dev/sda
umount /mnt
Далее можно просто убить qemu, наш образ готов.
Если сейчас вы запустите qemu, как:
qemu-system-x86_64 -hda ./disk.raw -m 2048
то увидите загрузку grub.
Теперь же нам нужно подсунуть на данный диск linux kernel, rootfs и busybox, который мы собирали в предыдущей статье.
Для того чтобы примонтировать данный раздел к нашей основной ОС, так же будем пользоваться инструментом предоставленным qemu:
sudo modprobe nbd max_part=8
sudo qemu-nbd --connect=/dev/nbd0 disk.raw
sudo mount /dev/nbd0p1 /mnt/
Потом копируем rootfs, созданную в предыдущей статье, в корень примонтированного раздела. В директорию boot кладем bzImage Linux Kernel (так же скомпилированного в предыдущей статье). Должно получиться так:
/mnt/bin/...
/mnt/boot/grub/...
/mnt/boot/bzImage
/mnt/dev/...
/mnt//etc/...
/mnt/home/...
/mnt/mnt/...
/mnt/proc/...
/mnt/sbin/...
/mnt/sbin/...
/mnt/sys/...
/mnt/usr/...
/mnt/init
/mnt/@linuxrc
Размонтируем образ:
sudo umount /mnt/
sudo qemu-nbd -d /dev/nbd0
Запускаем:
qemu-system-x86_64 -hda ./disk.raw -m 2048
В командной строке grub укажем ядро, которое нужно грузить и дадим команду его грузить:
grub>linux /boot/bzImage
grub>boot
Теперь ОС должна загрузиться.
Смотрим также: https://badembed.ru/qemu-busybox-linux-kernel/