Cross Build mit chrootSie 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
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. VoraussetzungenLaden Sie die Datei ploplinux-src-24.2.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 vorbereiten2.1. Chroot zu VerzeichnisWenn 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-24.2-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 ImagesWenn 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-24.2-arm.img.xz Entpacken Sie die Datei (Achtung, die Datei wird 10GB groß): xz -d ploplinux-24.2-arm.img.xz Sie müssen den Start der System Partition finden.
Starten Sie fdisk ploplinux-24.2-arm.img 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-24.2-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-24.2-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-24.2-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-24.2-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 required, 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 startenStarten Sie das Chroot Setup Skript
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
© 2024 by
Elmar Hanlhofer |