ARM-Virtuelle Maschine unter Ubuntu

ARM-Virtuelle Maschine unter Ubuntu

Ich folgedieser Leitfadenum eine virtuelle ARM-Umgebung auf Ubuntu zu installieren.

  • Ich habe die Pakete Linaro und QEMU installiert:

sudo add-apt-repository ppa:linaro-maintainers/tools
sudo apt-get install linaro-image-tools qemu-user-static qemu-system

  • Cross-Compiler:

sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi

  • Eine Linaro-Version und ein Hardwarepaket heruntergeladen:

wget http://releases.linaro.org/platform/linaro-n/nano/alpha-3/linaro-natty-nano-tar-20110302-0.tar.gz
wget http://releases.linaro.org/platform/linaro-n/hwpacks/alpha-3/hwpack_linaro-vexpress_20110302-0_armel_supported.tar.gz

  • Ein VM-Disk-Image erstellt:

linaro-media-create --image_file vexpress.img --dev vexpress \
--binary linaro-natty-nano-tar-20110302-0.tar.gz \
--hwpack hwpack_linaro-vexpress_20110302-0_armel_supported.tar.gz

Ich scheitere anExtrahieren des Kernels und des Initrd. In der Anleitung steht:

sudo mount -o loop,offset="$(file vexpress.img | awk 'BEGIN { RS=";"; } /partition 2/ { print $7*512; }')" \
-t auto vexpress.img /mnt/tmp

Aber ich erhalte die Fehlermeldung:

mount: Mount-Optionen konnten nicht analysiert werden

In der Anleitung gibt es einen Hinweis, der besagt:

Die tatsächlichen Namen der Dateien können in Ihrem Build leicht abweichen.

Weiß also jemand, wie man diese letzte Zeile so ändert, dass sie auf Ubuntu passt?

Antwort1

sudo mount -o loop,offset="$(file vexpress.img | awk 'BEGIN { RS=";"; } \
/partition 2/ { print $7*512; }')" \
-t auto vexpress.img /mnt/tmp

Was der obige Befehl macht, ist eigentlich einfach: Er findet den Startsektor der Partition 2 des Images vexpress.img, multipliziert ihn mit 512 und verwendet das Ergebnis als Offset, um es als Loop-Gerät zu mounten.

Der mountBefehl akzeptiert Offsetwerte inByte. Jeder Sektor hat 512 Bytes, wenn man also den Startsektor-Offset mit 512 multipliziert, erhält man den Start-Offset in Bytes.

Hier ist eine alternative Möglichkeit, dies zu tun: (Ich nehme als Beispiel ein Roh-Raspbian-Image)

  1. Finden Sie den Offset:

    $ fdisk -lu 2016-09-23-raspbian-jessie-lite.img 
    Disk 2016-09-23-raspbian-jessie-lite.img: 1.3 GiB, 1389363200 bytes, 2713600 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: 0x5a7089a1
    
    Device                               Boot  Start     End Sectors  Size Id Type
    2016-09-23-raspbian-jessie-lite.img1        8192  137215  129024   63M  c W95 FAT32 (LBA)
    2016-09-23-raspbian-jessie-lite.img2      137216 2713599 2576384  1.2G 83 Linux
    

Der Start-Offset von Partition zwei ist 137216. Wie bei vexpress.imgist Partition 2 die Stammpartition, die uns interessiert.

  1. Einfache Mathematik:

    $ perl -e "print 137216*512"
    70254592
    
  2. Montieren Sie es:

    sudo mount -o loop,offset=70254592 vexpress.img /mnt/tmp
    

verwandte Informationen