Transcript
Page 1: QEMU and Raspberry Pi. Instant Embedded Development

CONFIDENTIAL©2013 GlobalLogic Inc.

QEMU and Raspberry Pi

Instant embedded development

Page 2: QEMU and Raspberry Pi. Instant Embedded Development

©2013 GlobalLogic Inc. CONFIDENTIAL

• What is QEMU• QEMU Project structure• Extending QEMU• Raspberry Pi on QEMU• Simulating Accelerometer on QEMU• Verification on real platform

Page 3: QEMU and Raspberry Pi. Instant Embedded Development

3 CONFIDENTIAL

Goals:• How to add support of new hardware to the QEMU (I2C

Accelerometer)

• How to simulate of the new hardware

• Write a simple application to work with Accelerometer

• Demonstrate that it works on the real platform as well as under QEMU

Page 4: QEMU and Raspberry Pi. Instant Embedded Development

4 CONFIDENTIAL

Environment:• Ubuntu Linux on Host PC

• QEMU for ARM architecture

• Raspbian Linux on Raspberry Pi and QEMU

• QEMU-ready Linux kernel 3.6.11 for the ARM1176JZF-S (RPi)

• Raspberry Pi rev.B

• I2C Accelerometer ADXL345

Page 5: QEMU and Raspberry Pi. Instant Embedded Development

5 CONFIDENTIAL

What is QEMU ?

− QEMU (short for "Quick EMUlator") is a free and open-source machine emulator and virtualizer written originally by Fabrice Bellard

− Can emulate 80386, 80486, Pentium, Pentium Pro, AMD64 – from x86 architecture

− PowerPC, ARM, MIPS, SPARC, SPARC64

− Work on FreeBSD, FreeDOS, Linux, Windows 9x, Windows 2000, Mac OS X, QNX, Android

Page 6: QEMU and Raspberry Pi. Instant Embedded Development

6 CONFIDENTIAL

− Available CPUs:

− arm1026

− arm1136

− arm1136-r2

− arm1176

− arm11mpcore

− arm926

− arm946

− cortex-a15

− cortex-a8

− cortex-a9

− cortex-m3

− pxa250

− pxa255

− pxa260

− pxa261

− pxa262

− pxa270-a0

− pxa270-a1

− pxa270

− pxa270-b0

− pxa270-b1

− pxa270-c0

− pxa270-c5

− sa1100

− sa1110

− ti925t

− any

List of supported CPUs (ARM)$ qemu-system-arm –cpu ?

Page 7: QEMU and Raspberry Pi. Instant Embedded Development

7 CONFIDENTIAL

− smdkc210 Samsung SMDKC210 board (Exynos4210)

− connex Gumstix Connex (PXA255)

− verdex Gumstix Verdex (PXA270)

− highbank Calxeda Highbank (ECX-1000)

− midway Calxeda Midway (ECX-2000)

− integratorcp ARM Integrator/CP (ARM926EJ-S) (default)

− kzm ARM KZM Emulation Baseboard (ARM1136)

− mainstone Mainstone II (PXA27x)

− musicpal Marvell 88w8618 / MusicPal (ARM926EJ-S)

− n800 Nokia N800 tablet aka. RX-34 (OMAP2420)

− n810 Nokia N810 tablet aka. RX-44 (OMAP2420)

− sx1 Siemens SX1 (OMAP310) V2

− sx1-v1 Siemens SX1 (OMAP310) V1

− cheetah Palm Tungsten|E aka. Cheetah PDA (OMAP310)

− realview-eb ARM RealView Emulation Baseboard (ARM926EJ-S)

− realview-eb-mpcore ARM RealView Emulation Baseboard (ARM11MPCore)

− realview-pb-a8 ARM RealView Platform Baseboard for Cortex-A8

− realview-pbx-a9 ARM RealView Platform Baseboard Explore for Cortex-A9

− akita Akita PDA (PXA270)

− spitz Spitz PDA (PXA270)

− borzoi Borzoi PDA (PXA270)

− terrier Terrier PDA (PXA270)

− lm3s811evb Stellaris LM3S811EVB

− lm3s6965evb Stellaris LM3S6965EVB

− tosa Tosa PDA (PXA255)

− versatilepb ARM Versatile/PB (ARM926EJ-S)

− versatileab ARM Versatile/AB (ARM926EJ-S)

− vexpress-a9 ARM Versatile Express for Cortex-A9

− vexpress-a15 ARM Versatile Express for Cortex-A15

− xilinx-zynq-a9 Xilinx Zynq Platform Baseboard for Cortex-A9

− z2 Zipit Z2 (PXA27x)

List of Platforms (ARM)$ qemu-system-arm -machine ?

Page 8: QEMU and Raspberry Pi. Instant Embedded Development

8 CONFIDENTIAL

− "gpio_i2c", bus System, "Controller/Bridge/Hub", desc "Virtual GPIO to I2C bridge"

− "usb-host", bus usb-bus, "Controller/Bridge/Hub"

− "usb-ehci", bus PCI, "USB"

− "ich9-usb-ehci2", bus PCI, "USB"

− "ich9-usb-ehci1", bus PCI, "USB"

− "usb-storage", bus usb-bus, "Storage"

− "usb-uas", bus usb-bus, "Storage"

− "i82562", bus PCI, "Network", desc "Intel i82562 Ethernet"

− "virtio-serial-device", bus virtio-bus, "Input"

− "pci-serial", bus PCI, "Input"

− "virtio-serial-pci", bus PCI, alias "virtio-serial", "Input"

− "usb-serial", bus usb-bus, "Input"

− "virtserialport", bus virtio-serial-bus, "Input"

− "AC97", bus PCI, "Sound", desc "Intel 82801AA AC97 Audio"

− "usb-audio", bus usb-bus, "Sound"

− "ds1338", bus i2c-bus, "Misc"

− "ssd0303", bus i2c-bus, "Misc"

− "lm8323", bus i2c-bus, "Misc"

− "max7310", bus i2c-bus, "Misc"

− "tmp105", bus i2c-bus, "Misc"

− "pci-testdev", bus PCI, "Misc", desc "PCI Test Device"

− "smbus-eeprom", bus i2c-bus, "Misc“

− ….

− …

− …

Supported peripherals (ARM):$ qemu-system-arm -device?

• Zynq-7000 ARM Cortex-A9 CPU• Zynq-7000 ARM Cortex-A9 MPCore• Triple Timer Counter• DDR Memory Controller• DMA Controller (PL330)• Static Memory Controller (NAND/NOR Flash)• SD/SDIO Peripheral Controller (SDHCI)• Zynq Gigabit Ethernet Controller• USB Controller (EHCI - Host support only)• Zynq UART Controller• SPI and QSPI Controllers• I2C Controller

Page 9: QEMU and Raspberry Pi. Instant Embedded Development

9 CONFIDENTIAL

− http://qemu-project.org/Documentation/GettingStartedDevelopers

QEMU Project“QEMU does not have a high level design description document - only the source code tells the full story”

QEMU Cross Reference on Missing Link Electronics

Page 10: QEMU and Raspberry Pi. Instant Embedded Development

10 CONFIDENTIAL

Extending QEMU

Page 11: QEMU and Raspberry Pi. Instant Embedded Development

11 CONFIDENTIAL

QDev

Page 12: QEMU and Raspberry Pi. Instant Embedded Development

12 CONFIDENTIAL

Add statically in platform description file.hw/arm/versatilepb.c :

Add dynamically at startup:

./qemu-system-arm -kernel zImage -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda wheezy-raspbian.img -device adxl345,bus=/versatile_i2c,address=0x53

QDev

Register new type Add new device

Page 13: QEMU and Raspberry Pi. Instant Embedded Development

13 CONFIDENTIAL

Qemu I2C slave device

Page 14: QEMU and Raspberry Pi. Instant Embedded Development

14 CONFIDENTIAL

Read/write registers Emulate control registers behavior Create server socket Read data from socket and fill data registers

adxl345 emulation

Page 15: QEMU and Raspberry Pi. Instant Embedded Development

15 CONFIDENTIAL

− Python− Linux user space ( python-smbus library)− Linux kernel ( /dev/i2c-0 )− Linux i2c protocol driver− Linux i2c-versatile.c driver

− write to Memory Mapped I/O− Qemu MMIO callback (versatile_i2c.c )

− Qemu i2c slave protocol implementation (bitbang_i2c.c )− Qemu i2c core ( hw/i2c/core.c )

– For address=0x53 : call our callbacks. ( read, write, event )

adxl345 emulation process

Page 16: QEMU and Raspberry Pi. Instant Embedded Development

16 CONFIDENTIAL

Linux kernel

adxl345 emulation processQemu

Page 17: QEMU and Raspberry Pi. Instant Embedded Development

17 CONFIDENTIAL

Raspberry Pi The Raspberry Pi is a credit-card-sized single-board computer

Raspberry Pi Model BTarget Price$35

SoCBroadcom BCM2835 (CPU, GPU, DSP, SDRAM, USB)CPU700 MHz ARM1176JZF-S core (ARM11 family, ARMv6 instruction set)GPUBroadcom VideoCore IV @ 250 MHz

SDRAM512 MB (shared with GPU) USB 2.0 ports2 via 3-port USB hub

Video outComposite RCA (PAL and NTSC), HDMI, raw LCD Panels via DSI Audio out3.5 mm jack, HDMI, and I²S audio

StorageSD / MMC / SDIO card slotNetwork10/100 Ethernet

Peripherals8 × GPIO, UART, I²C bus, SPI, I²S audio, +3.3 V, +5 V, groundPower700 mA (3.5 W)

Power Source5 volt via MicroUSB, GPIO headerSize86 x 54 mm

Weight45g

OSArch Linux ARM, Debian GNU/Linux, Gentoo, Fedora, FreeBSD, NetBSD, Plan 9, Raspbian OS, RISC OS, Slackware Linux

Page 18: QEMU and Raspberry Pi. Instant Embedded Development

18 CONFIDENTIAL

Raspberry Pi on QEMUEmulating Raspberry Pi – The easy way (XEC DESIGN)http://xecdesign.com/qemu-emulating-raspberry-pi-the-easy-way

Page 19: QEMU and Raspberry Pi. Instant Embedded Development

19 CONFIDENTIAL

Simulating Accelerometer on QEMU

Netcat: $nc 10.0.2.15 7766 < data.txt

Page 20: QEMU and Raspberry Pi. Instant Embedded Development

20 CONFIDENTIAL

QEMU: Open source processor emulator: http://wiki.qemu.org/Manual

QEMU – Compiling for ARM (1176) emulation (XEC DESIGN): http://xecdesign.com/compiling-qemu/

Compiling an ARM1176 kernel for QEMU (XEC DESIGN): http://xecdesign.com/compiling-a-kernel/

QEMU – Emulating Raspberry Pi the easy way (XEC DESIGN): http://xecdesign.com/qemu-emulating-raspberry-pi-the-easy-way/

Hardware virtualization with QEMU: http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu

KVM Forum 2013: Implementing New Block Drivers: A QEMU Developer Primer by Jeff Codyhttps://www.youtube.com/watch?v=ybNaEeQ2jgo

HOWTO: Virtual Raspbian on Qemu in Ubuntu Linux 12.10: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=29&t=37386

Raspberry Pi Wiki: http://elinux.org/RPi_Hub

Links:

Page 21: QEMU and Raspberry Pi. Instant Embedded Development

CONFIDENTIAL©2013 GlobalLogic Inc.

Stuff

Igor Kaplinsky Senior Embedded Software Developermail: [email protected]

Taras Protsiv Embedded Software Developermail: [email protected]

Volodymyr Shymanskyy Embedded Software Developermail: [email protected]

Page 22: QEMU and Raspberry Pi. Instant Embedded Development

©2013 GlobalLogic Inc. CONFIDENTIAL

Thank you


Top Related