RISC - овий Debian під QEMU

План дій

Зі сказаного вище зрозуміло, що для запуску Debian на емульованій платі з процесором MIPS (або ARM) нам знадобляться:

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

Ядро Linux ми зберемо за допомогою крос-засобів розробки самостійно, а формування образу кореневої файлової системи Debian довіримо програмі debootstrap. В якості інструментальної ЕОМ (ЕОМ, на якій будемо проводити крос-компіляцію та запуск емулятора QEMU) використовуватимемо ЕОМ з процесором архітектури x86_64, що працює під керуванням Debian Linux версії testing.

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

    команда для встановлення програмного забезпечення виконується від імені користувача root:

  • скачайте образ мережного інсталяційного диска debian-8.3.0-amd64-netinst.iso,
  • створіть віртуальну ЕОМ з такими мінімальними параметрами: ОЗП: 1 ГБ, НЖМД: 8 ГБ; підключіть до віртуальної ЕОМ інсталяційний завантажувальний диск Debian;
  • запустіть віртуальну ЕОМ із завантаженням інсталятора Debian з інсталяційного диска;
  • встановіть на НЖМД віртуальної ЕОМ ОС Debian у майже мінімальній конфігурації (наприклад, для запуску QEMU немає жодної необхідності ставити компоненти web-сервера та графічного інтерфейсу користувача):

  • завантажтесвіжовстановлену ОС Debian, та залогіньтесь як користувач root;
  • підключіть можливість встановлення пакетів Debian версії testing, для цього у командному рядку виконайте

Примітка: по-хорошому, краще після apt-get update зробити ще й apt-get dist-upgrade , але якщо хочете використовувати віртуальну машину тільки для запуску Debian MIPS/ARM, то робити це зовсім необов'язково.

Debian для MIPS

Демонстрацію роботи Debian для MIPS під QEMU будемо проводити на віртуальній платі MIPS Malta із процесором архітектури MIPS32R2 у режимі big-endian.

Складання ядра Linux для QEMU Malta

Спершу подбаємо про отримання вихідних текстів ядра — скачаємо їх з kernel.org:

Розпаковуємо архів і переходимо в каталог linux-4.4.3:

Встановлюємо інструментальні засоби (toolchain) для MIPS:

Крім toolchain для MIPS для збирання ядра Linux знадобляться додаткові інструментальні засоби:

Підготуємося до збирання під MIPS:

Змінна ARCH пояснює системі складання ядра (Kbuild), що всі платформено-залежні компоненти ядра брати в каталозі arch/mips , а змінна CROSS_COMPILE явно вказує Kbuild, яким компілятором (а точніше toolchain) користуватися - їх на машині може бути кілька, точність.

Тепер виберемо конфігурацію для ядра з урахуванням заготовленої конфігурації для плати Malta. Заготівля конфігураційного файлу для плати Malta arch/mips/configs/malta_defconfig , яка поставляється в linux-4.4.3 не підходить з двох причин:

  • конфігурація розрахована на плату Malt у режимі little-endian, а хотілося б використовувати режимі big-endian.
  • у конфігурації 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 скачає необхідні для мінімальної кореневої файлової системи пакети Debian версії jessie (stable) із сайту ftp.ru.debian.org/debian (офіційне українське «дзеркало» Debian) для 32-розрядної архітектури 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 , скажімо, налаштувати hostnamе і мережу, додати користувачів і т.д.). Але для цього демонстраційного приклади ми обмежимося встановленням тривіального пароля 123 для користувача root:

Ось тепер кореневу файлову систему можна вважати налаштованою — настав час замітати сліди. Для збереження заархівуємо кореневу файлову систему:

Для запуску під емулятором кореневу файлову систему доведеться помістити на віртуальний накопичувач (у разі Malta це віртуальний диск IDE). Оцінимо, якого розміру диск нам доведеться створити:

Якщо коренева файлова система займає менше 300 МБ, то можна виділити для її зберігання віртуальний диск на 512 МБ. Створимо файл віртуального диска, створимо на ньому файлову систему ext2, на яку скопіюємо нашу кореневу файлову систему:

Тепер запустимо Debian Linux під QEMU:

Після появи запрошення login: можна залогінитися root'ом (пароль - 123) і перевірити тип процесора:

Debianдля ARM

Складання ядра Linux для ARM Versatile PB

Із заготівлею конфігурації ядра для Versatile доведеться повозитися, оскільки емульоване QEMU вбудоване ПЗУ Versatile PB дуже невелике (64 МБ). На щастя, емульована Versatile PB має контролер PCI, якого можна підключити віртуальний контролер SCSI. Однак підтримку вказаної апаратури доведеться включити до ядра примусово:

На відміну від плати MIPS Malta, підтримка завантаження vmlinux для Versatile PB не реалізована, підтримується завантаження образів zImage :

Створення кореневої файлової системи для ARM

Результати перевірки типу процесора (нагаду, пароль - 123):

Висновок