:::: MENU ::::

qemu, busybox, linux kernel — часть 2, добавление grub

В данной статье мы создадим 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/