Appearance
7. Zugriff auf Hardware aus dem Userspace
2
Eingangsspannung
- Bereich von 0 ... 3.3V einhalten (bei gewisser HW max 1.8V)
- Für HW-Zugriff sind immer Kerneltreiber für HW und für Subsystem nötig
- z.B. Accellerometer:
adxl345
Industrial IO sowie I2C oder SPI
- z.B. Accellerometer:
make menuconfig
GPIO_SYSFS
I2C_CHARDEV
SPI_SPIDEV
- ...
- Compile
>
Deploy>
Load
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
3
SysFS
- einfacher Zugriff auf (meist) einfache Schnittstellen (mit nur wenigen Parametern)
- z.B. auf GPIOs, LEDs, PWM, Temperatursensoren, CPU-Powermodi, ...
- über Pseudodateien unter
/sys/class/{gpio, leds, pwm, ...}
- theoretisch beliebige GPIOs aktivierbar über
/sys/class/gpio/export
export
ändert jedoch das Pinmultiplexing nicht! (wenn falsch via DTS/DTB umdefinieren)- Zugriff via Shell (
echo
) oder File-Systemcalls (wieopen()
,read()
,write()
,lseek()
...) - auch Asynchron Notification über
gpio/value
undpoll()
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
4
Devicenode
- Zugriff via
/dev/
auf einen Device-Driver - z.B. Anwendungsspezifische Subsysteme
- HID
- TTY
- Industrial IO (IIO)
- Sound
- Video4Linux
- Zugriff via FS-Calls und
ioctl
- Für USB:
libusb
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
5
/dev/mem
- Direktes Mapping der Hardware via Memorymap
- Sehr unsicher!
- Quick and Dirty
- Falls für HW keine Treiber existieren
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
6
GPIO
- Input: Pollen
- via
read()
call - erzeugt aber unnötig viel CPU Last
- unproblematisch falls das Interval tief ist
- via
- Input: ISR
- emöglicht schnelles reagieren ohne CPU-Last
- reagiert auf hw interrupt
- bei aktivierung aus dem Userspace mit
/sys/class/gpio/event
- Doku: https://www.kernel.org/doc/Documentation/gpio/sysfs.txt
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
7
I2C
- Auch
IIC
,I2C
oderTWI
genannt - Benötigt nur 2 Signalleitungen
- SDA: Serial Data
- SCL: Serial Clock
- Busfähig (7 Bit Adresse)
- rel. langsam (max 3.2 Mbps)
- Halbduplex (gleichzeitig nur eine Datenrichtung)
- Single Master
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
8
Beispiel: adxl345
i2c-tools
(Konfigurieren in Buildroot)- Für Accellerometer auf DE1-SoC
bash
i2cdetect -y 0
# Adresse 0x53
i2cget -y 0 0x53 0x2D
i2cget -y 0 0x53 0x2D 0x08
i2cget -y 0 0x53 0x32
i2cget -y 0 0x53 0x33
i2cget -y 0 0x53 0x34
# siehe datasheet
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
10
SPI Bus
- schneller als I2C (bei 50MHz)
- Vollduplex
- Mehrere Devices am selben Bus
- mit Chipselect (keine Adressen)
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
12
SPI Clock Modes
- Clock Polarity
- Clock Phase (Rising / Falling Edge)
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
13
USB
- Sehr hohe Datenraten möglich
Spec | Datenrate Mbit / s |
---|---|
1.1 low speed | 1.5 |
1.1 full speed | 12 |
2.0 highspeed | 480 |
3.0 superspeed | 5'000 |
3.1 superspeed+ | 10'000 |
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
14
USB
- Netto Transferrate nur ca. 2/3 der theoretischen
- USB 3.x immer noch relativ selten bei SoCs
- Single Master, mehrere Slaves (via Hubs)
- OTG: Hybrider Modus möglich
- Tranfertypes (Control, Bulk, Isochron, Interrupt)
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
16
Asynchron Serielle Schnittstelle
- Unter Linux
TTY
/ unter WindowsCOM
- ... resp. unter
/deV/tty*
- Typische Bezeichnung
/dev/ttyUSB0
für FTDI / Profilic/dev/ttyACM0
für USB CDC Serial Device Class (konformes USB Serial Interface)/dev/ttyS0
für Schnittstelle direkt auf dem SoC
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
17
UART / USART
- Praktisch und einfach für Zeilenorientierte Kommunikation (canonical input)
- Kompliziert für Blockorientierten oder binären (non-ascii) Transfer - am besten für non-canonical libftdi verwenden - ... oder direkt libusb verwenden
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
18
Linux I/O für Sensoren
- Input Subsystem
- HID für Keyboard / Mouse
- Zugriff via /sys/class/input
- Android verwendet dieses Interface auch für Sensoren
- HWMON
- Überwachung des Mainboards
/sys/class/hwmon
- Temparatur, Feuchtigkeit, Voltage
- Im Kernel unter Hardware Monitoring Support
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
19
mmap
- Per Systemcall auf
mmap()
- Erlaubt beliebiges Pagen auf Physical Memory in den Userspace
- ... sowie DRAM als auch Memory Mapped IO
- Nachteile
- muss mit "root" ausgeführt werden
- Portierbarkeit nicht gewährleistet
10.05.2024
7. Zugriff auf Hardware aus dem Userspace
20
Industrial I/O (IIO)
- Für komplexere Chips
/sys/class/iio/
+ Char Device via/dev/
- Derzeit > 300 Chips unterstützt
- Programmierung meist im Kernel Space wegen HW-Triggerung
10.05.2024