# Generic ARM Cortex A9 image for QEMU
[![Hex version](https://img.shields.io/hexpm/v/nerves_system_qemu_arm.svg "Hex version")](https://hex.pm/packages/nerves_system_qemu_arm)
This is the base Nerves System configuration for generic ARM platform emulated
| Feature | Description |
| -------------------- | ------------------------------- |
| CPU | Emulated single core ARM Cortex A9 |
| Memory | Per QEMU commandline |
| Storage | N/A |
| Linux kernel | 4.4.1 |
| IEx terminal | tty1 (the display) |
| GPIO, I2C, SPI | No |
| ADC | No |
| PWM | No |
| UART | No |
| Camera | No |
| Ethernet | Yes |
| WiFi | No |
| Bluetooth | No |
## Important info
We've found working with QEMU to be slower than working with real hardware. This
likely is due to us not configuring it appropriately, but keep this in mind if
you use this system.
The most common way of using this Nerves System is create a project with `mix
nerves.new` and to export `MIX_TARGET=qemu_arm`. See the [Getting started
for more information.
If you need custom modifications to this system for your device, clone this
repository and update as described in [Making custom
Unlike other Nerves systems, this one does not contain a minimal configuration
since it is expected to be used exclusively for debugging on a fast computer.
Currently, it contains the following additional packages:
* The `qt-webkit-kiosk` fullscreen browser
As such, it takes a long time to build if you need to make custom modifications
to it. The goal is that rebuilds are uncommon. However, if you need to build
this system it needs more than 4 GB of DRAM. You may also consider stripping
down the configuration if qt-webkit-kiosk isn't needed.
## Getting Started
The `examples` directory contains simple Nerves projects that demonstrate
uses of `nerves_system_qemu_arm`. The `hello_nerves` example follows closely to
the baseline [Nerves getting started
example](https://hexdocs.pm/nerves/getting-started.html) with the additions of
networking and ssh firmware update support. Here's how to use it:
# Check the config/config.exs file to make sure that the ssh authorized
# key logic works for you. The nerves_firmware_ssh project has more info.
# Build it
# Create the base image file. This is like a virtual SDCard for the emulator.
# It just needs to be done once and then you can use over-the-air updates
# Generate a shell script to invoke qemu (only needs to be done once)
# Start qemu
# It should open a window and boot to an iex prompt. Since it's the first
# boot and the application data partition hasn't been formatted, you should
# see some log messages about it being corrupt and then it being formatted.
# At this point, feel free to make an edit to the Elixir code. For example,
# have it IO.puts something.
# When you're ready, build, and run a firmware update.
# See the nerves_firmware_ssh project for troubleshooting firmware updates
# and using OpenSSH's ssh client.
## Starting a local web browser for use as a kiosk
The `hello_nerves` example also contains a trivial single page website to
demonstrate kiosk mode. To see it, start the example in QEMU and at the iex
prompt, run this:
:os.cmd('qt-webkit-kiosk -platform linuxfb -c /etc/qt-webkit-kiosk.ini').