English / Deutsch | Druckversion Plop Linux 
Twitter
twitter

<< Zurück
Cross Compile Linux Kernel

Inhaltsverzeichnis

Weiter >>
Hardware

Cross Build mit chroot


Sie können ein "Cross Compile" durchführen indem Sie von einem laufendem System (z.B. x86) mit chroot in ein ARM System wechseln. Die Vorteile sind ein stabiles System im Hintergrund, einfacher Zugriff vom Hostsystem auf die Daten des chroot Systems, schnelles kompilieren wenn der Hostcomputer schnell ist.

Sie können ein chroot anwenden, wenn das ARM System

  • in einem Verzeichnis gespeichert ist.
  • sich auf einer Festplatten Partition befindet.
  • sich in einem Image einer Partition befindet (Loop Device).
  • sich in einer Partition eines Festplatten Images befindet (Loop Device).

Sie müssen als Root arbeiten, damit es keine Einschränkungen bei den Rechten gibt.

Ich bevorzuge chroot zu einem Verzeichnis. Damit gibt es keine Speicherplatzlimitierung des Image Files.



1. Voraussetzungen
2. Chroot vorbereiten
2.1. Chroot zu Verzeichnis
2.2. Chroot zu einer Partition eines Festplatten Images
3. Das Chroot starten
4. Weitere Links

1. Voraussetzungen


Laden Sie die Datei ploplinux-src-4.3.1.tar.gz und entpacken Sie die Datei herunter um die ARM Chroot Tools zu erhalten. Die Chroot Tools sind im 99-ARM/cross-compile/chroot-tools/ Verzeichnis. Sie können auch die einzelnen Dateien von hier herunterladen.

Dateien/Verzeichnisse:

arm/                         <- Chroot in dieses Verzeichnis

arm-chroot.sh                <- Mit diesem Skript das chroot durchführen

.bashrc                      <- Hinzufügen der roten CHRT Info zum Prompt
			        nach dem chroot in das ARM System

mount.sh                     <- Mounten einer Partition in einem Festplatten
                                Image (als Loop Device), ohne Chroot Setup

qemu-static/                 <- Static qemu zum emulieren der ARM CPU

qemu-wrapper/                <- Wrapper damit QEMU mit den entsprechenden 
                                Parametern gestartet wird

setup-arm-emu-hdimage.sh     <- Setup Chroot Umgebung für eine Partition
                                in einem Festplatten Image (als Loop Device)

setup-arm-emu-local.sh       <- Setup Chroot Umgebung für ein Verzeichnis

Den qemu-wrapper kompilieren: Wechseln Sie in das qemu-wrapper/ Verzeichnis. Starten Sie sh make-qemu-wrapper

Wechseln Sie in das qemu-static/ Verzeichnis und entpacken Sie das QEMU Program für das zu emulierende System. Für die QEMU Datei für ARM qemu-arm-static ist bereits entpackt.


2. Chroot vorbereiten


2.1. Chroot zu Verzeichnis


Wenn Sie chroot mit einem Verzeichnis und nicht mit einem Image oder einer Festplatte verwenden wollen, dann entpacken Sie das ARM System in das arm/ Verzeichnis.

Plop Linux für ARM: ploplinux-desktop-4.3.1-arm.tar.gz

Kopieren Sie die Datei qemu-static/qemu-arm-static and qemu-wrapper/qemu-wrapper in das arm/usr/bin/ Verzeichnis.

Die Vorbereitungen sind erledigt. Siehe weiter unten wie das Chroot gestartet wird.


2.2. Chroot zu einer Partition eines Festplatten Images


Wenn Sie ein Chroot zu einer Partition in einem Festplatten Image durchführen wollen, dann müssen Sie die Partition als Loop Device mit einem Offset mounten.

Laden Sie die komprimierte Datei herunter: ploplinux-4.3.1-arm.img.gz

Entpacken Sie die Datei (Achtung, die Datei wird 10GB groß): gunzip ploplinux-4.3.1-arm.img.gz

Sie müssen den Start der System Partition finden. Starten Sie fdisk ploplinux-4.3.1-arm.img
Verwenden Sie das Kommando p um das Partitionslayout anzuzeigen

Welcome to fdisk (util-linux 2.27).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk ploplinux-4.3.1-arm.img: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xf1ec283e

Device                              Boot Start      End  Sectors Size Id Type
ploplinux-4.3.1-arm.img1        *     2048 20971519 20969472  10G 83 Linux

Command (m for help): 

In diesem Beispiel gibt es eine Partition. Der Start ist 2048. Bearbeiten Sie das mount.sh und das setup-arm-emu-hdimage.sh Skript und setzen den PARTITION_START_OFFSET Wert.

File: mount.sh

#!/bin/sh

ROOT_DIR=arm

IMAGE_FILE=ploplinux-4.3.1-arm.img
PARTITION_START_OFFSET=2048
IMAGE_BLOCKSIZE=512

mount -o loop,offset=$[$PARTITION_START_OFFSET*$IMAGE_BLOCKSIZE] $IMAGE_FILE $ROOT_DIR/

File: setup-arm-emu-hdimage.sh

#!/bin/sh

ROOT_DIR=arm

IMAGE_FILE=ploplinux-4.3.1-arm.img

PARTITION_START_OFFSET=2048
IMAGE_BLOCKSIZE=512

SHARE=/root


mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-wrapper:' > /proc/sys/fs/binfmt_misc/register

mount -o loop,offset=$[$PARTITION_START_OFFSET*$IMAGE_BLOCKSIZE] $IMAGE_FILE $ROOT_DIR/


mount --bind /proc $ROOT_DIR/proc..
mount --bind /tmp $ROOT_DIR/tmp..
mount --bind /sys $ROOT_DIR/sys..
mount --bind /dev $ROOT_DIR/dev..
mount --bind /dev/pts $ROOT_DIR/dev/pts..

#if requried, bind the system /root directory to the chroot environment
#mount --bind $SHARE $ROOT_DIR/mnt

Mounten Sie die Partition zu dem arm/ Verzeichnis indem Sie das Skript mount.sh ausführen.

Kopieren Sie die Dateien qemu-static/qemu-arm-static und qemu-wrapper/qemu-wrapper in das arm/usr/bin/ Verzeichnis.

Die Vorbereitungen sind erledigt. Siehe nächsten Absatz wie das Chroot gestartet wird.


3. Das Chroot starten


Starten Sie das Chroot Setup Skript

  • für das Chroot in das arm/ Verzeichnis: setup-arm-emu-local.sh
  • oder das Chroot zu einer Partition in einem Festplatten Image: setup-arm-emu-hdimage.sh

Dann starten Sie arm-chroot.sh um das Chroot durchzuführen. Starten Sie lscpu um die CPU Daten des emulierten Systems zu sehen.

Sie können nun Programme des ARM System starten. Starten Sie z.B. den Midnight Commander mc um schnell auf dem ARM System navigieren zu können. Sie können Programme kompilieren als ob die emulierte Hardware echt wäre.

Sie können arm-chroot.sh parallel in anderen Terminals starten und so parallel auf dem ARM System arbeiten.


4. Weitere Links


http://community.arm.com/groups/embedded/blog/2013/11/21/cross-compilation-for-arm
https://wiki.debian.org/QemuUserEmulation



<< Zurück
Cross Compile Linux Kernel

Inhaltsverzeichnis

Weiter >>
Hardware


© 2016 by Elmar Hanlhofer