Posts Tagged ‘qemu’

How to Run Ubuntu 16.04 Aarch64 (64-bit ARM) Cloud Images on Your Intel/AMD Linux Computer with QEMU

May 10th, 2016 12 comments

With the recent launch of several low cost Cortex A53 development boards, 64-bit ARM hardware is now pretty common and inexpensive, but if you want to run 64-bit ARM code on your x86 Linux computer, Riku Voipio, a software engineer working for Linaro, wrote some instructions to run Ubuntu 16.04 Aarch64 Cloud image in QEMU. Ubuntu cloud images are “the official Ubuntu images and are pre-installed disk images that have been customized by Ubuntu engineering to run on public clouds that provide Ubuntu Certified Images, Openstack, LXD, and more. ”  So the instructions are also useful if you want to easily try such packages on 64-bit ARM platform.


Ubuntu 16.04 with Linux 4.4 Running on a Dual Core Cortex A57 Processor in QEMU

I’ve tried those instructions myself on my Ubuntu 14.04 machine with and AMD FX8350 processor, and they worked pretty well, and the only things I had to find out by myself was to install a recent version of qemu.

First, we’ll need to install qemu & cloud-utils, and download QEMU EFI firmware  as well as the Ubuntu 16.04 Xenial server Cloud image:

The instructions require qemu-system-aarch64 version 2.5, and my system only comes with qemu 2.0.0

So I had to find a qemu ppa to install a more recent version:

I now have version 2.5:

Since the Cloud images don’t come with default username and password, they need to configured with cloud-utils. To do so, I created cloud-utils as follows:

You simply need to change the file with your username, and RSA key, which should be in ~/.ssh/ If you don’t have that file you may want to read my post  showing how to create the SSH key and login without password. Cloud config can take many arguments, including packages to install during the first boot, and you can learn all about it on Cloud-init documentation.

Now you can initialize the cloud image, and run it:

The boot until the login prompt tool about 3 minutes on my machine. Here’s the boot log:

error: no suitable video mode found.
EFI stub: Booting Linux Kernel…
EFI stub: Using DTB from configuration table
EFI stub: Exiting boot services and installing virtual address map…
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 4.4.0-22-generic ([email protected]) (gcc version 5.3.1 20160413 (Ubuntu/Linaro 5.3.1-14ubuntu2) ) #39-Ubuntu SMP Thu May 5 16:54:53 UTC 2016 (Ubuntu 4.4.0-22.39-generic 4.4.8)
[ 0.000000] Boot CPU: AArch64 Processor [411fd070]
[ 0.000000] efi: Getting EFI parameters from FDT:
[ 0.000000] EFI v2.50 by EDK II
[ 0.000000] efi: SMBIOS=0x7c020000 SMBIOS 3.0=0x7bf90000 PROP=0x7f7b8d78 ACPI=0x7c040000 ACPI 2.0=0x7c040014
[ 0.000000] No NUMA configuration found
[ 0.000000] NUMA: Faking a node at [mem 0x0000000000000000-0x000000007fffffff]
[ 0.000000] NUMA: Adding memblock [0x40000000 – 0x7fffffff] on node 0
[ 0.000000] NUMA: Initmem setup node 0 [mem 0x40000000-0x7fffffff]
[ 0.000000] NUMA: NODE_DATA [mem 0x7fff2280-0x7fff3fff]
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x0000000040000000-0x000000007fffffff]
[ 0.000000] Normal empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000040000000-0x000000007fffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x000000007fffffff]
[ 0.000000] psci: probing for conduit method from DT.
[ 0.000000] psci: PSCIv0.2 detected in firmware.
[ 0.000000] psci: Using standard PSCI v0.2 function IDs
[ 0.000000] psci: Trusted OS migration not required
[ 0.000000] PERCPU: Embedded 17 pages/cpu @ffff80003ffc7000 s31128 r8192 d30312 u69632
[ 0.000000] Detected PIPT I-cache on CPU0
[ 0.000000] CPU features: enabling workaround for ARM erratum 832075
[ 0.000000] CPU features: enabling workaround for ARM erratum 834220
[ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 258048
[ 0.000000] Policy zone: DMA
[ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-22-generic root=LABEL=cloudimg-rootfs vt.handoff=7
[ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[ 0.000000] software IO TLB [mem 0x77dc0000-0x7bdc0000] (64MB) mapped at [ffff800037dc0000-ffff80003bdbffff]
[ 0.000000] Memory: 923168K/1048576K available (8720K kernel code, 1006K rwdata, 3772K rodata, 760K init, 786K bss, 125408K reserved, 0K cma-reserved)
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] vmalloc : 0xffff000000000000 – 0xffff7bffbfff0000 (126974 GB)
[ 0.000000] vmemmap : 0xffff7bffc0000000 – 0xffff7fffc0000000 ( 4096 GB maximum)
[ 0.000000] 0xffff7bffc0000000 – 0xffff7bffc1000000 ( 16 MB actual)
[ 0.000000] fixed : 0xffff7ffffa7fd000 – 0xffff7ffffac00000 ( 4108 KB)
[ 0.000000] PCI I/O : 0xffff7ffffae00000 – 0xffff7ffffbe00000 ( 16 MB)
[ 0.000000] modules : 0xffff7ffffc000000 – 0xffff800000000000 ( 64 MB)
[ 0.000000] memory : 0xffff800000000000 – 0xffff800040000000 ( 1024 MB)
[ 0.000000] .init : 0xffff800000cb5000 – 0xffff800000d73000 ( 760 KB)
[ 0.000000] .text : 0xffff800000080000 – 0xffff800000cb5000 ( 12500 KB)
[ 0.000000] .data : 0xffff800000d84000 – 0xffff800000e7fa00 ( 1007 KB)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
[ 0.000000] Hierarchical RCU implementation.
[ 0.000000] Build-time adjustment of leaf fanout to 64.
[ 0.000000] RCU restricting CPUs from NR_CPUS=128 to nr_cpu_ids=2.
[ 0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=64, nr_cpu_ids=2
[ 0.000000] NR_IRQS:64 nr_irqs:64 0
[ 0.000000] GICv2m: range[0x8020000:0x8020fff], SPI[80:144]
[ 0.000000] Architected cp15 timer(s) running at 62.50MHz (virt).
[ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x1cd42e208c, max_idle_ns: 881590405314 ns
[ 0.000135] sched_clock: 56 bits at 62MHz, resolution 16ns, wraps every 4398046511096ns
[ 0.006123] vt handoff: transparent VT on vt#7
[ 0.006565] Console: colour dummy device 80×25
[ 0.007325] console [tty0] enabled
[ 0.008449] Calibrating delay loop (skipped), value calculated using timer frequency.. 125.00 BogoMIPS (lpj=250000)
[ 0.008599] pid_max: default: 32768 minimum: 301
[ 0.009541] Security Framework initialized
[ 0.009610] Yama: becoming mindful.
[ 0.011833] AppArmor: AppArmor initialized
[ 0.015594] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)
[ 0.017840] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)
[ 0.018889] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes)
[ 0.018992] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes)
[ 0.029386] Initializing cgroup subsys io
[ 0.029795] Initializing cgroup subsys memory
[ 0.030134] Initializing cgroup subsys devices
[ 0.030245] Initializing cgroup subsys freezer
[ 0.030346] Initializing cgroup subsys net_cls
[ 0.030421] Initializing cgroup subsys perf_event
[ 0.030490] Initializing cgroup subsys net_prio
[ 0.030574] Initializing cgroup subsys hugetlb
[ 0.030676] Initializing cgroup subsys pids
[ 0.031176] ftrace: allocating 30291 entries in 119 pages
[ 0.725663] Remapping and enabling EFI services.
[ 0.726171] EFI remap 0x0000000004000000 => 0000000040000000
[ 0.726421] EFI remap 0x0000000009010000 => 0000000044000000
[ 0.726500] EFI remap 0x000000007be40000 => 0000000044010000
[ 0.726557] EFI remap 0x000000007bea0000 => 0000000044070000
[ 0.726576] EFI remap 0x000000007beb0000 => 0000000044080000
[ 0.726597] EFI remap 0x000000007bf30000 => 0000000044100000
[ 0.726615] EFI remap 0x000000007bf40000 => 0000000044110000
[ 0.726632] EFI remap 0x000000007bf50000 => 0000000044120000
[ 0.726656] EFI remap 0x000000007c020000 => 00000000441d0000
[ 0.726673] EFI remap 0x000000007c050000 => 00000000441e0000
[ 0.726689] EFI remap 0x000000007c060000 => 00000000441f0000
[ 0.726706] EFI remap 0x000000007c070000 => 0000000044200000
[ 0.726771] EFI remap 0x000000007c0f0000 => 0000000044280000
[ 0.726802] EFI remap 0x000000007c100000 => 0000000044290000
[ 0.726819] EFI remap 0x000000007c110000 => 00000000442a0000
[ 0.726842] EFI remap 0x000000007c1e0000 => 0000000044370000
[ 0.726858] EFI remap 0x000000007c1f0000 => 0000000044380000
[ 0.726876] EFI remap 0x000000007c200000 => 0000000044390000
[ 0.726951] EFI remap 0x000000007c280000 => 0000000044410000
[ 0.726981] EFI remap 0x000000007c290000 => 0000000044420000
[ 0.726998] EFI remap 0x000000007c2a0000 => 0000000044430000
[ 0.727016] EFI remap 0x000000007f5b0000 => 0000000044460000
[ 0.727036] EFI remap 0x000000007f600000 => 00000000444b0000
[ 0.727053] EFI remap 0x000000007f610000 => 00000000444c0000
[ 0.727071] EFI remap 0x000000007f650000 => 00000000444f0000
[ 0.727618] ASID allocator initialised with 65536 entries
[ 0.746070] Detected PIPT I-cache on CPU1
[ 0.747515] CPU1: Booted secondary processor [411fd070]
[ 0.749129] Brought up 2 CPUs
[ 0.749201] SMP: Total of 2 processors activated.
[ 0.749430] CPU: All CPU(s) started at EL1
[ 0.750222] alternatives: patching kernel code
[ 0.766144] devtmpfs: initialized
[ 0.775039] evm: security.selinux
[ 0.775075] evm: security.SMACK64
[ 0.775089] evm: security.SMACK64EXEC
[ 0.775102] evm: security.SMACK64TRANSMUTE
[ 0.775116] evm: security.SMACK64MMAP
[ 0.775129] evm: security.ima
[ 0.775142] evm: security.capability
[ 0.778658] SMBIOS 3.0.0 present.
[ 0.779858] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.782640] pinctrl core: initialized pinctrl subsystem
[ 0.794894] NET: Registered protocol family 16
[ 0.810548] cpuidle: using governor ladder
[ 0.823124] cpuidle: using governor menu
[ 0.823790] vdso: 2 pages (1 code @ ffff800000d89000, 1 data @ ffff800000d88000)
[ 0.824292] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[ 0.826321] DMA: preallocated 256 KiB pool for atomic allocations
[ 0.827846] Serial: AMBA PL011 UART driver
[ 0.855107] 9000000.pl011: ttyAMA0 at MMIO 0x9000000 (irq = 37, base_baud = 0) is a PL011 rev1
[ 0.893760] console [ttyAMA0] enabled
[ 0.946328] ACPI: Interpreter disabled.
[ 0.949605] vgaarb: loaded
[ 0.955849] SCSI subsystem initialized
[ 0.958552] usbcore: registered new interface driver usbfs
[ 0.959246] usbcore: registered new interface driver hub
[ 0.959790] usbcore: registered new device driver usb
[ 0.971932] NetLabel: Initializing
[ 0.972153] NetLabel: domain hash size = 128
[ 0.972377] NetLabel: protocols = UNLABELED CIPSOv4
[ 0.973808] NetLabel: unlabeled traffic allowed by default
[ 0.976092] clocksource: Switched to clocksource arch_sys_counter
[ 1.099009] AppArmor: AppArmor Filesystem Enabled
[ 1.100738] pnp: PnP ACPI: disabled
[ 1.149920] NET: Registered protocol family 2
[ 1.157502] TCP established hash table entries: 8192 (order: 4, 65536 bytes)
[ 1.158260] TCP bind hash table entries: 8192 (order: 5, 131072 bytes)
[ 1.158865] TCP: Hash tables configured (established 8192 bind 8192)
[ 1.160369] UDP hash table entries: 512 (order: 2, 16384 bytes)
[ 1.160845] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
[ 1.162945] NET: Registered protocol family 1
[ 1.169176] Trying to unpack rootfs image as initramfs…
[ 38.466085] Freeing initrd memory: 20908K (ffff80002a69a000 – ffff80002bb05000)
[ 38.467445] kvm [1]: HYP mode not available
[ 38.471688] futex hash table entries: 512 (order: 4, 65536 bytes)
[ 38.472992] audit: initializing netlink subsys (disabled)
[ 38.474139] audit: type=2000 audit(37.848:1): initialized
[ 38.480527] Initialise system trusted keyring
[ 38.485484] HugeTLB registered 2 MB page size, pre-allocated 0 pages
[ 38.510331] zbud: loaded
[ 38.516406] VFS: Disk quotas dquot_6.6.0
[ 38.517291] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[ 38.528806] fuse init (API version 7.23)
[ 38.532598] Key type big_key registered
[ 38.533202] Allocating IMA MOK and blacklist keyrings.
[ 38.546907] Key type asymmetric registered
[ 38.547225] Asymmetric key parser ‘x509’ registered
[ 38.548522] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 249)
[ 38.549875] io scheduler noop registered
[ 38.550151] io scheduler deadline registered (default)
[ 38.551097] io scheduler cfq registered
[ 38.557770] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[ 38.558156] pciehp: PCI Express Hot Plug Controller Driver version: 0.4
[ 38.559066] PCI host bridge [email protected] ranges:
[ 38.559706] IO 0x3eff0000..0x3effffff -> 0x00000000
[ 38.560395] MEM 0x10000000..0x3efeffff -> 0x10000000
[ 38.560672] MEM 0x8000000000..0xffffffffff -> 0x8000000000
[ 38.563045] pci-host-generic 3f000000.pcie: PCI host bridge to bus 0000:00
[ 38.563709] pci_bus 0000:00: root bus resource [bus 00-0f]
[ 38.564346] pci_bus 0000:00: root bus resource [io 0x0000-0xffff]
[ 38.564681] pci_bus 0000:00: root bus resource [mem 0x10000000-0x3efeffff]
[ 38.565020] pci_bus 0000:00: root bus resource [mem 0x8000000000-0xffffffffff]
[ 38.585136] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[ 38.615449] msm_serial: driver initialized
[ 38.620995] Unable to detect cache hierarchy from DT for CPU 0
[ 38.681657] brd: module loaded
[ 38.707298] loop: module loaded
[ 38.744265] vdb: vdb1 vdb15
[ 38.755415] libphy: Fixed MDIO Bus: probed
[ 38.755791] tun: Universal TUN/TAP device driver, 1.6
[ 38.756571] tun: (C) 1999-2004 Max Krasnyansky <[email protected]>
[ 38.769050] PPP generic driver version 2.4.2
[ 38.772339] ehci_hcd: USB 2.0 ‘Enhanced’ Host Controller (EHCI) Driver
[ 38.772918] ehci-pci: EHCI PCI platform driver
[ 38.773577] ohci_hcd: USB 1.1 ‘Open’ Host Controller (OHCI) Driver
[ 38.774282] ohci-pci: OHCI PCI platform driver
[ 38.775318] uhci_hcd: USB Universal Host Controller Interface driver
[ 38.781025] mousedev: PS/2 mouse device common for all mice
[ 38.785156] i2c /dev entries driver
[ 38.790822] device-mapper: uevent: version 1.0.3
[ 38.793082] device-mapper: ioctl: 4.34.0-ioctl (2015-10-28) initialised: [email protected]
[ 38.795243] ledtrig-cpu: registered to indicate activity on CPUs
[ 38.795611] EFI Variables Facility v0.08 2004-May-17
[ 38.808496] NET: Registered protocol family 10
[ 38.816988] NET: Registered protocol family 17
[ 38.817611] Key type dns_resolver registered
[ 38.818458] Registered cp15_barrier emulation handler
[ 38.818815] Registered setend emulation handler
[ 38.822549] registered taskstats version 1
[ 38.823009] Loading compiled-in X.509 certificates
[ 38.833206] Loaded X.509 cert ‘Build time autogenerated kernel key: a959bfeeeafa5217003d029b713b4f3761d43036’
[ 38.834712] zswap: loaded using pool lzo/zbud
[ 38.939508] Key type trusted registered
[ 39.135319] Key type encrypted registered
[ 39.135696] AppArmor: AppArmor sha1 policy hashing enabled
[ 39.136679] ima: No TPM chip found, activating TPM-bypass!
[ 39.138753] evm: HMAC attrs: 0x1
[ 39.141193] hctosys: unable to open rtc device (rtc0)
[ 39.146796] uart-pl011 9000000.pl011: no DMA platform data
[ 39.194827] Freeing unused kernel memory: 760K (ffff800000cb5000 – ffff800000d73000)
[ 39.195339] Freeing alternatives memory: 48K (ffff800000d73000 – ffff800000d7f000)
Loading, please wait…
starting version 229
[ 39.750435] random: systemd-udevd urandom read with 1 bits of entropy available
Begin: Loading essential drivers … [ 46.415344] md: linear personality registered for level -1
[ 46.515772] md: multipath personality registered for level -4
[ 46.620934] md: raid0 personality registered for level 0
[ 46.726240] md: raid1 personality registered for level 1
[ 46.926037] raid6: int64x1 gen() 474 MB/s
[ 46.992135] raid6: int64x1 xor() 397 MB/s
[ 47.060108] raid6: int64x2 gen() 892 MB/s
[ 47.128118] raid6: int64x2 xor() 588 MB/s
[ 47.196003] raid6: int64x4 gen() 1156 MB/s
[ 47.264122] raid6: int64x4 xor() 777 MB/s
[ 47.332052] raid6: int64x8 gen() 538 MB/s
[ 47.400093] raid6: int64x8 xor() 450 MB/s
[ 47.468291] raid6: neonx1 gen() 330 MB/s
[ 47.536209] raid6: neonx1 xor() 189 MB/s
[ 47.604233] raid6: neonx2 gen() 398 MB/s
[ 47.672095] raid6: neonx2 xor() 163 MB/s
[ 47.740157] raid6: neonx4 gen() 440 MB/s
[ 47.808224] raid6: neonx4 xor() 238 MB/s
[ 47.876048] raid6: neonx8 gen() 385 MB/s
[ 47.944072] raid6: neonx8 xor() 230 MB/s
[ 47.944350] raid6: using algorithm int64x4 gen() 1156 MB/s
[ 47.944628] raid6: …. xor() 777 MB/s, rmw enabled
[ 47.944939] raid6: using intx1 recovery algorithm
[ 47.952791] xor: measuring software checksum speed
[ 47.996241] 8regs : 1440.000 MB/sec
[ 48.036207] 8regs_prefetch: 1445.000 MB/sec
[ 48.076186] 32regs : 1336.000 MB/sec
[ 48.116043] 32regs_prefetch: 1343.000 MB/sec
[ 48.116350] xor: using function: 8regs_prefetch (1445.000 MB/sec)
[ 48.123591] async_tx: api initialized (async)
[ 48.216579] md: raid6 personality registered for level 6
[ 48.216952] md: raid5 personality registered for level 5
[ 48.217259] md: raid4 personality registered for level 4
[ 48.475262] md: raid10 personality registered for level 10
Begin: Running /scripts/init-premount … done.
Begin: Mounting root file system … Begin: Running /scripts/local-top … done.
Begin: Running /scripts/local-premount … [ 49.365334] Btrfs loaded
Scanning for Btrfs filesystems
Warning: fsck not present, so skipping root file system
[ 50.489875] EXT4-fs (vdb1): mounted filesystem with ordered data mode. Opts: (null)
Begin: Running /scripts/local-bottom … done.
Begin: Running /scripts/init-bottom … Warning: overlayroot: debug is busted
[ 52.425729] systemd[1]: System time before build time, advancing clock.
[ 52.602459] systemd[1]: Detected virtualization qemu.
[ 52.602901] systemd[1]: Detected architecture arm64.Welcome to Ubuntu 16.04 LTS![ 52.615513] systemd[1]: Set hostname to .
[ 52.631062] systemd[1]: Initializing machine ID from random generator.
[ 52.633892] systemd[1]: Installed transient /etc/machine-id file.
[ 54.777420] systemd[1]: Created slice System Slice.
[ OK ] Created slice System Slice.
[ 54.787015] systemd[1]: Created slice system-getty.slice.
[ OK ] Created slice system-getty.slice.
[ 54.791265] systemd[1]: Listening on Journal Socket.
[ OK ] Listening on Journal Socket.
[ 54.827391] systemd[1]: Starting Create list of required static device nodes for the current kernel…
Starting Create list of required st… nodes for the current kernel…
[ 54.839431] systemd[1]: Reached target User and Group Name Lookups.
[ OK ] Reached target User and Group Name Lookups.
[ 54.900677] systemd[1]: Listening on Journal Audit Socket.
[ OK ] Listening on Journal Audit Socket.
[ 54.937520] systemd[1]: Listening on Syslog Socket.
[ OK ] Listening on Syslog Socket.
[ 55.061147] systemd[1]: Mounting Debug File System…
Mounting Debug File System…
[ 55.125920] systemd[1]: Created slice system-serial\x2dgetty.slice.
[ OK ] Created slice system-serial\x2dgetty.slice.
[ 55.130335] systemd[1]: Listening on udev Control Socket.
[ OK ] Listening on udev Control Socket.
[ 55.166043] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe.
[ OK ] Listening on /dev/initctl Compatibility Named Pipe.
[ 55.203000] systemd[1]: Created slice User and Session Slice.
[ OK ] Created slice User and Session Slice.
[ 55.230696] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[ OK ] Started Forward Password Requests to Wall Directory Watch.
[ 55.270726] systemd[1]: Starting Uncomplicated firewall…
Starting Uncomplicated firewall…
[ 55.302712] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.
[ OK ] Set up automount Arbitrary Executab…ats File System Automount Point.
[ 55.342570] systemd[1]: Listening on LVM2 metadata daemon socket.
[ OK ] Listening on LVM2 metadata daemon socket.
[ 55.437727] systemd[1]: Mounting Huge Pages File System…
Mounting Huge Pages File System…
[ 55.478207] systemd[1]: Reached target Swap.
[ OK ] Reached target Swap.
[ 55.505859] systemd[1]: Reached target Slices.
[ OK ] Reached target Slices.
[ 55.653438] systemd[1]: Mounting POSIX Message Queue File System…
Mounting POSIX Message Queue File System…
[ 55.671273] systemd[1]: Reached target Encrypted Volumes.
[ OK ] Reached target Encrypted Volumes.
[ 55.826639] systemd[1]: Starting Remount Root and Kernel File Systems…
Starting Remount Root and Kernel File Systems…
[ 55.895229] systemd[1]: Listening on Journal Socket (/dev/log).
[ OK ] Listening on Journal Socket (/dev/log).
[ 55.978436] systemd[1]: Listening on Device-mapper event daemon FIFOs.
[ OK ] Listening on Device-mapper event daemon FIFOs.
[ 56.039144] systemd[1]: Listening on udev Kernel Socket.
[ OK ] Listening on udev Kernel Socket.
[ 56.338358] systemd[1]: Starting Load Kernel Modules…
Starting Load Kernel Modules…
[ 56.393745] systemd[1]: Listening on LVM2 poll daemon socket.
[ OK ] Listening on LVM2 poll daemon socket.
[ 56.554266] systemd[1]: Starting Nameserver information manager…
Starting Nameserver information manager…
[ 56.634591] systemd[1]: Starting Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress polling…
Starting Monitoring of LVM2 mirrors… dmeventd or progress polling…
[ 56.742477] systemd[1]: Starting Journal Service…
Starting Journal Service…
[ 57.001027] systemd[1]: Mounted POSIX Message Queue File System.
[ OK ] Mounted POSIX Message Queue File System.
[ 57.064715] systemd[1]: Mounted Debug File System.
[ OK ] Mounted Debug File System.
[ 57.101124] systemd[1]: Mounted Huge Pages File System.
[ OK ] Mounted Huge Pages File System.
[ 57.227288] systemd[1]: Started Create list of required static device nodes for the current kernel.
[ OK ] Started Create list of required sta…ce nodes for the current kernel.
[ 57.258454] systemd[1]: Started Uncomplicated firewall.
[ OK ] Started Uncomplicated firewall.
[ 57.304651] EXT4-fs (vdb1): re-mounted. Opts: (null)
[ 57.527628] systemd[1]: Started Remount Root and Kernel File Systems.
[ OK ] Started Remount Root and Kernel File Systems.
[ 58.358611] systemd[1]: Started Nameserver information manager.
[ OK ] Started Nameserver information manager.
[ 59.850589] Loading iSCSI transport class v2.0-870.
[ 60.059388] systemd[1]: Started LVM2 metadata daemon.
[ OK ] Started LVM2 metadata daemon.
[ 60.205315] systemd[1]: Starting Load/Save Random Seed…
Starting Load/Save Random Seed…
[ 60.467673] iscsi: registered transport (tcp)
[ 60.479537] systemd[1]: Starting udev Coldplug all Devices…
Starting udev Coldplug all Devices…
[ 60.566825] systemd[1]: Starting Create Static Device Nodes in /dev…
Starting Create Static Device Nodes in /dev…
[ 60.630029] systemd[1]: Started Journal Service.
[ OK ] Started Journal Service.
Starting Flush Journal to Persistent Storage…
[ OK ] Started Load/Save Random Seed.
[ 62.065118] systemd-journald[368]: Received request to flush runtime journal from PID 1
[ OK ] Started Flush Journal to Persistent Storage.
[ 62.627589] iscsi: registered transport (iser)
[ OK ] Started Load Kernel Modules.
[ OK ] Started Monitoring of LVM2 mirrors,…ng dmeventd or progress polling.
Starting Apply Kernel Variables…
Mounting FUSE Control File System…
[ OK ] Mounted FUSE Control File System.
[ OK ] Started Create Static Device Nodes in /dev.
Starting udev Kernel Device Manager…
[ OK ] Started Apply Kernel Variables.
[ OK ] Started udev Coldplug all Devices.
[ OK ] Started udev Kernel Device Manager.
[ OK ] Reached target Local File Systems (Pre).
[ OK ] Started Dispatch Password Requests to Console Directory Watch.
[ OK ] Found device /dev/ttyAMA0.
[ OK ] Found device /dev/disk/by-label/UEFI.
Mounting /boot/efi…
[ OK ] Mounted /boot/efi.
[ OK ] Reached target Local File Systems.
Starting Initial cloud-init job (pre-networking)…
Starting Tell Plymouth To Write Out Runtime Data…
Starting Set console keymap…
Starting Create Volatile Files and Directories…
Starting LSB: AppArmor initialization…
Starting Commit a transient machine-id on disk…
[ OK ] Started Tell Plymouth To Write Out Runtime Data.
[FAILED] Failed to start Set console keymap.
See ‘systemctl status console-setup.service’ for details.
[ OK ] Started Commit a transient machine-id on disk.
[ OK ] Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch.
[ OK ] Started Create Volatile Files and Directories.
Starting Network Time Synchronization…
Starting Update UTMP about System Boot/Shutdown…
[ OK ] Started Update UTMP about System Boot/Shutdown.
[ OK ] Started Network Time Synchronization.
[ OK ] Reached target System Time Synchronized.
[ OK ] Started LSB: AppArmor initialization.
[ OK ] Reached target System Initialization.
[ OK ] Started Trigger resolvconf update for networkd DNS.
[ OK ] Listening on ACPID Listen Socket.
[ OK ] Listening on D-Bus System Message Bus Socket.
Starting Socket activation for snappy daemon.
Starting Seed the pseudo random number generator on first boot…
Starting LXD – unix socket.
[ OK ] Started Daily Cleanup of Temporary Directories.
[ OK ] Started Daily apt activities.
[ OK ] Reached target Timers.
[ OK ] Listening on UUID daemon activation socket.
[ OK ] Started ACPI Events Check.
[ OK ] Reached target Paths.
[ OK ] Listening on Socket activation for snappy daemon.
[ OK ] Listening on LXD – unix socket.
[ OK ] Reached target Sockets.
[ OK ] Reached target Basic System.
Starting LXD – container startup/shutdown…
[ OK ] Started Deferred execution scheduler.
[ OK ] Started Regular background program processing daemon.
[ OK ] Started D-Bus System Message Bus.
[ OK ] Started ACPI event daemon.
Starting System Logging Service…
Starting Login Service…
Starting Accounts Service…
[ OK ] Started FUSE filesystem for LXC.
Starting LSB: Record successful boot for GRUB…
Starting LSB: MD monitoring daemon…
[ OK ] Started Login Service.
[ OK ] Started System Logging Service.
Starting Authenticate and Authorize Users to Run Privileged Tasks…
[ OK ] Started LSB: Record successful boot for GRUB.
[ OK ] Started LSB: MD monitoring daemon.
[ OK ] Started Authenticate and Authorize Users to Run Privileged Tasks.
[ OK ] Started Accounts Service.
[ OK ] Started Seed the pseudo random number generator on first boot.
[ OK ] Started LXD – container startup/shutdown.
[ 137.551732] cloud-init[502]: Cloud-init v. 0.7.7 running ‘init-local’ at Thu, 11 Feb 2016 16:29:14 +0000. Up 126.47 seconds.
[ OK ] Started Initial cloud-init job (pre-networking).
[ OK ] Reached target Network (Pre).
Starting Raise network interfaces…
[ OK ] Started Raise network interfaces.
Starting Initial cloud-init job (metadata service crawler)…
[ OK ] Reached target Network.
[ 183.824988] cloud-init[984]: Cloud-init v. 0.7.7 running ‘init’ at Tue, 10 May 2016 13:09:14 +0000. Up 162.17 seconds.
[ 183.856568] cloud-init[984]: ci-info: +++++++++++++++++++++++++++++++++++++Net device info++++++++++++++++++++++++++++++++++++++
[ 183.896700] cloud-init[984]: ci-info: +——–+——+—————————-+—————+——-+——————-+
[ 183.944499] cloud-init[984]: ci-info: | Device | Up | Address | Mask | Scope | Hw-Address |
[ 183.979733] cloud-init[984]: ci-info: +——–+——+—————————-+—————+——-+——————-+
[ 184.003937] cloud-init[984]: ci-info: | lo | True | | | . | . |
[ 184.024728] cloud-init[984]: ci-info: | lo | True | ::1/128 | . | host | . |
[ 184.040806] cloud-init[984]: ci-info: | eth0 | True | | | . | 52:54:00:12:34:56 |
[ 184.059981] cloud-init[984]: ci-info: | eth0 | True | fe80::5054:ff:fe12:3456/64 | . | link | 52:54:00:12:34:56 |
[ 184.076902] cloud-init[984]: ci-info: +——–+——+—————————-+—————+——-+——————-+
[ 184.096749] cloud-init[984]: ci-info: +++++++++++++++++++++++++++Route IPv4 info++++++++++++++++++++++++++++
[ 184.119901] cloud-init[984]: ci-info: +——-+————-+———-+—————+———–+——-+
[ 184.135772] cloud-init[984]: ci-info: | Route | Destination | Gateway | Genmask | Interface | Flags |
[ 184.159764] cloud-init[984]: ci-info: +——-+————-+———-+—————+———–+——-+
[ 184.183873] cloud-init[984]: ci-info: | 0 | | | | eth0 | UG |
[ 184.221910] cloud-init[984]: ci-info: | 1 | | | | eth0 | U |
[ 184.235614] cloud-init[984]: ci-info: +——-+————-+———-+—————+———–+——-+
[ 184.251771] cloud-init[984]: Generating public/private rsa key pair.
[ 184.267717] cloud-init[984]: Your identification has been saved in /etc/ssh/ssh_host_rsa_key.
[ 184.287923] cloud-init[984]: Your public key has been saved in /etc/ssh/
[ 184.299763] cloud-init[984]: The key fingerprint is:
[ 184.319922] cloud-init[984]: SHA256:5nfgM60p9uPLbYwOS9asle9xORwZn8f2w1Wn1/jxyv8 [email protected]
[ 184.347770] cloud-init[984]: The key’s randomart image is:
[ 184.368899] cloud-init[984]: +—[RSA 2048]—-+
[ 184.387884] cloud-init[984]: | |
[ 184.421722] cloud-init[984]: | |
[ 184.460441] cloud-init[984]: | . o|
[ 184.501071] cloud-init[984]: | B=|
[ 184.544642] cloud-init[984]: | S . =oO|
[ 184.575731] cloud-init[984]: | o + + ..**|
[ 184.607402] cloud-init[984]: | = Xo+ =o+|
[ 184.652524] cloud-init[984]: | ooBoOo+ o.|
[ 184.679908] cloud-init[984]: | .o=O=+ o.E|
[ 184.699730] cloud-init[984]: +—-[SHA256]—–+
[ 184.723963] cloud-init[984]: Generating public/private dsa key pair.
[ 184.747842] cloud-init[984]: Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
[ 184.768001] cloud-init[984]: Your public key has been saved in /etc/ssh/
[ 184.787953] cloud-init[984]: The key fingerprint is:
[ 184.806946] cloud-init[984]: SHA256:KzpBU/Zr4F1VzPQL/SjCTZudKOk1n4AXjCVEx8sgc8g [email protected]
[ 184.815690] cloud-init[984]: The key’s randomart image is:
[ 184.827854] cloud-init[984]: +—[DSA 1024]—-+
[ 184.855475] cloud-init[984]: | . ++.o=o |
[ 184.866056] cloud-init[984]: | o E o*o +. |
[ 184.875487] cloud-init[984]: | o . +.++o ..|
[ OK ] Started Initial cloud-init job (metadata service crawler).
[ 184.897020] cloud-init[984]: | o . …=o*.oo|
[ OK ] Reached target Network is Online.
Starting /etc/rc.local Compatibility…
[ 185.021564] cloud-init[984]: | . o oSo* @ +..|
[ 185.051657] cloud-init[984]: | . . +o = = . |
Starting iSCSI initiator daemon (iscsid)…
[ OK ] Reached target Cloud-config availability.
Starting Apply the settings specified in cloud-config…
Starting OpenBSD Secure Shell server…
[ 185.504541] cloud-init[984]: | …. . o |
[ OK ] Started /etc/rc.local Compatibility.
[ 186.110577] cloud-init[984]: | .. . |
[ 186.542021] cloud-init[984]: | .. |
[ 186.557503] cloud-init[984]: +—-[SHA256]—–+
[ 186.585582] cloud-init[984]: Generating public/private ecdsa key pair.
[ 186.609651] cloud-init[984]: Your identification has been saved in /etc/ssh/ssh_host_ecdsa_key.
[ 186.625636] cloud-init[984]: Your public key has been saved in /etc/ssh/
[ 186.657904] cloud-init[984]: The key fingerprint is:
[ 186.801267] cloud-init[984]: SHA256:8AlCHJTqwT2ZHsSrQWYCamH0IP6rI1DR9rXcGPckoms [email protected]
[ 186.909225] cloud-init[984]: The key’s randomart image is:
[ 187.041113] cloud-init[984]: +—[ECDSA 256]—+
[ 187.093113] cloud-init[984]: |== =+o |
[ 187.173249] cloud-init[984]: |* O.B + o . |
[ 187.305466] cloud-init[984]: |.O B.=o+ B + |
[ 187.461236] cloud-init[984]: |. B B.o++.. . |
[ 187.601078] cloud-init[984]: | o * o .S |
[ 187.647573] cloud-init[984]: |. o o E |
[ 187.972585] cloud-init[984]: |. . . |
[ 188.117766] cloud-init[984]: |… |
[ 188.313919] cloud-init[984]: |… |
[ 188.425282] cloud-init[984]: +—-[SHA256]—–+
[ 188.540492] cloud-init[984]: Generating public/private ed25519 key pair.
[ OK ] Started iSCSI initiator daemon (iscsid).
[ 188.655394] cloud-init[984]: Your identification has been saved in /etc/ssh/ssh_host_ed25519_key.
Starting Login to default iSCSI targets…
[ 188.804741] cloud-init[984]: Your public key has been saved in /etc/ssh/
[ 189.156485] cloud-init[984]: The key fingerprint is:
[ 189.274441] cloud-init[984]: SHA256:1nftC58SMDp4u2HEzdOJT0TQNGvLqgv2INuYUBnlgAs [email protected]
[ 189.362913] cloud-init[984]: The key’s randomart image is:
[ 189.410176] cloud-init[984]: +–[ED25519 256]–+
[ 189.821593] cloud-init[984]: | .. . .++ |
[ 189.965319] cloud-init[984]: | E . + ..o |
[ 190.016843] cloud-init[984]: | . .. . + |
[ 190.084884] cloud-init[984]: | . o ..oo* o. |
[ 190.137893] cloud-init[984]: | o Soo=+*. .|
[ 190.235385] cloud-init[984]: | . o.+ .=o . |
[ 190.504702] cloud-init[984]: | . . +.oo. o. .|
[ 190.680403] cloud-init[984]: | . B =.o .o o|
[ OK ] Started OpenBSD Secure Shell server.
[ 190.832058] cloud-init[984]: | + . =o .+ |
[ 190.897369] cloud-init[984]: +—-[SHA256]—–+
[ OK ] Started Login to default iSCSI targets.
[ OK ] Reached target Remote File Systems (Pre).
[ OK ] Reached target Remote File Systems.
Starting LSB: automatic crash report generation…
Starting LSB: Set the CPU Frequency Scaling governor to “ondemand”…
Starting Permit User Sessions…
Starting LSB: daemon to balance interrupts for SMP systems…
[ OK ] Started Permit User Sessions.
Starting Terminate Plymouth Boot Screen…
Starting Hold until boot process finishes up…
[ OK ] Started Hold until boot process finishes up.
[ OK ] Started Serial Getty on ttyAMA0.
[ OK ] Started Getty on tty1.
[ OK ] Reached target Login Prompts.
[ OK ] Started Terminate Plymouth Boot Screen.
[ OK ] Started LSB: Set the CPU Frequency Scaling governor to “ondemand”.
[ OK ] Started LSB: daemon to balance interrupts for SMP systems.
[ OK ] Started LSB: automatic crash report generation.Ubuntu 16.04 LTS ubuntu ttyAMA0ubuntu login:

You won’t be able to login there however, so instead you can access the emulated server via ssh:

No password will be asked since we’re using an ssh key.

A few commands confirm we are indeed running Ubuntu 16.04 with Linux 4.4 on a dual core Cortex A57 processor:

I’ve also run linpack benchmark:

Emulation from x86 to ARM is affecting the results quite a bit here. For reference, a Raspberry Pi 2 achieves about 113300 KFLOPS for the same benchmark. You’ll also noticed specifically compiling for Cortex-A57 CPU improves the performance by about 10%, even in qemu.

Run x86 Linux and Windows Applications in Raspberry Pi and other ARM Linux Devices with Exagear

November 12th, 2015 10 comments

A few weeks ago, I finally decided to buy a Raspberry Pi 2 board as it could always be useful for some testing, at least for comparison purpose. I ended up buying it from Ebay for $40, as it’s more $3 to $5 more expensive locally. Nevertheless I was not sure what I’ll use it first for, but after seeing a tweet for Exagear Desktop software that allows ARM boards to run x86 Linux or Windows applications, the later through wine. The program is available for Raspberry Pi, Raspberry Pi 2, and ARMv7 devices for $19.95 to $29.95.

I asked for version for testing purpose, and I was given a Google Drive link to download Exagear for Raspberry Pi 2, as well as a 3-month trial key. Installation is very easy.

I started by downloading and installing Raspbian Jessie the usual way on a 32GB micro SD card. It went pretty smoothly, and after installation I had to run raspi-config to extend the partition size, change the timezone, and keyboard layout.

Once you have downloaded the 1.4GB tarball for Exagear, extract it in your Raspberry Pi 2:

Now copy your product key (pk-xxxxxxxxxxxx.key) in the directory, and you should end with the the following files:

Now run the installation script:

The script should auto-detect your operating system and install the right files for your operating system:

You’d definitely need a 8GB micro SD card, and preferably larger, since 6.9GB is taken after Exagear is installed, and before you’ve installed any of your x86 apps:

Let’s compare the kernel in Raspbian and exagear.

So we’ve switched to an i686 machine with four cores (only one shown below):

First let’s try to run Skype for Debian, which has not been released for ARM.

The first step is to download Skype package and install it within exagear:

Installation failed because some of dependencies are not installed, but apt-get can take over from here:

This should complete Skype installation, with 7.2GB now used on the SD card.

I could start Skype from the command or top menu, login, start chatting.


Click for Original Size

Great! But when I tried the Echo / Sound Test Service, I noticed no audio. But I found on the forums that I would have to install pulseaudio on the ARM side. After exiting exagear, I did so, and tested audio.

Audio worked, but with pretty bad quality. Some problems related to the Raspberry Pi image, as Exagear is not involved here. I tried Skype again, but I had no luck with audio. [Update: Exagear provided more instructions but still no luck]

Beside the few x86 Linux programs not available for ARM, x86 emulation is particularly interesting to run Windows programs, which is usually done with wine in Linux.

Wine is already installed, so I decided to try Microsoft Windows 2007 Word Viewer, which has a Platinum rating in WineHQ website, meaning it should work well, and I did test it successfully in my Ubuntu 14.04 computer before trying it on the Raspberry Pi 2. Sadly it did not work well when I switched to exagear.

After checking into Eltechs_ExaGear_Desktop_guide_1.2.pdf, the issue is likely related to a kernel / user memory split, but Exagear has supposedly ported wine to support 2G/2G kernel split, and including a table with the versions to install for a given OS.

Kernel Split / OS Version / Exagear Packages

Kernel Split / OS Version / Exagear Packages

My system is running Raspbian Jessie 8 operating system with debian-8-wine2g package installed.  You’ll probably want to try another operating system with a 3G/1G split, such as Debian Jessie 8 to make sure wine runs fine. I’ve asked the company about the audio and wine issues, but did not receive any feedback after nearly 48 hours , so I’ve moved on due to time constraints. [Update: See comments with Skype ionstructions, and a promise to provide a patch for wine]. Other people were more lucky with Exagear and Windows with for instance, some old Windows games running on ODROID boards.

The company claims Exagear is up to 4.5 times faster than QEMU, but I wondered what would be the difference between native ARM programs to one compiled for x86. There’s always going to be a performance hit with emulation, but I built and ran linpack to find out how much.

  • Linpack natively run inside Raspberry Pi

  • Linpack emulated in Exagear.

Linpack x86 in Exagear is about 4.2 times slower than native Linpack (ARM) in the Raspberry Pi 2

I had mixed experience with Exagear. Skype is running well if all you do it chatting, but I had some audio issue, and I did not test video conference which is likely to suffer with emulation. You may have come across some configuration issues with Windows emulation, and unless you use old programs, for example games like Doom, Red Alert, or Duke Nukem 3D, the memory available on most ARM platforms will be a limitation. Finally, Exagear also has competition from both the free QEMU emulator (which is not quite as fast) and  cheap Intel hardware with Ubuntu Intel Atom TV Sticks selling for a little over $70.

How to Build and Run Android L 64-bit ARM in QEMU

August 23rd, 2014 36 comments

[Nov, 2014 Update: The method below does not seem to work anymore, but a 64-bit ARM emulator “emulator64-arm64” has now landed in AOSP, and updated instructions are available here].

Most people can’t afford Juno Cortex A57/A53 development board, and mobile processors based on the latest 64-bit ARM cores are only expected by early 2015. But thanks to a small team at Linaro, you can now build and run Android L 64-bit ARM in the latest version of QEMU that supports Aarch64. Alex Bennée, an engineer working for Linaro, wrote a blog post in Linaro’s Core Dump blog explaining the Android emulator is actually based on QEMU,  the differences compared to mainline QEMU, the work they’ve done on Android L at Linaro, and most importantly, provided the basic steps showing how to build and try Android L 64-bit ARM (ARMv8) in QEMU. I’ve just done that, but unfortunately, albeit the builds complete, I could not manage to start Android L in QEMU yet. [Update: working now]. If you want to give it a try, you’ll need a Linux PC, and patience, as it may take about one day to retrieve the source code, and build everything from source.


I’ve done all this in a computer running Ubuntu 14.04 with an AMD FX8350 processor and 16 GB RAM.

First, you’ll need to install an ARM 64-bit toolchain, some dependencies, and tools:

The next step is to cross-compile a Linux 3.10 kernel for Android:

There’s a bug include the current version of the toolchain in Ubuntu 14.04 ( which prevents the build to complete. You can either remove CONFIG_DEBUG_INFO=Y in arch/arm64/configs/ranchu_defconfig (I did that), or update your toolchain. Let’s complete the build:

Now you need to build the Android Open Source Project (AOSP). If you haven’t done so, you’ll have to install the repo tool:

Then get AOSP source code (master as below, or l-preview branch):

The last step can take a few hours depending on your internet connection to Google servers.
Now download and apply a patch made by Linaro:

Possibly configure git:

You need to apply a patch for qemu:

And build Android L for ARMv8:

The last step will again take a while. It took my machine 2 or 3 hours, and the total time was actually a bit more than than as my PC suffered two thermal shutdowns during the build, and I had to restart the build twice. The last time, I decided to underclock my CPU to 3.4 GHz, and the build went through.

The last step before running Android L is to build QEMU:

Builds should now all be successfully complete. We just need to create some symlinks helping to shorten qemu command line, start the ADB server, and run QEMU:

That’s the output I get:

So it’s quite possible there’s a problem with adb, but Google did not help, and I failed to go further. More detailed instructions will soon be posted in Linaro Wiki, so I may be able to find out where I made a mistake once it’s posted.

Finally, start vncviewer to access Android user’s interface:

Here’s a screenshot of the “About Device” menu in Android L 64-bit ARM running in QEMU.

PiCore 5.3 is a Lightweight Linux Distribution for the Raspberry Pi

May 23rd, 2014 2 comments

My posts providing and give instructions to generate minimal, headless, images for the Raspberry Pi, such as “84 MB Minimal Raspbian ARMHF Image for Raspberry Pi” and “12MB Minimal Image for Raspberry Pi using the Yocto Project” have been relatively popular with people just wanting to have small base to start with the embedded projects. For desktop users, Slitaz for Raspeberry Pi (34MB) is one option, but I’ve just found out there’s also an other alternative with PiCore 5.3, a Linux distribution for the Raspberry Pi based on Tiny Core Linux that’s just 24.7 MB to download.

With an image that size, there’s obviously basically no applications installed, you’ve got flwm window manager,  wbar launcher, a control panel, a terminal, a file editor, and that’s about it. There’s no web browser, nor file manager, and you’d have to install the applications you want by yourself using tce-load package manager. If you only need an headless OS, a base (14MB) and SSH image (18.7) are also available for download.

If you still don’t have a Raspberry Pi, you can also try out PiCore 5.3 in QEMU in a Windows or Linux PC.

In Ubuntu 14.04:

This will start an headless image login as tc user without password. If you want to use a desktop in qemu, the next step you really be performed with a virtual drive, so that it remains in persistent storage, but I’ve just installed it in the ramdisk for testing purpose:

The first command line will download an install Tiny Core desktop environment, and startx will start the X server.

Via Liliputing

Fedora 20 “Heisenbug” Release Makes ARM a Primary Architecture

December 18th, 2013 3 comments

Fedora_logoFedora has been supporting ARM architecture for a while now, but it was only as a secondary architecture without official support. With the recent Fedora 20 release, nicknamed “Heisenbug”, the ARM architecture, more exactly ARMv7 hard float and greater, is promoted to a primary architecture meaning ARMv7 will have the same status as x86 and x86_64 architectures with packages officially build and supported by the Fedora community.

What it does not mean however, due to the nature of ARM architecture, is that you can simply download an ISO to install on any ARM platforms, like you would do on an Intel or AMD computer. It’s a little more complicated than that, as it is platform specific, but instructions are available for the Beaglebone Black, Compulab Trimslice, the Wandboard, Calxeda Energycore Midway and Highbank, and Versatile Express in QEMU.

You can download images with MATE, KDE, XFCE, LXDE, SOAS desktops, as well as a minimal image without desktop environment @

Fedora 20 for ARM includes two types of images:

  • For platforms requiring a VFAT partition – include VFAT in the file name.
  • For platforms that can boot from an EXT3/4 partition

Now all methods includes booting from an external media, usually a (micro) SD card, and network boot is also available.

Beside promotion ARM as a primary, there were also other noticeable features in the release:

  • Cloud and Virtualization Improvements

    • First-Class Cloud Images – Developed by the Fedora Cloud SIG, these images are well-suited to running as guests in public and private clouds like Amazon Web Services (AWS) and OpenStack.
    • VM Snapshot UI with virt-manager – This feature makes taking VM snapshots much easier, by adding a simple, discoverable UI to virt-manager, and includes adding functionality to libvirt to support deleting and rebasing to external snapshots.
    • ARM on x86 with libvirt/virt-manager – This change to Fedora 20 fixes running ARM virtual machines on x86 hosts using standard libvirt tools libvirt virsh, virt-manager and virt-install.
  • Developer Features

    • WildFly 8 – Previously known as JBoss Application Server, WildFly 8 makes it possible to run Java EE 7 applications with significantly higher speed.
    • Ruby on Rails 4.0
  • Desktop Improvements

    • GNOME 3.10 – Includes a new music application (gnome-music), a new maps application (gnome-maps), a revamp for the system status menu, and Zimbra support in Evolution.
    • KDE Plasma Workspaces 4.11 – Includes faster Nepomuk indexing, improvements to Kontact, KScreen integration in KWin, Metalink/HTTP support for KGet, and much more.
  • Maturity and Advanced Features

    • NetworkManager Improvements – Users will now be able to add, edit, delete, activate, and deactivate network connections via the nmcli command line tool, simplifying non-desktop uses of Fedora. NetworkManager is also getting support for bonding interfaces and bridging interfaces.
    • No Default Sendmail, Syslog – Fedora 20 removes the former syslog solution, which is now replaced by systemd journal. Additionally, Sendmail will no longer be installed by default, as typical Fedora installs have no need of a Mail Transfer Agent (MTA).

You can find more details on Fedora 20 release notes.

Linaro 13.08 Release With Linux Kernel 3.11 and Android 4.3

August 30th, 2013 No comments

Linaro 13.08 has been released with Linux Kernel 3.11-rc6 (stating), Kernel 3.10.9 (LSK – beta), and Android 4.3.

This month is the first release based on Android 4.3, which was only pushed to AOSP at the end of last month. I can also see work on new SoCs/hardware this month with Texas Instruments Keystone II ARM Cortex A15+DSP SoC and Fujitsu AA9 board (Which processor?, I could not find out). A lot of work also appears to have gone in OpenEmbedded, further optimizations have gone into NEON optimized AES encryption in OpenSSL, and more. It’s also the first time I can see a Ubuntu Raring engineering build image for HighBank (Calxeda Energycore).

Here are the highlights of this release:

  • Android Engineering

    • Android stack was tuned to achieve 100% CTS pass result on Android 4.3
    • Analyzing the UEFI EDK II boot loader for Android completed, implementation of fastboot application and USB drivers in progress.
  • Builds and Baselines

    • Linaro Stable Kernel (beta) 3.10.9-2013.08 released
    • Linux Linaro 3.11-rc6-2013.08 released (updated arndale/exynos patches from Samsung LT, vexpress64 support (both RTSM and Foundation model), and more)
    • Linaro Toolchain Binaries 2013.08 released (includes latest Linaro GCC 4.8 2013.08 release with Aarch64 improvements)
    • Linaro Android baseline updates:
      • Android Baselines updated to Android 4.3 for all the Engineering and Member builds
      • Android builds updated to build with Linaro GCC 4.8 2013.08 release
      • Helper scripts developed to boot Android over NFS
      • Fujitsu member build is set up with complete CI loop
      • Android NDK (Native Development Kit) based on Linaro Toolchain is delivered
    • Linaro OpenEmbedded baseline updates:
      • Update to Linaro GCC 4.8-2013.08 release
      • Remove meta-openembedded/toolchain layer
      • Add meta-bigendian to default layers
      • Add meta-filesystems layer
      • Whitelist non-commercial license on all images
      • Add Fedora support and clean up dependencies based on Yocto Project Reference Manual
      • New leg-java images have builds of openjdk-7 and openjdk-8
      • Python (2.7.3) available in LAMP image
      • Engineering builds for Networking (big endian and little endian) are built daily
    • Linaro Ubuntu baseline updates:
      • CI loop has been improved: packages can be cross-built and uploaded to
      • Calxeda EnergyCore (Highbank) CI loop is completed
      • Fujitsu member build is set up with complete CI loop
      • package updates: libvirt updated to 1.1.1; openssl (include support for ARM NEON based bit sliced AES in XTS mode, contributed from LEG)
  • Kernel

    • Started making progress on kexec 64 support
    • Posted uprobes32 code for public review
    • Started testing of randconfig on ARM32 to find random build issues
    • Device Tree bindings for Android keyreset merged for 3.12
    • option to log time spent in suspend delivered in 3.11
    • fixed vfat get volume id ioctl and delivered in 3.11 mainline
  • LAVA

    • LAVA Lab – LNG isolated performance test rack starting to come together
    • LAVA Core
      • Improved complete-log view (added links for Line/Section #s)
      • Interactive bootloader commands working on all devices – Added support for Android platforms
      • New action: deploy_linaro_image has been added – Allows provisioning of kernel, ramdisk, dtb, bootloader, firmware, and rootfs using TFTP, adds support for KVM/QEMU…
      • TI Keystone II integrated into LAVA
      • Fujitsu AA9 integrated into LAVA
      • Automated functional LAVA testing – Checks for regressions by running common LAVA jobs
      • Multi-Node support in final days of staging verification.
      • Review feedback and start a plan to revamp the LAVA documentation
      • Added capability to integrate LAVA instance with Google Analytics
    • Linaro Infrastructure
      • Beta staging git services released to improve Linaro git services
      • Output manifest from Android builds now includes repository/branch descriptions.
  • LNG (Linaro Networking Group)

    • The real time patch set for 3.10.6 + rt3 became available and LNG moved its stable kernels to 3.10.6 and 3.10.6 + rt3
    • The CONFIG_NO_HZ_FULL config fragment resulted in bug 1215507 in the preempt rt image, and so NO_HZ has been disabled
    • The CI loop now runs the LTP and LTP real-time regression test suites against the LNG Kernels
    • LNG image based on Linaro OpenEmbedded baseline boots on Arndale
    • Building with the debug flags enabled resulted in a bug 215471 – deadlock when CONFIG_KEYBOARD_GPIO is enabled with debug on.
    • meta-bigendian layer has been merged in Linaro OpenEmbedded baseline
  • Power Management

    • Linaro Powerdebug 0.7.0-2013.08 released (add gpio modification function)
    • Linaro Powertop 2.2-2013.08 released
    • Linaro PM QA 0.4.3-2013.08 released
  • QA

    • Successfully completed 13.08 release testing on Android (linux-linaro and LSK), Ubuntu and OpenEmbedded builds. Test results and bug reports have been shared.
    • Manual PXE on UEFI testing was performed on Versatile Express A9 board.
    • Test planning completed for LSK and Networking Group (LNG)
  • Toolchain

    • Linaro GCC 4.8 2013.08 released with multiple optimizations (shrink-wrapping, tail-calls), improved AArch64 support, and bug fixes
    • Linaro GCC 4.7 2013.08 released, based off the latest GCC 4.7.3+svn201655 release.
    • Updated for GCC and LLVM
  • Virtualization

    • Final version of HYP mode switching support for ARMv7-A is ready and went upstream. (cnxsoft: Not directly related to Linaro work, but you can check the following  presentation for an overview of virtualization on Cortex A15).
    • ARMv7 Guest Migration (same HW/SW) functionality implementation is ready and now is being upstreamed.
    • hackbench is configured in LAVA for testing KVM; also added to CI loop.

Visit for a list of known issues, and further release details about the LEB and community builds, Android, Kernel, Graphics, Multimedia, Landing Team, Platform, Power management and Toolchain (GCC / Qemu) components.

Linaro 13.06 Release With Linux Kernel 3.10 and Android 4.2.2

June 28th, 2013 No comments

Linaro 13.06 has been released with Linux Kernel 3.10-rc6 and Android 4.2.2. Linux Linaro Stable (LSK) preview is based on kernel 3.9.6.

There seems to have been a lot of activity for the LAVA and Builds and Integration teams, with LAVA support for new SoC such as Huawei K3V2 and Broadcom Capri from 2 companies which have recently joined Linaro as members, and well as continuous build for Linaro Stable Kernel. On the kernel side, more work has been done for multi-platform support (unified kernel), uprobes, eMMC power mamangement, and more.

Here are the highlights of this release:

  • LAVA

    • LAVA Core
      • As part of the effort to improve the developer experience with LAVA, the different client tools were consolidated into a single package, which simplifies the process of updating the tools and makes it easier for the team to provide new features for LAVA users.
      • LAVA now supports KVM devices, which can be used for providing x86 boxes for cross-building and other tasks where there is no need (or no possibility) or using actual ARM devices.
      • Linaro LAVA users can now submit LAVA jobs targeting Calxeda EnergyCore nodes. The devices are available under the “highbank” device type.
      • 5 Arndale Boards are now available in LAVA.
      • Nexus 10, Huawei k3v2, and Broadcom Capri support has been added.
      • UEFI booting supported on b.L fastmodels.
      • Interactive boot commands supported on UEFI fastmodels.
      • Image reports modified to add the ability to chart & visualize filter results
    • LAVA Infrastructure:
      • All Fastmodel server upgrades now controlled by Salt
      • & authenticate against Linaro OpenID/crowd.
      • Lab Xen Virtual machines now backed up to NAS.
      • LAVA Lab now monitored 24/7 with Nagios.
      • LAVA production server upgraded to Ubuntu 12.04 LTS.
  • Builds and Baselines

    • CI loop for LSK (Linaro Stable Kernel) Android proof of concept kernel based on 3.9.6 kernel version has been setup that includes the b.L IKS and MP patches.
    • Support for CI loop for kernel with Android filesystem has been added to android-build. CI loop has been setup to track the ARM LT integration tree.
    • HiSilicon member build with complete CI loop has been setup and tracks the LT kernel tree.
    • Several critical issues fixed
    • LNG (Linaro Networking Group) kernel tress has been set up. It’s based on 3.8.13 with PREEMPT_RT patchset and Arndale enablement
    • Linaro Toolchain Binaries 2013.05 released.
    • Linux Linaro 3.10-rc6 2013.06 released
      • interactive-gov-updates topic from Viresh Kumar (rebased version of the 13.05 topic)
      • updated Versatile Express patches from ARM LT
      • updated arndale/exynos patches from Samsung LT
      • vexpress64 support (both RTSM and Foundation model)
      • new omap-fixes-13.06 topic: USB host and the on-board ethernet are operational on Panda again
      • config fragments changes
    • Linaro Stable Kernel (preview) 3.9.6 2013.06 released
      • generic vexpress TC2 support from ARM LT (no big.LITTLE MP, IKS, and arm64)
      • MCPM patches for TC2
      • big-LITTLE-MP-master-v16
      • generic IKS support from Nicolas Pitre
      • IKS TC2 patches
      • core config fragments from linux-linaro 13.04 (linaro-base.conf, ubuntu-minimal.conf, big-LITTLE-MP.conf)
      • perf tools: fix to make perf to build in 3.9 kernel
      • builddeb tweaks to enable kernel cross build with deb-pkg, and to ensure that the DT blob is built and packed properly into the kernel image package.
      • android for v3.9 plus Linaro fixes
    • Linaro OpenEmbedded baseline updates:
      • Switched to repo for clone(s)
      • GCC updated to Linaro GCC 4.8 2013.06 release and also the default
      • Kernel updated to linux-linaro 2013.06 release
      • icedtea bumped to version 03b21-2.1.8
      • External toolchain supported; see -h
      • xvfb added to LAMP image
      • LNG image added, based on YOCTO
      • LEG JAVA image added
  • Graphics

    • xf86-video-armsoc extended for ST-Ericsson drm driver (Nova)
  • Kernel

    • Port some of the simpler platforms to multiplatform support
      • Integrator PCI DT pulled into ARM SoC tree
      • u300 work pulled into the ARM SoC tree
      • Nomadik clock DT pulled into ARM SoC tree
    • Implement and upstream ARM 32 bit uprobes support
    • Refactor OHCI controller code
      • Create base patch for OHCI to allow loading backends as modules
      • factor out OMAP, OMAP3, at91, SPEAr and s3c2410 backends
    • Improve eMMC Power Management Support
    • Storage EXT4 journal in enhanced area of eMMC
    • Upstream “power: Add option to log time spent in suspend” patch from AOSP
    • Android upstreaming: Ashmem
    • Migrate Android Alarmtimer driver over to using the upstreamed Alarmtimers
  • Power Management

    • Full automation of b.L benchmarking
    • cpu hotplug latency test should be integrated on to scheduler test suite to run on LAVA
    • Linaro PM QA 0.4.2 2013.06 release – bug fix
  • QA

    • Successfully completed 13.06 release testing on Android, Ubuntu and OpenEmbedded builds. Test results and bug reports have been shared.
    • Initial cleanup of bugs in Linaro launchpad projects was completed.
    • Piglit test suite is now run on each Android build for Pandaboard
  • Toolchain

    • Linaro QEMU 1.5.0 2013.06 released, based off upstream (trunk) QEMU 1.5.0
    • Linaro eglibc 2.17 2013.06 released with faster memcpy implementation for hardware with NEON or VFP support.
    • Linaro newlib 2.0.0 2013.06 released with faster memcpy implementation for hardware with NEON or VFP support.
    • Linaro binutils 2.23.2 2013.06 released
    • Linaro GCC 4.7 and 4.8 2013.06 released
  • LEG

    • Linaro UEFI 2013.06 released
    • HugeTLB (aka “large pages”, TLB = “translation lookaside buffer”) and THP (Transparent Huge Pages) support for ARMv8 have been pulled into linux-next
Visit for a list of known issues and further release details about the LEB and community builds, Android, Kernel, Graphics, Multimedia, Landing Team, Platform, Power management and Toolchain (GCC / Qemu) components.

Top 10 Posts of 2012 on CNXSoft Blog

December 31st, 2012 5 comments

This is the last day of the year, so it’s probably a good time to look back and see what interested people on this blog. This has been a banner year for low cost ARM devices and boards starting with the Raspberry Pi, then MK802 and the new mini PCs / HDMI TV dongles / PCs-on-a-stick (whatever you want to call them) that came after, always cheaper and faster. Those low cost devices have in turn made people really interested in ARM Linux, and lots of development on those little devices and boards started.

The top 10 posts of 2012, according to page views, reflect just those trends:

  1. 74 USD AllWinner A10 Android 4.0 Mini PC (May 2012) – MK802 started the whole “low cost mini PCs” craze, and drove the most traffic to this blog this year. People got excited about the price, form factor, and the possibility to run both Android and other Linux based operating systems.
  2. MK802 II Mini PC Now Costs as Much as Raspberry Pi Model B. Let’s Compare Them! (December 2012) – This post features the 2 stars of 2012: the Raspberry Pi and MK802 II HDMI TV donglwe (MK802 with 1GB RAM). As both device can now be bought for $35, and allow you to do very similar things, it’s was time for a head-to-head comparison. I’ve just written about it last week, and it got Slashdotted.
  3. WM8850-MID Android 4.0 Tablet Unboxing and Review (June 2012) – At the time, this Eken W70 clone featuring Wondermedia WM8850 Cortex A9 processor was a real bargain for $72 (including shipping). The firmware has a few issues however, and that’s what drove people to this post: looking for solutions.
  4. AllWinner A10/A1X Processor Resources, Development Board and SDK (December 2011) – This post was written just about one year ago, but traffic was steady all year, as people want to find out how to hack their AllWinner A10 tablets, media players and mini PCs.
  5. Mele A1000: AllWinner A10 (Cortex A8) Based Hackable Android STB (March 2012) – The Mele A1000 was my first Android device, and it got popular thanks to its relatively low cost, available ports (3x USB, SATA, VGA, HDMI…), and serial port which made it ideal for development of U-boot and the kernel. I still think it’s a good platform, but since then low cost development boards such as the Cubieboard has made it a little less attractive, and interest has somewhat faded in the last few months.
  6. Valueplus Tizzbird Stick N1: Android 4.0 HDMI/USB Media Player Dongle (March 2012) –  The Tizzbird Stick N1 was one the first mini PCs, and was showcased at CeBit 2012 several months before MK802. Unfortunately, it took many more months to finalize the design, and the product never took off, as other cheaper Telechips TCC892x based mini PCs appeared on the market. The only reason it got traffic is because I mentioned it in the $74 MK802 post at the top of this list.
  7. Mele A1000 Android 2.3 STB Unboxing and Review (April 2012) – In March, I was still waiting for the Raspberry Pi launch, but I noticed Barry Kauler (Puppy Linux) bought the Mele A1000 to keep him busy while he was also waiting for his Pi, and seeing the development around AllWinner A10, I decided to buy one as well. Apparently, I was not the only one interested as many people came here to read my review of this nice hackable media player.
  8. Mele A2000 Android 2.3 Media Player Powered by AllWinner A10 (April 2012) – The Mele A2000 is the little sister of the Mele A1000, which the same hardware, just a difference casing.
  9. Linaro Android Puts Stock Android To Shame on TI Pandaboard (OMAP4430) (June 2012) – Linaro showcased a demo showing an optimized version of Android could deliver twice the performance of stock Android on a particular benchmark running in Pandaboard. Bero commented on my post with details, and the post quickly became viral as developers wanted to give it a try. It turned out the improvement is actually more like 15 to 20%, but this is enough to double the framerate of this benchmark due to Vsync synchronization. It may also work in real games.
  10. Raspberry Pi Emulator in Ubuntu with Qemu (October 2011) – In 2011 and early 2012, the Raspberry Pi foundation promised much in terms of schedule, but initially failed to deliver, and many people get desperate enough to check the instructions to emulate an ARMv6 device and run Debian in QEMU to get started with development, before the Raspberry Pi hardware is available.

That will be the last post of 2012, so the “hardware team” (pictured below) and I would like to wish you a very happy and prosperous new year 2013, which I’m sure will be as exciting as 2012 for Linux/Android gadgets and boards, and we should see the first big.LITTLE processors and corresponding devices, ever cheaper tablets, smartphones and mini PCs, an interesting Intel vs. ARM fight for mobile devices, a proper XBMC ARM set-top box close to $50, new mobile OSes based on Linux (Tizen, Sailfish OS, Firefox OS…), and more…