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.

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 …

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!