README.md 2.55 KB
Newer Older
Christian Eckl's avatar
Christian Eckl committed
1
# Loadable Kernelmodule für eine 7-Segment Anzeige
Christian Eckl's avatar
Christian Eckl committed
2
![Bild](/uploads/9ba124e9e9e14378c440b497a7e92a16/Bild.png)
Christian Eckl's avatar
Christian Eckl committed
3

Christian Eckl's avatar
Christian Eckl committed
4
In diesem Projekt geht es um die Entwicklung eines Kernelmoduls, welches die Gpio-Pins an einem Raspberry Pi ansteuern soll, um eine 7-Segmentanzeige zu betreiben.
Christian Eckl's avatar
Christian Eckl committed
5

Christian Eckl's avatar
Christian Eckl committed
6
## Getting Started
Christian Eckl's avatar
Christian Eckl committed
7

Christian Eckl's avatar
Christian Eckl committed
8
Als erstes muss der Raspberry Pi geupdatet werden, hierzu verwendet man die standart Updateroutine und führt alle Befehle als Superuser aus:
Christian Eckl's avatar
Christian Eckl committed
9
10
11
12
13
14
15
16
17

> $ sudo su
> $ apt-get update -y
> $ apt-get upgrade -y

Danach wird der Kernel geupdatet:

> $ rpi-update

Christian Eckl's avatar
Christian Eckl committed
18
Nachdem die Updates ausgeführt wurden, rebooten sie den Raspberry Pi.
Christian Eckl's avatar
Christian Eckl committed
19
20
21
22
23
24
25
26
27

Nun benötigen wir die Kernel-rpi-source:

> $ sudo wget https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source -O /usr/bin/rpi-source

Diese Datei muss ausführbar gemacht werden:

> $ sudo chmod +x /usr/bin/rpi-source

Christian Eckl's avatar
Christian Eckl committed
28
Dem Updateprozess muss noch übergeben werden, dass es sich um das aktuelle Skript handelt:
Christian Eckl's avatar
Christian Eckl committed
29
30
31

> $ /usr/bin/rpi-source -q --tag-update

Christian Eckl's avatar
Christian Eckl committed
32
Dann wird der neue Kernel geladen:
Christian Eckl's avatar
Christian Eckl committed
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

> $ rpi-source

## Load the LKM

Im Modulverzeichnis wird 
> $ make 

aufgerufen und daraufhin wird sevenseg.c kompiliert und eine neue Datei namens sevenseg.ko erstellt.

Diese Datei wird mit 
> $ insmod sevenseg.ko 

aufgerufen und das Kernelmodul wird geladen.

Zur Sicherheit überprüft man nun ob das Modul fehlerfrei geladen wurde:

> $ dmesg

Christian Eckl's avatar
Christian Eckl committed
52
53
54
55
56
57
58
59
60
Wenn keine Fehlermeldungen ausgegeben werden, muss man noch die Nodedatei erstellen:
```c
[63023.700153] SEVENSEG: starting...
[63023.700164] SEVENSEG: starting gpio...
[63023.700287] SEVENSEG: starting gpio done.
[63023.700308] SEVENSEG: sevenseg driver loaded with major 243
[63023.700319] SEVENSEG: >> $ mknod /dev/sevenseg c 243 0
[63023.700329] malloc allocator address: 0xad7088c0
```
Christian Eckl's avatar
Christian Eckl committed
61
62
63
64
65
66
67
68
69
In unserem Fall mit Majornummer 243:

> $ mknod /dev/sevenseg 243 0

Danach kann das Modul mit 

> $ echo " " >> /dev/sevenseg 

benutzt werden.
Christian Eckl's avatar
Christian Eckl committed
70
71
72
73
74
75
76
77
78
79
80
81
82
83

## Wiring












Christian Eckl's avatar
Christian Eckl committed
84
85
86
## Test the LKM
Fertige Platine an den Raspberry Pi anschließen

Julian Kralik's avatar
Julian Kralik committed
87
<img src="https://mygit.th-deg.de/ce12213/Kernelmodul_Sevenseg/raw/master/Pictures/Sevenseg%201.jpeg" width="200" height="250">
Christian Eckl's avatar
Christian Eckl committed
88

Julian Kralik's avatar
Julian Kralik committed
89
<img src="https://mygit.th-deg.de/ce12213/Kernelmodul_Sevenseg/raw/master/Pictures/Sevenseg%202.jpeg" width="200" height="250">
Christian Eckl's avatar
Christian Eckl committed
90
91
92

SSH Verbindung zum Raspberry Pi herstellen das LKM laden mit `$ dmesg` überprüfen und die Nodedatei erstellen anschließend mit `$ echo 6 >> /dev/sevenseg` testen:

Christian Eckl's avatar
Christian Eckl committed
93
94
95
<img src="https://mygit.th-deg.de/ce12213/Kernelmodul_Sevenseg/raw/master/Pictures/Sevenseg-Putty.png">

[Video] (https://youtu.be/KeWOKTn3TiI) zur Inbetriebnahme und Test des Treibers.