Forum: Compiler & IDEs Problem bei Linux-Treiber für den Raspberry-Pi compilieren


von asd (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche einen Treiber für den Rapsberry Pi zu schreiben. Dafür will 
ich erst mal die Kernel-Sourcen installieren. Nach
http://stackoverflow.com/a/29354565
versuche ich dieses:

"sudo apt-get install build-essential": war schon installiert
"sudo apt-get install dkms": scheint man nur beim Kernelwechsel zu 
brauchen, erst mal nicht installiert
Der Kernel ist der 3.18.11+ #781 REEMPT, die Quellen dazu gibts an der 
selben Stelle wie im Link erwähnt: 
http://www.niksula.hut.fi/~mhiienka/Rpi/linux-headers-rpi/linux-headers-3.18.11-v7%2B_3.18.11-v7%2B-2_armhf.deb

Das installieren mit dpkg (laut der 3. Zeile im Stackpverflow-Link) gibt 
eine Fehlermeldung:
dpkg: error processing linux-headers-3.18.11-v7+ (--install): dependency 
problems - leaving unconfigured

-> was bedeuted das und kann man das ignorieren?

um zu sehen ob der gcc denn schon auf dem System ist, dieser per apt-get 
installieren. Das gibt folgende Fehlermeldung:

The following packages have unmet dependencies:
 linux-headers-3.18.11-v7+ : Depends: gcc-4.7 but it is not going to be 
installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or 
specify a solution).
pi@raspberrypi /mnt/synintern/pi/151130_treiber1 $ gcc --version
gcc (Debian 4.6.3-14+rpi1) 4.6.3

-> jetzt bin ich soweit erst mal hier nachzufragen bevor ich weiter 
selber friemle. Wie bekommt man einen Treiber übersetzt? Zuerst will ich 
das anhand des ersten Beispiels aus dem Buch von Quade/Kunst: "Linux 
Treiber entwickeln" ausprobieren, Quelltexte in Anhang.

von Sheeva P. (sheevaplug)


Lesenswert?

asd schrieb:
> ich versuche einen Treiber für den Rapsberry Pi zu schreiben. Dafür will
> ich erst mal die Kernel-Sourcen installieren. Nach
> http://stackoverflow.com/a/29354565
> versuche ich dieses:
>
> "sudo apt-get install build-essential": war schon installiert
> "sudo apt-get install dkms": scheint man nur beim Kernelwechsel zu
> brauchen, erst mal nicht installiert
> Der Kernel ist der 3.18.11+ #781 REEMPT, die Quellen dazu gibts an der
> selben Stelle wie im Link erwähnt:
> 
http://www.niksula.hut.fi/~mhiienka/Rpi/linux-headers-rpi/linux-headers-3.18.11-v7%2B_3.18.11-v7%2B-2_armhf.deb

Ausweislich des Paketnamens sind das nur die header des Kernels. Zudem 
ist das eine etwas merkwürdige Quelle und der Tipp aus der Anleitung 
nicht so wirklich eine gute Idee. Nimm' lieber die Pakete Deines 
Distributors -- dann funktioniert auch /lib/modules/$(uname -r)/build 
und ist ein Symlink auf /usr/src/linux-headers-$(uname -r).

> Das installieren mit dpkg (laut der 3. Zeile im Stackpverflow-Link) gibt
> eine Fehlermeldung:
> dpkg: error processing linux-headers-3.18.11-v7+ (--install): dependency
> problems - leaving unconfigured
>
> -> was bedeuted das und kann man das ignorieren?

Das ist nur das letzte Ende der Fehlermeldung, daß dpkg Probleme mit den 
Paketabhängigkeiten hat. Im Teil davor steht, was die Ursache ist.

> um zu sehen ob der gcc denn schon auf dem System ist,

Das kann man herausfinden mit "dpkg -l '*gcc*'" oder mit "gcc --version" 
-- aber wenn "build-essential" installiert ist, ist GCC auch drauf, 
genau wie alles andere, was Du zum Übersetzen brauchst. Das ist 
schließlich der ganze Sinn dieses Metapakets.

> dieser per apt-get installieren. Das gibt folgende Fehlermeldung:
>
> The following packages have unmet dependencies:
>  linux-headers-3.18.11-v7+ : Depends: gcc-4.7 but it is not going to be
> installed

Da haben wir die Ursache: das Paket "linux-headers-3.18.11-v7+" hängt 
von dem Paket "gcc-4.7" ab, aber das soll nicht installiert werden. Und 
nein, Du willst das Paket "gcc-4.7" jetzt nicht händisch installieren, 
sondern stattdessen das komische Paket mit "dpkg -P <paketname>" 
löschen. Die Manpage von dpkg ("man dpkg"), vor allem die am Ende 
verwiesene Unterseite von dpkg-query, zeigt Dir, wie Du Deine 
Paketdatenbank abfragen kannst.

> E: Unmet dependencies. Try 'apt-get -f install' with no packages (or
> specify a solution).
> pi@raspberrypi /mnt/synintern/pi/151130_treiber1 $ gcc --version
> gcc (Debian 4.6.3-14+rpi1) 4.6.3
>
> -> jetzt bin ich soweit erst mal hier nachzufragen bevor ich weiter
> selber friemle. Wie bekommt man einen Treiber übersetzt? Zuerst will ich
> das anhand des ersten Beispiels aus dem Buch von Quade/Kunst: "Linux
> Treiber entwickeln" ausprobieren, Quelltexte in Anhang.

Indem man zunächst einmal die Kernelheader der eigenen Distribution 
installiert ("sudo apt-get install linux-headers-$(uname -r)", aber aus 
deren eigenen Repositories und nicht aus irgendwelchen dubiosen Quellen 
in Finnland. Wenn Du auch noch die Kernelsourcen haben willst, kannst Du 
zudem das Paket "linux-source" installieren. In beiden Fällen werden die 
Header und Sourcen dann da installiert, wo sie hingehören: in /usr/src/.

Wenn das alles gemacht ist, kannst Du Deine Dateien in ein Verzeichnis 
kopieren, dort in einer Shell mit "cd" hineinwechseln und dann mit 
"make" die Übersetzung deines "mod1.c" beginnen. Wenn dann etwas nicht 
klappt, frag' einfach nochmal. Viel Erfolg!

von asd (Gast)


Lesenswert?

Vielen Dank für deine Tipps. Ich habe das finnische Paket deinstalliert, 
dann versucht per apt-get die header und die sourcen zu installieren. 
Bei den Header findet apt-get nur die Header von ein paar Versionen die 
aber nicht dem installierten Kernel entsprechen und bei den sourcen 
schlägt apt-get vor die von der Version 3.2 zu installieren, aber ich 
vermute dass die gar nicht passen?
Tut mir leid wenn ich wegen den Details zu viele Fragen stelle, bisher 
kenne ich Linux nur aus Anwender-Sicht. BTW, unter Suse 13.1 auf dem PC 
hab ich es gerade geschafft die Sourcen zu installieren und den 
Rumpf-Treiber aus dem Beispiel zu compilieren. An sich sollte das also 
klappen, nur beim Raspberry zwickt was bei den notwendigen Paketen.

Die Befehle und deren Antworten in der Schell:


pi@raspberrypi /mnt/synintern/pi/151130_treiber1 $ sudo apt-get install 
linux-headers-$(uname -r)
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package linux-headers-3.18.11
E: Couldn't find any package by regex 'linux-headers-3.18.11'


pi@raspberrypi /mnt/synintern/pi/151130_treiber1 $ sudo apt-get install 
linux-headers
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package linux-headers is a virtual package provided by:
  linux-headers-rpi 3.2+46+rpi4
  linux-headers-3.6-trunk-rpi 3.6.9-1~experimental.1+rpi7
  linux-headers-3.2.0-4-rpi 3.2.51-1+rpi1
  linux-headers-3.10-3-rpi 3.10.11-1+rpi7
You should explicitly select one to install.

E: Package 'linux-headers' has no installation candidate


pi@raspberrypi /mnt/synintern/pi/151130_treiber1 $ sudo apt-get install 
linux-source
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  linux-source-3.2
Suggested packages:
  libncurses-dev ncurses-dev libqt4-dev
The following NEW packages will be installed:
  linux-source linux-source-3.2
0 upgraded, 2 newly installed, 0 to remove and 1 not upgraded.
Need to get 78.6 MB of archives.
After this operation, 78.7 MB of additional disk space will be used.
Do you want to continue [Y/n]? n
Abort.


pi@raspberrypi /mnt/synintern/pi/151130_treiber1 $ uname -r
3.18.11+
pi@raspberrypi /mnt/synintern/pi/151130_treiber1 $

von asd (Gast)


Lesenswert?

Zum Thema Header files zum Compilieren eines Treibers auf dem Raspberry 
Pi hab ich das gefunden. Das kann doch nicht deren Ernst sein, Die 
Header müssen doch einfacher aufzutreiben sein?

http://raspberrypi.stackexchange.com/questions/37010/rpi2-kernel-module-compilation-kernel-3-18-11-vs-3-18-11-v7

> 3. Why can't I install the kernel header like I do on my Ubuntu machine.
> This is an unfortunate strategy of the people who maintain Raspbian.



Bevor ich jetzt lang rum experimentier', weiß jemand ob ein anderes 
Image in Bezug auf Header Files und dem Paket "build-essentials" 
freundlicher reagiert? "Ubuntu Mate" vielleicht, oder "Snappy ubuntu 
core"?
https://www.raspberrypi.org/downloads/

von asd (Gast)


Lesenswert?

Sagt mal, aus den Optionen von apt-get werde ich gerade nicht ganz 
schlau, kann man denn ein Paket installieren auch wenn die 
Abhängigkeiten nicht passen?
https://wiki.ubuntuusers.de/apt/apt-get/no_redirect

Mach einigem rumprobieren bin ich immer noch nicht weiter. Da das 
finnische .deb Paket aber offensichtlich die benötigten Dateien enthält, 
das ja "nur" Headerdateien sind, und die Installation nur am geforderten 
gcc-4.7 scheitert (gcc-4.6.3 vorhanden) würde ich es so rum versuchen 
wollen.

von Karsten F. (Firma: von Dänemark) (bingo600)


Lesenswert?

Have a look here
http://www.eevblog.com/forum/reviews/howto-get-the-raspian-kernel-installed-with-headers/

It's an old post, remember to use the correct kernel version numbers, 
when editing boot/config.txt.

mfg
/Bingo

I use here
http://www.eevblog.com/forum/reviews/using-a-raspberry-pi-with-linux-gpib-and-a-beiming-or-agilent-usb-gpib-adapter/

von Thomas S. (doschi_)


Lesenswert?

Vielleicht probierst Du es mal direkt bei raspberrypi.org?
Z.B. hier:
https://www.raspberrypi.org/documentation/linux/kernel/building.md

von asd (Gast)


Lesenswert?

Vielen Dank an alle für die Tipps.
raspberrypi.org hat anscheinend die Header nicht in den 
Standard-Paketen.
Was ich gerade runter geladen habe und morgen ausprobieren werden ist 
das:
https://www.raspbian.org/PiscesImages
Die haben in ihrer Paketliste zumindest Header-Pakete, ich hoffe doch 
dass das dann auch die Version ist passend zum Kernel.
Ansonsten komme ich morgen an der Uni-Bib vorbei und kann mir dieses 
Buch ausleihen: Quade, Kunst: Linux-Treiber, in der neuen Auflage mit 
Sticker "auch für Raspberry Pi" (selber hab ich nur eine alte Auflage). 
Da steht dann vermutlich drin was ich brauche.

von asd (Gast)


Lesenswert?

Hallo,

ich hab zu dem Problem einen Treiber für den Raspberry zu compilieren 
mal diese Disri ausprobiert:
https://www.raspbian.org/PiscesImages

Schaut ganz nett aus, nach einem "sudo apt-get update" und "sudo apt-get 
upgrade" hab ich Kernel 3.1.9+ drauf.
Es gibt acuh verschiedene Dateien mit Headern, aber nicht für die 
Kernelversion 3.1.9. Macht es den Raspberry-Pi-Distri-Machern eigentlich 
Spaß Header-Pakete in ihre Disti zu packen die nicht zum tatsächlich 
installierten Kernel passen? Oder gibt es einen Grund dahinter?

> sudo apt-get install build-essential

hab ich installiert. Dann noch

> sudo apt-get install linux-headers-rpi-rpfv

Was mir gcc-4.7 und die Header zu 3.18.0 drauf gepackt hat.


Irgendwelche Ideen? Meine gehen mir jetzt langsam aus...


Hier ein Ausschnitt aus der Datei mit den Beschreibungen der Pakete der 
Distri 
(http://archive.raspbian.org/raspbian/dists/wheezy/main/binary-armhf/Packages):



Package: linux-headers-rpi
Source: linux-latest (46+rpi4)
Version: 3.2+46+rpi4
Architecture: armhf
Maintainer: Debian Kernel Team <debian-kernel@lists.debian.org>
Installed-Size: 29
Depends: linux-headers-3.2.0-4-rpi
Provides: linux-headers
Priority: extra
Section: kernel
Filename: 
pool/main/l/linux-latest/linux-headers-rpi_3.2+46+rpi4_armhf.deb
Size: 4916
SHA256: b98b91aa9a88cbf4df6101c3aa6d6e5b9fc9a2c0fc06198911bd7c400adacb67
SHA1: 63d1a07da25ef76656ff205ce05e3d69232bb81f
MD5sum: 0b46095f55762f26acebba5b3d57abb8
Description: Header files for Linux rpi configuration (meta-package)
This package depends on the architecture-specific header files for the
latest Linux kernel rpi configuration.

Package: linux-headers-rpi-rpfv
Source: linux-latest (46+rpi4)
Version: 3.18+46+rpi4
Architecture: armhf
Maintainer: Debian Kernel Team <debian-kernel@lists.debian.org>
Installed-Size: 29
Depends: linux-headers-3.18.0-trunk-rpi
Priority: extra
Section: kernel
Filename: 
pool/main/l/linux-latest/linux-headers-rpi-rpfv_3.18+46+rpi4_armhf.deb
Size: 4934
SHA256: e6ad56a37e18ba25c70460cb785ac256aecf6550d2f743fb46885675611238e1
SHA1: b17fdd11e08900de50650b6d6a2df85cccc04a7d
MD5sum: 3c9dd8a3c2973b8e78b9edaf9f0cca3e
Description:
This metapackage will pull in the headers for the raspbian kernel for 
the
raspberry pi 1 based on the version currently reccomended by the 
raspberry
pi foundation (currently 3.18).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.