Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/berdav/qemu-rpi-gpio
Simulate GPIOs in qemu-based Raspberry PI
https://github.com/berdav/qemu-rpi-gpio
gpio qemu raspberry-pi virtualization
Last synced: about 1 month ago
JSON representation
Simulate GPIOs in qemu-based Raspberry PI
- Host: GitHub
- URL: https://github.com/berdav/qemu-rpi-gpio
- Owner: berdav
- License: gpl-3.0
- Created: 2020-12-01T11:53:00.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2022-12-01T10:49:35.000Z (almost 2 years ago)
- Last Synced: 2024-09-29T00:44:29.089Z (about 2 months ago)
- Topics: gpio, qemu, raspberry-pi, virtualization
- Language: Python
- Homepage:
- Size: 24.4 KB
- Stars: 26
- Watchers: 3
- Forks: 10
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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](https://github.com/berdav/qemu).## Installation
You can install the script via pip with
```
pip install qemu-rpi-gpio
```## 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
```