...

вторник, 18 марта 2014 г.

[Из песочницы] 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://ift.tt/1hvwk4F 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 http://ift.tt/1gbCJ2w
wget http://ift.tt/1hvwlFC
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. Компилирование ядра — http://ift.tt/1qOTJEP

2. QEMU — wiki.qemu.org

3. Моё ядро


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий