Пользователь
0,0
рейтинг
18 марта 2014 в 14:38

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 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
карма
4,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (16)

  • 0
    Можно ему 2048 памяти указать? Он это увидит? А потом Wolfram Mathematika запустится?
    Вы меня заинтриговали, завтра попробую :-).
    • 0
      Если честно я такой параметр не проверял, но и не вижу в этом смысла… Ведь в железной малинке всего 512 памяти.
      Проверил: QEMU говорит, что можно использовать максимум 2047 MB RAM, но и на 1024 у меня почему-то не заработало
      • 0
        Попробовал разные варианты, но больше 256 не заработало
        • 0
          у versalitepb захардкожено 256Mb.
          • 0
            Спасибо за информацию
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      зачем супруга, если есть watchdog и сотни туториалов про него? :-) harizanov.com/2013/08/putting-raspberry-pis-hardware-watchdog-to-work/ вот например.
      • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        И во всех этих «сотнях» нет приличного описания опций. Похоже, что даже в man'е они указаны не все.
        • 0
          В ядре отличная документация и пример кода. Вообще я watchdog использую только в случае «hard lockup», когда малина виснет (у меня самая первая ревизия борды, с набором детских проблем), а так если какой сервис упадет, то есть мониторинг который перезапустит контейнер в докере.
    • 0
      Вообще-то целый Raspberry Pi с полноценным Линуксом ради одного только мигания светодиодами это тоже как-то через чур, мне кажется.
      А эмуляция на QEMU мне помогла написать пост про использование Raspberry Pi в качестве информационного табло. Только я не парился собирать ядро для QEMU сам а выкачал готовую сборку из сети.
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          > Про Raspberry Pi вы толком ничего не написали, возможностей не использовали.
          Возможность запускать полноценный Linux это тоже возможность Pi, хотя, конечно, не только его. Но ведь и все другие штучки вроде GPIO тоже не уникальны для Pi я так понимаю.
          Описал вполне логичный вариант использования, ИМО. Чем было бы дешевле и логичнее заменить Pi для инфотабло с полноценным Линуксом, браузером и VNC?
          • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Организовать работу через SSH гораздо проще, быстрее и универсальнее. К RPi подключается только сеть. Точно так-же через сеть можно использовать и графический интерфейс, если нужно.
  • 0
    Простите за офтоп, но как ваш консольный шрифт называется? Я из другого, виндового мира и очень хочу этот шрифт в ttf для винды.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.