Forum: Mikrocontroller und Digitale Elektronik ucLinux Treiberentwicklung


von Markus R. (mark989)


Lesenswert?

Hi alle zusammen,

ich will im Rahmen meiner Bachelorarbeit einen Smartsensor entwicklung 
der auf einem µC läuft mit  µClinux. Der µC soll ein eigenes 
Ethernetinterface über die SPI Schnittstelle benutzten, dh. ich muss 
einen SPI/Ethernet Treiber schreiben.
Ich kann mir vorstellen wie man dieses unter Linux realisiert.
Hab allerdings mit µClinux noch nicht viel zu tun gehabt, außer das ich 
mich da reingelesen habe und weiß was die Hauptunterschiede zu Linux 
sind.
Meine Frage ist jetzt wie sieht die Treiberentwicklung unter uclinux 
aus?
Bei einer googlesuche mit "driverdev... uclinux" kann ich leider nicht 
viel erreichen.
Kann es sein das Treiberentwicklung bei beiden Linuxversionen genau 
gleich ist?
Oder gibt es Unterschiede?

von Christoph (Gast)


Lesenswert?

Markus Reim schrieb:
> Oder gibt es Unterschiede?

Das solltest du eigentlich selbst beantworten koennen:

Markus Reim schrieb:
> Hab allerdings mit µClinux noch nicht viel zu tun gehabt, außer das ich
> mich da reingelesen habe und weiß was die Hauptunterschiede zu Linux
> sind.

AFAIK ist bei uCLinux der Zugriff auf den Speicher wohl ein anderer - 
wobei die Routinen zur Allokalisierung usw. vllt sogar gleich heissen.

von Akku-Dev (Gast)


Lesenswert?

LKMPG

von Sheldon C. (sheldon) Benutzerseite


Lesenswert?

Hallo Markus,

die Zeiten in der µCLinux ein Fork von Linux waren sind zum Glück 
vorbei.
Alle Änderungen die einen MMU losen Betrieb auf µC erlauben sind 
mittlerweile zurückgeflossen.

Es gibt also nur noch Linux und fertig.
Den Standard-Kernel kannst du auch für µCs konfigurieren.

Wenn du die Bachelorarbeit nicht mit Treiber programmieren verbringen 
willst - außer das ist Kern der Arbeit - dann verwende einfach einen 
fertigen Treiber für die SPI Kommunikation.

Hier gibts z.B. eine schöne embedded Linux Platform für wenig Geld:
http://gnublin.embedded-projects.net/
Und das mit einem ARM9, der bringt auch den nötigen Druck, um deine 
Werte z.B. via Webserver nach draußen sichtbar zu machen.

von Markus R. (mark989)


Lesenswert?

> AFAIK ist bei uCLinux der Zugriff auf den Speicher wohl ein anderer -
> wobei die Routinen zur Allokalisierung usw. vllt sogar gleich heissen.
Das viele methoden gleich heißen, hab ich auch ermittelt,
die Frage ist wie dieser andere zugriff auf den Speicher zu realisieren 
ist!?


> LKMPG
Also doch identisch mit der Entwicklung für Linux??

von Markus R. (mark989)


Lesenswert?

> Alle Änderungen die einen MMU losen Betrieb auf µC erlauben sind
> mittlerweile zurückgeflossen.
Was meinst du damit genau? Heißt das dass ich jedes Linux ("ohne 
Änderungen") auf jedes board ohne MMU installieren kann???


> Wenn du die Bachelorarbeit nicht mit Treiber programmieren verbringen
> willst - außer das ist Kern der Arbeit - dann verwende einfach einen
> fertigen Treiber für die SPI Kommunikation.
Jep, es ist Kern der Arbeit.

gruß Markus

von Sheldon C. (sheldon) Benutzerseite


Lesenswert?

Markus R. schrieb:
>> Alle Änderungen die einen MMU losen Betrieb auf µC erlauben sind
>> mittlerweile zurückgeflossen.
> Was meinst du damit genau? Heißt das dass ich jedes Linux ("ohne
> Änderungen") auf jedes board ohne MMU installieren kann???
>
Ja, die Anpassungen von µC Linux für MMU losen Betrieb sind in kernel 
2.6 zurück gemerged worden.
D.h. der standard vanilla kernel von www.kernel.org kann per 
Konfiguration für MMU losen Betrieb konfiguriert werden. Es sind keine 
Änderungen im Code oder Patches notwendig.
(Habe ich noch nie gemacht btw, aber das habe ich gelesen)
Ich habe bisher meistens ARM verwendet, in die CPU hat eine MMU.

Natürlich kannst du keinen fertigen kernel nehmen wenn du das meinst.
Du brauchst für embedded natürlich eine toolchain für den CPU 
architecture, eine kleine C-Lib wie ucLiB, ...
Wenn die Toolchain steht kannst du den kernel damit bauen (cross 
compilen).

Das Toolchain konfigurieren und bauen ist natürlich nicht ganz trivial. 
Meist funktionieren nur ausgesuchte Versionen miteinander. Da kann ein 
vorkonfiguriertes Embedded Linux od. auch µCLinux natürlich einfacher 
sein.

Es gibt auch scripte wie buildroot, scratchbox, etc. die das Bauen von 
Toolchains vereinfachen. Ich weiß nicht was deine Target Architecture 
ist, aber du kannst ja mal schauen on die Tools dein Zielsystem 
unterstützen.

>
>> Wenn du die Bachelorarbeit nicht mit Treiber programmieren verbringen
>> willst - außer das ist Kern der Arbeit - dann verwende einfach einen
>> fertigen Treiber für die SPI Kommunikation.
> Jep, es ist Kern der Arbeit.
>
Dann solltes du auf jeden Fall mal das Linux Kernel Book besorgen. Gibts 
auch online.
Entscheidend ist hier ob du auf 2.6er kernel setzt oder doch zu den 
alten 2.4er µCLinux greifst, da sich das Treiber-Model in 2.6 geändert 
hat.
Mit 2.4 soll man noch ein bißchen kleiner runter kommen, was die 
Codegröße betrifft, wenn das aber nicht extrem kritisch ist, würde ich 
auf jeden Fall >=2.6 verwenden. Aktuell ist ja mittlerweile 3.6 ;-)

> gruß Markus

von Markus R. (mark989)


Lesenswert?

Sheldon Cooper schrieb:

>Das Toolchain konfigurieren und bauen ist natürlich nicht ganz trivial.
>Meist funktionieren nur ausgesuchte Versionen miteinander. Da kann ein
>vorkonfiguriertes Embedded Linux od. auch µCLinux natürlich einfacher
>sein.

Zum einen das und zum anderen ist mindestens eine Aufwandsabschätzung 
für eine SPI-Treiber-Entwicklung Teil meines Praxisprojekts. Und dafür 
ist es für mich interessant wie es sich von der Entwicklung unter Linux 
unterscheidet.
Noch eine Frage: Ob es eine SPI-Bibliothek gibt hängt doch nur von dem 
zugrunde liegenden Prozessor ab? Oder auch ich linux oder µclinux als OS 
benutze?

von Georg A. (georga)


Lesenswert?

> Und dafür ist es für mich interessant wie es sich von der Entwicklung
> unter Linux unterscheidet.

Nicht wesentlich. Zum Testen der HW kann man es sich am Anfang unter 
uClinux aber einfacher machen, weil sie (solange sie memory-mapped ist) 
ja auch direkt aus dem Userspace aus angesprochen werden kann. D.h. du 
kannst die Routinen erstmal so einfach ausprobieren, bevor sie in den 
Kernel kommen.

von Hans Ulli K. (Gast)


Lesenswert?

Erstmal kommt die frage ob du die Sourcen für deine µC hast und welche 
Version diese sind.
Du kannst nicht einfach von 2.6.15 nach 3.6 springen, da hat sich sehr 
viel innehalb des Kernels geändern.

Bei buildroot und Co. sind meistens nur "fertige" configs für den Kennel 
vorhanden ggf. kannst du hier auch eine eigene "unterschieben".
Das hilft dir aber nicht in Bezug auf einen Treiber im Kernel weiter, da 
du dessen Entwicklung nicht über eine Versionskontrolle (git) überwachen 
kannst. Also brauchst du hier ein (fertiges) RootFS das du deinem Kernel 
unterschben mit den BootArgs unterschieben kannst.

Für das Bauen des Kernels brauchst du noch die toolchain. Entweder 
fertig z.B. linearo oder selber z.B. gentoo mit der crossdev.

Als Lektüre kannst du "Linux Device Drivers" nehmen, den MMU Teil 
überspringst du einfach.

Link
www.iitg.ernet.in/asahu/cs421/books/LDD3e.pdf

Wie die Anbindung von SPI innerhalb vom Kernel funktioniert kannst du 
anhand der treiber selber lesen.

Ein
git grep -l "linux/spi/spi.h" drivers/net
listet mir diese Treiber auf

drivers/net/can/mcp251x.c
drivers/net/ethernet/micrel/ks8851.c
drivers/net/ethernet/microchip/enc28j60.c
drivers/net/phy/spi_ks8995.c
drivers/net/wireless/libertas/if_spi.c
drivers/net/wireless/p54/p54spi.c
drivers/net/wireless/wl1251/spi.c
drivers/net/wireless/wl12xx/acx.c
drivers/net/wireless/wl12xx/cmd.c
drivers/net/wireless/wl12xx/io.c
drivers/net/wireless/wl12xx/main.c
drivers/net/wireless/wl12xx/spi.c

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.