Raspbian и QEMU

в 10:38, , рубрики: Raspberry Pi

image
Всем здравствуйте! Подарили мне недавно raspberry pi, и решил я его поиспользовать. Но, как это обычно бывает, дома времени для этого очень мало, а на работе подключить его не к чему. Поэтому решил поставить себе raspbian на виртуальную машину, для того чтобы использовать на работе. Кому интересно как я это делал прошу присоединиться
Для достижения своей цели я использовал множества статей и сообщений на форумах в различных уголках интернета, ссылки на те статьи, которые вспомню приведу в конце своего повествования. Так же, прошу не пинать за ошибки и стиль повествования, а указывать все недочеты в комментариях, т.к. это первая моя публикация на хабре в частности, и где-либо в общем.

Итак начнём! Чтобы заставить работать raspbian на QEMU нам для начала понадобится ядро линукса под arm-платформу. Я решил использовать уже готовые, а для общего развития попробовать собрать сам.
Для этого на понадобится машина с операционной системой из семейства Linux (на самом деле я просто не знаю можно ли это сделать на других операционках). Я использовал одну из разновидностей Debian, а именно Kali Linux, т.к. он был в тот момент под рукой.
1. С начала скачаем пакеты, которые нам понадобятся для сборки ядра, выполнив следующую команду:

sudo apt-get install git libncurses5-dev gcc-arm-linux-gnueabihf

Если вы используете 32х разрядную систему, то нужно будет еще установить х86 библиотеки:

sudo apt-get install ia32-libs

2. Так же нужно установить кросс-компилятор, для этого нужно добавить репозиторий:
deb http://www.emdebian.org/debian/ unstable main
И выполнить следующие комманды:

apt-get update
apt-get install gcc-4.7-arm-linux-gnueabihf

И для совместимости создать символьную метку на компилятор:

ln -s 'which arm-linux-gnueabihf-gcc-4.7' /usr/local/bin/arm-linux/gnueabihf-gcc

3. Следующим шагом нужно выкачать исходники ядра и патч для поддержки ядром архитектуры ARM11 и применить этот патч к исходникам. Для этого выполним следующие команды:

mkdir /git
cd /git
git clone https://github.com/raspberrypi/linux.git
wget http://xecdesign.com/downloads/linux-qemu/linux-arm.patch
patch -p1 -d linux/ < linux-arm.patch

4. Дальше нам нужно будет сконфигурировать ядро под нужды Raspbian.
Для этого выполним следующие комманды:

cd linux
make ARCH=arm versatile_defconfig
make ARCH=arm menuconfig

И в появившемся меню выбираем следующие настройки.
ВАЖНО!!! При выборе опции, если у Вас напротив опции появилась , нажмите еще раз пробел, чтобы появилась <*>.
а) Указываем кросс-компилятор:
General Setup -> Cross-compiler tool prefix
arm-linux-gnueabihf-

ВАЖНО!Не забудьте указать '-' в конце

б)Настрйки CPU:
System Type->
[*] Support ARMV6 processor
[*] ARM errata: Invalidation of the Instruction Cache Operation fail
[*] ARM errata: Possible cache data corruption with hit-under-miss enabled

в) Включение поддержки для hard-float бинарников:
Floating point emulation ->
[*] VFP-format floating point maths

г) Включение EABI для ARM:
Kernel Features ->
[*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel

д) Включение поддержки дисков QEMU:
Bus Support->
[*] PCI Support
Device Drivers ->
SCSI Device Support
[*] SCSI Device Support
[*] SCSI Disk Support
[*] SCSI CDROM Support
[*] SCSI low-level drivers ->
[*] SYM53C8XX Version 2 SCSI support

е) Включение devtmpfs:
Device Drivers ->
Generic Driver Options ->
[*] Maintain a devtmpfs filesystem to mount at /dev
[*] Automount devtmpfs at /dev, after the kernel mounted the root

ё) Включение важных файловых систем:
File Systems ->
<*> Ext3 journaling file system support
<*> The Extended 4 (ext4) filesystem
DOS/FAT/NT Filesystems ->
<*> VFAT (Windows-95) fs support

ж) Включение tmpfs:
File Systems ->
Pseudo filesystems->
[*] Tmpfs Virtual Memory file system support (former shm fs)

з) Включение интерфейса сообщений:
Device Drivers ->
Input device support ->
[*] Event interface

и)(по желанию) Включение /proc/config.gz
General Setup ->
[*] Kernel .config support
[*] Enable access to .config through /proc/config.gz

к)(по желанию) Использовать более крупных шрифтов и включение логотипа:
Device Drivers ->
Graphics Support ->
[*] Bootup logo
Console display driver support ->
[*] Select compiled-in fonts
[*] VGA 8x16 font

Сохраняем и выходим.

Далее перходим к самой компиляции ядра. Для этого выполним следующие команды:

make ARCH=arm
make arch=arm INSTALL_MOD_PATH=../modules modules_install

Ну и я сразу его копирую в корень, т.к. потом буду прописывать параметры от корня.

cp arch/arm/boot/zImage /kernel-qemu

На этом сборка ядра для QEMU закончена. Если Вам не хочется повторять всё это, то в конце я выложу ссылки на все файлы.

Следующий этап — это установка QEMU.
Для пользователей ОС Windows всё очень просто. Идем на QEMU ON WINDOWS и качаем архив с последней версией QEMU.
ВАЖНО!!!Версия QEMU должна быть не ниже 1.5.0, т.к. в ней исправлен критичный баг для эмуляции Raspbian
Для пользователей Windows подробно описывать процесс запуска Raspbian не буду, т.к. он очень похож с процессом запуска на ОС семейства Linux. Если будут вопросы, встретимся в коментариях.

Итак, для начала копируем себе исходники QEMU:

cd /git
git clone git://git.qemu-project.org/qemu.git

Так же установим зависимости:

apt-get install libsdl1.2-dev

Переходим к настройке и установке:

cd qemu
./configure -target-list="arm-softmmu arm-linux-user" -enable-sdl -static
make
sudo make install

Если у вас появиться сообщение Error: DTC not present, то выполните следующую команду:

git submodule update --init dtc

Теперь у Вас есть QEMU и ядро, осталось скачать образ Raspbian и провести «настроечную» загрузку.

Для первого запуска Raspbian нужно выполнить следующую комманду:

qemu-system-arm -kernel /kernel-qemu -cpu arm1176 -m 256 -M versalitepb -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -hda <путь_к_образу_Rapbian>

После загрузки вы увидите приглашение bash:
image
Введите:

nano /etc/ld.so.preload

Закоментируйте строку, нажмите [Ctrl]+[x], сохраните и выйдете
image
Так же выполните:

nano /etc/udev/rules.d/90-qemu.rules

И введите:

KERNEL=="sda",SYMLINK+="mmcblk0"
KERNEL=="sda?",SYMLINK+="mmcblk0p%n",

Сохраните, закройте и выключите виртуалку:

shutdown -h now

Теперь всё готово для запуска виртуального Raspbian. Выполните команду:

qemu-system-arm -kernel /kernel-qemu -cpu arm1176 -m 256 -M versalitepb -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda <путь_к_образу_Rapbian>

И если всё прошло удачно, то вы увидите стандартное приглашение Raspbian:
image

Так же может быть полезным изменение размера диска. Для этого на хосте выполните:

qemu-img resize <образ_диска_Raspbian> +6G

Затем загрузите Raspbian и выполните следующее:

sudo fdisk /dev/sda

Нажмите [p] и запомните значение Start для sda2.
Затем нажмите [d] и удалите 2 раздел.
Затем нажмите [n] — для создания нового раздела.
Нажмите [p], чтобы указать что он будет primary.
Укажите, что он будет вторым, нажав [2].
Укажите First sector, равный Start.
Для Last Sector просто нажмите [Enter], чтобы использовалось всё свободное место.
Нажмите [w], чтобы выйти, сохранив изменения в таблицу разделов.
Перезагрузитесь, выполнив комманду:

sudo shutdown -r now

После перезагрузки выполните комманду:

sudo resize2fs /dev/sda2

На этом всё. Выполнив комманду

df -h

Вы увидите новый размер вашего диска.

На этом, наверное всё что я хотел сказать. Пожалуйста, сильно не пинайте за стиль изложения, а лучше указываёте на конкретные ошибки в комментариях.

Ссылки на материалы:
1. Компилирование ядра — xecdesign.com/compiling-a-kernel
2. QEMU — wiki.qemu.org
3. Моё ядро

Автор: BreakHeart

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js