Skip to main content

Simulate GPIOs in qemu-based Raspberry PI

Project description

QEMU RPI GPIO

Simulate GPIO in qemu-based Raspberry Pi

How it works

The script (qemu-rpi-gpio) present in this repository interacts with qemu using the built-in qtest protocol.

Wrapping the protocol and interacting with the memory of the guest operating system, it can set or reset the various GPIOs.

Note: Vanilla qemu (5.1.93) will not handle GPIO interrupts, therefore loading /sys/class/gpio/gpio$N/direction and waiting for an interrupt will not do anything.

To enable interrupt support you'll need to download and compile this qemu fork.

Installation

Wait a little time, I'm pushing to pip :)

Prereqisites

You need socat, python3 and pexpect library to use this script.

These can be installed under ubuntu with:

sudo apt install python3-pexpect socat

To download raspbian images you'll need 7zip

sudo apt install p7zip-full

Setup

Download a raspbian image using

./qemu-pi-setup/setup.sh

After this operation, execute the script to load the unix socket and make it available to qemu

./qemu-rpi-gpio

You will be prompted to an interactive shell, you can find the commands available in the Interacting with gpios section.

In another terminal execute the ./qemu-pi-setup/run.sh script, this will execute a virtual raspberry pi and attach it to the gpio application.

If you close the raspberry pi you can reload the socket using the command reload in the qemu-rpi-gpio prompt.

Interacting with gpios

First of all, you need to export GPIOs in your guest Linux. In a shell on your raspberry pi do:

$ sudo su -
# echo 4 >/sys/class/gpio/export
# echo in >/sys/class/gpio/direction

The main commands in the qemu-rpi-gpio application are:

command description example
get $N get the value of GPIO $N get 4
set $N $V set the value of GPIO $N to $V (1 or 0) set 4 1

You can get the full list of commands using help

For instance, let us set the value of the pre-exported gpio 4

(gpio)> set 4 1

Now you can read the value of your gpio

# cat /sys/class/gpio/value
1

If we set it to zero, it will be immediately reflected in the guest system

(gpio)> set 4 0
# cat /sys/class/gpio/value
0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

qemu_rpi_gpio-0.3-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

File details

Details for the file qemu_rpi_gpio-0.3-py3-none-any.whl.

File metadata

  • Download URL: qemu_rpi_gpio-0.3-py3-none-any.whl
  • Upload date:
  • Size: 16.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for qemu_rpi_gpio-0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f3a5f003ac3ef831f2d9711a1d8f922a0df156785ec5fc8750536b2984088178
MD5 9151382465bbb22a3a5e7cbd3c05ef5d
BLAKE2b-256 62a0b9c0a8e06d8c80934c45154dc103ac533135c1ce33d44f014c3b51333c02

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page