Raspbian и QEMU

от автора

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. Моё ядро

ссылка на оригинал статьи http://habrahabr.ru/post/216205/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *