RISC - нов Debian под QEMU

План за действие

От горното става ясно, че за да стартираме Debian на емулирана платка с MIPS (или ARM) процесор, имаме нужда от:

  • Linux ядрото, което ще работи на QEMU;
  • изображение на основна файлова система на Debian (т.е. приложенията, споменати по-горе).

Ние сами ще изградим ядрото на Linux, като използваме инструменти за кръстосана разработка и ще поверим формирането на образа на основната файлова система на Debian на програмата debootstrap. Като компютър за разработка (компютър, на който ще компилираме и изпълняваме емулатора QEMU), ще използваме компютър с процесор с архитектура x86_64, работещ с тестова версия на Debian Linux.

Всички действия за сглобяване на ядрото и формиране на изображението на основната файлова система се извършват от командния ред, не изискват намеса на оператор и могат лесно да бъдат поставени в скрипт. Командите, които трябва да се изпълняват като root, се предшестват от #, командите, които не изискват привилегии на суперпотребител, се предхождат от $. Например:

    командата за инсталиране на софтуера се изпълнява от името на root потребителя:

  • изтеглете изображението на мрежовия инсталационен диск debian-8.3.0-amd64-netinst.iso,
  • създайте виртуална машина със следните минимални настройки: RAM: 1 GB, HDD: 8 GB; свържете инсталационния стартиращ диск на Debian към виртуалната машина;
  • стартирайте виртуалната машина с инсталатора на Debian, зареден от инсталационния диск;
  • инсталирайте Debian OS на твърдия диск на виртуалната машина в почти минимална конфигурация (например, за да стартирате QEMU, няма нужда да инсталирате уеб сървъра и компонентите на графичния потребителски интерфейс):

  • Изтеглипрясно инсталирана Debian OS и влезте като root;
  • активирайте възможността за инсталиране на пакети на Debian на тестовата версия, за да направите това, изпълнете на командния ред

Забележка: би било хубаво да направите apt-get dist-upgrade след apt-get update, но ако искате да използвате виртуалната машина само за стартиране на Debian MIPS/ARM, тогава това изобщо не е необходимо.

Debian за MIPS

Ще демонстрираме Debian за MIPS под QEMU на виртуална платка MIPS Malta с процесор с архитектура MIPS32R2 в режим big-endian.

Изграждане на Linux ядро ​​за QEMU Малта

Първо, нека се погрижим за получаването на изходните кодове на ядрото - изтеглете ги от kernel.org:

Разопаковайте архива и преминете към директорията linux-4.4.3:

Инсталирайте инструменталната верига за MIPS:

В допълнение към инструменталната верига MIPS ще ви трябват допълнителни инструменти за изграждане на ядрото на Linux:

Нека се подготвим за сглобяване под MIPS:

Променливата ARCH обяснява на системата за изграждане на ядрото (Kbuild), че всички специфични за платформата компоненти на ядрото се вземат в директорията arch/mips, а променливата CROSS_COMPILE изрично казва на Kbuild кой компилатор (или по-скоро инструментална верига) да използва - може да има няколко от тях на машината, а Kbuild обича прецизността.

Сега нека изберем конфигурация за ядрото въз основа на подготвената конфигурация за платката Malta. Файлът за предварителна конфигурация за платката Malta arch/mips/configs/malta_defconfig, който идва с linux-4.4.3, не е подходящ поради две причини:

  • конфигурацията е проектирана за дъската на Малта в режим на нисък ред, но бих искал да използвам режим на бърз ред.
  • malta_defconfig не включва опции (CONFIG_FHANDLE и CONFIG_CGROUPS), без които Debian 8просто не се зарежда.

Въз основа на malta_defconfig, нека създадем необходимия шаблон за конфигурационен файл malta-big_defconfig, който няма да има посочените недостатъци:

Сега, от заготовката, ще генерираме действителния конфигурационен файл на ядрото .config:

И започнете процеса на изграждане:

Забележка: Ако вашият компютър за разработка има повече от едно процесорно ядро, тогава трябва да ги използвате. За паралелизиране на работата на make се използва опцията -j, чийто аргумент е броят задачи (команди), които make ще се опита да изпълни едновременно. Така че на 4-процесорна машина за разработка има смисъл да стартирате make по следния начин: $ make -j 4

В резултат на това получаваме файла на ядрото vmlinux. Нека проверим ефективността му под QEMU! Инсталирайте QEMU:

Нека стартираме прясно създаденото ядро ​​под QEMU, като преди това сме напуснали директорията linux-4.4.3:

Както можете да видите, ядрото успешно се инициализира и се опита да монтира основната файлова система, което обаче не проработи. Нека създадем желаната основна файлова система!

Създаване на основна файлова система за MIPS

Създаване на основна файлова система на Debian, така че нека започнем с инсталирането на debootstrap и компонентите, необходими за работата му:

Сега нека стартираме първия етап на debootstrap:

В първия етап debootstrap ще изтегли jessie (стабилната) версия на пакетите на Debian, необходими за минималната основна файлова система от ftp.ru.debian.org/debian (официалния български Debian огледален сървър) за 32-bit MIPS big-endian архитектура (опции --foreign и --arch=mips ), и ще ги разопакова в директорията debian-jessie-mips/. В резултат на първия етап на debootstrap ще се формира файлова система в директорията debian-jessie-mips/, много подобна на истинската, нейнатаможете дори да опитате да използвате за изтегляне. Въпреки това компонентите на основната файлова система (пакети на Debian) все още не са конфигурирани на този етап. Трябва да стартирате втория етап на debootstrap, за да завършите конфигурацията. На този етап ще трябва да стартирате MIPS програми, така че ще трябва да използвате специален вариант на QEMU, така наречения usermode qemu, който ви позволява да стартирате отделни програми за Linux MIPS под Linux amd64. Нека поставим статично изграден системен емулатор с MIPS архитектурен процесор в главната файлова система и да изпълним debootstrap вътре в главната файлова система с помощта на chroot:

След като завърши вторият етап на debootstrap, компонентите на основната файлова система на Debian са настроени и остава да се направят финалните щрихи (напр. коригиране на някои файлове в /etc, например настройка на име на хост и мрежа, добавяне на потребители и т.н.). Но за тази демонстрация ще се ограничим до задаване на тривиалната парола 123 за root потребителя:

Сега основната файлова система може да се счита за конфигурирана - време е да покриете следите си. За безопасност архивираме главната файлова система:

За да работи под емулатора, основната файлова система ще трябва да бъде поставена на виртуално устройство (в случая на Малта това е виртуално IDE устройство). Оценете размера на диска, който трябва да създадем:

Тъй като основната файлова система е по-малка от 300 MB, е напълно възможно да се разпредели 512 MB виртуален диск за нейното съхранение. Нека създадем виртуален дисков файл, създадем ext2 файлова система върху него, върху която ще копираме нашата основна файлова система:

Сега нека стартираме Debian Linux под QEMU:

След като се появи подканата за влизане: можете да влезете като root (парола - 123) и да проверите типа на процесора:

Debianза ARM

Изграждане на Linux ядро ​​за ARM Versatile PB

Конфигурацията на Versatile ядрото ще трябва да бъде трудна, тъй като QEMU емулираният Versatile PB вграден ROM е доста малък (64 MB). За щастие, емулираният Versatile PB има PCI контролер, към който можете да свържете виртуален SCSI контролер. Поддръжката за посочения хардуер обаче ще трябва да бъде разрешена принудително в ядрото:

За разлика от платката MIPS Malta, поддръжката за зареждане на vmlinux за Versatile PB не е реализирана, поддържа се зареждане на zImage изображения:

Създаване на основна файлова система за ARM

Резултатите от проверката на типа процесор (не забравяйте, че паролата е 123):

Заключение