From Fedora Project Wiki

< Architectures‎ | ARM

Revision as of 15:55, 6 February 2013 by Codonell (talk | contribs) (Wrap long lines with "\".)

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
A screen shot of Fedora 18 for ARM on QEMU .

Versatile Express

The Versatile Express family of development platforms provides users with a modular board design for use testing different ARM SOC design implementations. QEMU provides the ability to emulate ARM Versatile Express for Cortex-A9 on your desktop computer for easy experimentation!

Technical Specifications

  • ARM Versatile Express for Cortex-A9
  • 1GB RAM
  • 10/100Mbit/s Ethernet

For more information on Versatile Express or QEMU visit their websites.

Running Fedora through QEMU

This page will give you detailed instructions for running Fedora 18 through QEMU. The tarball includes all that is needed to boot your system including the root filesystem image and the pre-extracted kernel and initramfs. Also, included for your convenience is a script to boot using a serial connection or the XFCE desktop. WARNING: If you will be doing development with this image then it is recommended that you add 10-15GB to the root partition before booting.

Download the image

There are two Versatile Express images available for use with QEMU, a hardware floating point (armhfp), and a software floating point(arm). If you are unsure of which to choose, the hard floating point image is recommended, and will be used in the provided examples below (adjust accordingly for 'arm'):

Download and verify the checksum:

wget http://dl.fedoraproject.org/pub/fedora-secondary/releases/18/Images/armhfp/Fedora-18-armhfp-Images-CHECKSUM
sha256sum --check Fedora-18-armhfp-Images-CHECKSUM

Preparing the Image

Linux Users

Extract the tarball using the graphical user interface or the following commandline option:

tar xvJf Fedora-18-vexpress-xfce-armhfp.tar.xz

Windows Users

QEMU is also available on Windows but is not yet covered in this guide. For more information on running QEMU on Windows please visit their website.

Using Fedora through QEMU

First you will need to install the ARM QEMU package (this example is using Fedora)

yum install qemu-system-arm

Once installed, change to the boot directory of the extracted kernel package:

cd Fedora-18-vexpress-xfce-armhfp/boot/

From there execute the provided script, choosing to boot with or without a graphical interface.

./boot-vexpress -h
Usage: ./boot-vexpress [--gui] --kernel=vmlinuz... --ramfs=initramfs --image=fsimage [--dtb=vexpress.dtb]

For serial console:

 ./boot-vexpress --kernel=vmlinuz-3.6.10-8.fc18.armv7hl \
    --ramfs=initramfs-3.6.10-8.fc18.armv7hl.img \
    --image=../Fedora-18-vexpress-xfce-armhfp.img

For XFCE Desktop:

 ./boot-vexpress --kernel=vmlinuz-3.6.10-8.fc18.armv7hl \
    --ramfs=initramfs-3.6.10-8.fc18.armv7hl.img \
    --image=../Fedora-18-vexpress-xfce-armhfp.img \
    --gui

The default root password is "fedora". This should be changed immediately.

Expanding the Disk Image

You can easily expand the root partition of the disk image using qemu-img.

For example to increase the image size by 10GB you can issue:

 qemu-img resize ./file.img +10G

Doing this before booting the image will cause the filesystem to be automatically resized.

If you have already booted the system then you will need to do the following:

  • Enlarge the disk as before:
qemu-img resize ./file.img +10G
  • Boot into the guest and use fdisk to find the offset of the root filesystem:
$ fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 14.0 GB, 13958643712 bytes, 27262976 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
Disk identifier: 0x0000b774

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            2048      411647      204800   83  Linux
/dev/mmcblk0p2          411648     1435647      512000   82  Linux swap / Solaris
/dev/mmcblk0p3         1435648     5941247     2252800   83  Linux
  • Using the offset in bytes i.e. start block * sector size, attach the root partition to a loop device:
$ losetup -o 735051776 /dev/loop0 ./file.img
  • Resize the filesystem to consume all empty space:
$ e2fsck /dev/loop0
$ resize2fs /dev/loop0
  • Resize the partition by attaching the entire device and editing the partition table:
$ losetup -d /dev/loop0
$ losetup /dev/loop0 ./file.img
$ fdisk /dev/loop0
Welcome to fdisk (util-linux 2.21.2).

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 /dev/loop0: 14.0 GB, 13958643712 bytes
255 heads, 63 sectors/track, 1697 cylinders, total 27262976 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
Disk identifier: 0x0000b774

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1            2048      411647      204800   83  Linux
/dev/loop0p2          411648     1435647      512000   82  Linux swap / Solaris
/dev/loop0p3         1435648     5941247     2252800   83  Linux

Command (m for help): d
Partition number (1-4): 3
Partition 3 is deleted

Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
Partition number (1-4, default 3): 3
First sector (1435648-27262975, default 1435648): 
Using default value 1435648
Last sector, +sectors or +size{K,M,G} (1435648-27262975, default 27262975): 
Using default value 27262975
Partition 3 of type Linux and of size 12.3 GiB is set
Command (m for help): p

Disk /dev/loop0: 14.0 GB, 13958643712 bytes
255 heads, 63 sectors/track, 1697 cylinders, total 27262976 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
Disk identifier: 0x0000b774

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1            2048      411647      204800   83  Linux
/dev/loop0p2          411648     1435647      512000   82  Linux swap / Solaris
/dev/loop0p3         1435648    27262975    12913664   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
$ partprobe /dev/loop0
$ losetup -d /dev/loop0
  • Boot into the guest and verify that everything boots and mounts OK. You should see:
...
[    8.171246] mmc0: SD Status: Invalid Allocation Unit size.
[    8.171638] mmc0: host does not support reading read-only switch. assuming write-enable.
[    8.181745] mmc0: new SDHC card at address 4567
[    8.905362] mmcblk0: mmc0:4567 QEMU! 13.0 GiB 
[    8.931486]  mmcblk0: p1 p2 p3
...
[   10.255200] EXT4-fs (mmcblk0p3): mounted filesystem with ordered data mode. Opts: (null)
[   11.374115] EXT4-fs (mmcblk0p3): mounted filesystem with ordered data mode. Opts: (null)
...

Release Notes

  • Images were composed using tools in Fedora 17 due to continuing work on Fedora 18.
  • When upgrading to the 3.7.X kernel you will require a device tree binary (.dtb) file for the system to boot. The provided 'boot-vexpress' script allows for the optional use of a 'dtb' file and will give a warning when booting kernels above 3.6.x.
    • The XFCE Desktop is not currently available when using the 3.7.x kernel.

Additional Support

There are Fedora ARM users all around the globe - if you need assistance, would like to provide feedback or contribute to Fedora ARM please visit us on the IRC - we can be found in #fedora-arm on Freenode. You can also contact us on the mailing list - arm@lists.fedoraproject.org