30. 8. 2016

Linux na emulovaných procesorech (MIPS, S390X, PPC64, ARM64, …)

Pokud chce programátor psát přenositelné programy v C++, měl by si pohlídat, aby se správně překládaly a správně fungovaly na různých hardwarových platformách. Každý procesor má jinou šířku registrů, některý používá little endian a jiný big endian. Správně napsaný program by měl fungovat ve všech případech, bez ohledu na tyto rozdíly.

Není ovšem snadné získat přístup k potřebnému množství různých typů počítačů a procesorů. Naštěstí Linux a jeho nastroje qemu, debootstrap a chroot umožňují provozovat emulované prostředí jednotlivých procesorů i na běžně dostupném hardwaru, jak je hezky popsáno v článku Arm64Qemu. Můžeme takto pracovat s procesory, které podporuje Debian, a které zároveň podporuje QEMU.

Příprava hostitelského prostředí

Uvedený článek používá jako hostitelský systém Debian, ovšem ve verzi Stable jsou chyby, které znemožňují spouštění programů sestavených pro některé procesory. Proto použijeme Ubuntu (Server), kde jsou novější verze potřebných programů a tyto chyby jsou tam opraveny.

Doinstalujeme potřebné blíčky:

apt-get install \
 qemu \
 qemu-user-static \
 binfmt-support \
 debootstrap

Instalace Linuxu pro danou hardwarovou platformu

Linuxovou distribuci Debian Jessie pro procesor MIPS nainstalujeme do adresáře debian-mips tímto příkazem:

qemu-debootstrap \
 --arch=mips \
 --keyring /usr/share/keyrings/debian-archive-keyring.gpg \
 --variant=buildd \
 --exclude=debfoster \
 jessie \
 debian-mips \
 http://ftp.debian.org/debian

Vykonání příkazu nějakou dobu trvá, protože všechny potřebné soubory se stahují z internetu.

Spuštění emulovaného Linuxu

Nainstalovanou linuxovou distribuci spustíme příkazem:

chroot debian-mips

Existenci emulovaného prostředí snadno ověříme příkazem:

uname -a

Konfigurace prostředí v emulovaném Linuxu

Jako první nainstalujeme v emulovaném prostředí tyto balíčky:

sudo apt install \
 vim \
 sudo \
 dialog \
 locales

Potřebujeme mít možnost editovat soubory (vim), mít k dispozici administrátorská práva i pro jednotlivé vybrané uživatele (sudo), používat textová dialogová okna v příkazu dpkg-reconfigure (dialog) a mít možnost zvolit národní prostředí (locales).

Zvolíme národní prostředí, např. cs-CZ.UTF-8:

dpkg-reconfigure locales

Zvolíme správnou časovou zónu, např. Europe/Prague:

dpkg-reconfigure tzdata

Vytvoříme účet obyčejného uživatele:

adduser username

Vložíme tohoto uživatele do skupiny sudo, abychom mu umožnili používat příkaz sudo:

adduser username sudo

Konfigurace schroot

Abychom mohli spouštět emulované prostředí i z normálního uživatelského účtu, nainstalujeme příkaz schroot:

apt install schroot

Do jeho konfiguračního souboru /etc/schroot/schroot.conf vložíme tento blok:

[mips]
type=directory
description=Debian stable mips
users=username
directory=/home/username/debian-mips
preserve-environment=true

A upravíme soubor /etc/schroot/default/fstab tak, že odkomentujeme řádek začínající /home. Tím zajistíme, aby emulovaný systém měl svůj vlastní domovský adresář a nepoužíval domovský adresář sdílený s hostitelským systémem.

Spouštění pomocí schroot

Do emulovaného systému se pak dostaneme příkazem:

schroot -c mips