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?
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.
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.
> 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??
> 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
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
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?
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.