Kursnotizen: Linux Embedded 2015-11-30¶
Multithreading¶
Ausprogrammiert haben wir den Load/Modify/Store Konflikt anhand eines parallelen Integer Increments - als Demonstration der Mutter aller Race Conditions. Danach haben wir die Race Condition mit Hilfe eines Mutex gefixt.
Die Inter-Thread Kommunkation mit Hilfe von Condition Variablen habe ich nur frontal vorgeführt (mit viel Diskussion, vielen Dank an Stefan), mit Beispielcode aus meinem Github-Projekt) zum Kurs Linux Systems Programming (Course Series).
Das Beispiel war eine “Message Queue”, händisch ausprogrammiert mit
Hilfe eines Mutex und zweier Condition Variablen (“not full”, “not
empty”), und den Operation push
und pop
. Code zu bewundern
hier.
GPIOs in Userspace¶
Ihr könnt euch erinnern an die LED, die ich von der Commandline aus
blinken liess, irgendwo in /sys/class/gpio
. Ein wenig später im
Kurs hatten wir GPIOs, die als Interrupt (an der Falling Edge)
konfiguriert waren, und die ich in einem kleinen C-Programm
empfing. Hier ein paar Teile …
Dokumentation im Kernel Source. Unbedingt lesen.
Das Beispielprogramm, das auf den GPIOs 23 und 24 horcht, gpio-interrupt.cc
CAN Bus¶
CAN wird unter Linux über normale Sockets gesprochen, siehe dazu die ausführliche Dokumentation im Kernel Source: Documentation/networking/can.txt.
Schamlose Eigenwerbung: mein Vortrag bei den Grazer Linuxtagen 2014 zu dem Thema,
Das can-utils Projekt ist das Überbleibsel des ehemaligen SocketCAN Projektes; dessen Kernel-Teil ist schon lange vom Kernel absorbiert worden. Es enthält schnuckelige kleine Utilities wie Aufzeichnen, Replay, etc. (Siehe dazu die Folien vom Vortrag.)
Driver Beispiele¶
Freitag war Kerneldrivertag. Sorry Emanuel für den Reboot. Die Beispieldriver sind zu finden in meinem Github-Repository zum Kernel-Kurs.
Beispiele für Real-Life-Driver:
Wir hatten
/dev/random
,/dev/mem
(wo der Hans-Jörg seine Register findet),/dev/null
,/dev/zero
. Diese “Devices” werden vom mem Driver angeboten. Er hat ganz prominent die Major Number 1 und ist in drivers/char/mem.c. implementiert. Gutes Beispiel für den Anfang.Der MCP2515 Driver (CAN Controller, über SPI angesprochen). Ein etwas fortgeschritteneres Beispiel, da er sich ins Network Subsystem einpflegt und als SPI Client agiert. (Kein Character Device in Sicht.) drivers/net/can/spi/mcp251x.c
Der CAN Controller im AT91 SoC - Stefan, ich glaub das ist der Chip, der auf deinem Stecker verbaut ist. drivers/net/can/at91_can.c.
Heizungssteuerung¶
Lacht nur!