fbtft - Treiber anpassen/hinzufügen - RA8875

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hi,

    ich habe fbtft installiert und möchte einen vorhandenes Kernel-Modul (*.ko) verändern.

    Ich möchte z.b. den Treiber für das HY28A-Display (fb_ili9320.c) ändern.
    Ich nutze ein TFT mit RA8875-Controller und SPI.

    Theoretisch bräuche ich doch "nur" die Initialisierung und das Schreiben ins Display-RAM zu ändern. Die Initialisierung und das Schreiben in das Display-RAM habe ich schon mit Python lauffähig getestet.

    Das Anpassen der "fb_ili9320.c" bekomme ich hin, wie kann ich denn jetzt aus dem C-File ein Kernel-Modul "fb_ili9320.ko" machen und es im Kernel "Registrieren"?

    Hat jemand so etwas schon einmal gemacht?

    Gruß
    Pf@nne

    EDIT:
    Ja, ich..... Ich habe das Vorgehen >>hier<< mal zusammengefasst.....:)

    Einmal editiert, zuletzt von Pfanne (9. Mai 2014 um 19:18)

  • Ja hallo ...

    immer am experimentieren, unser altes Kochgeschirr ;) ...

    Du müsstest Dir die Quellen holen und dann im Sourcetree die Kernelmodule neu erzeugen.
    Eine, wie ich finde, Super-Anleitung (inkl. Beschreibung wie das mit einem Crosscompiler anstellt) findest Du -> hier <- bei elinux.org.

    cheers,
    -ds-

  • Hi,

    Zitat

    immer am experimentieren, unser altes Kochgeschirr Icon_wink ...


    Aller Anfang ist schwer..... Diese Linuxwelt ist ziemlich verwirrend.....:s

    In der fbtft WIKI steht sogar drin wie man einen eigenen Driver in 30Min implementiert.
    Ich scheitere aber schon an der Vorbereitung.....

    Vieleich können wir das "zusammen" mal durchgehen.....

    Install dependencies

    Code
    sudo apt-get update
    sudo apt-get -y install git libncurses5-dev


    Installiert eine Entwicklungs-Library

    Source

    Code
    cd
    git clone --depth 1 git://github.com/raspberrypi/linux.git


    Lädt den gesamten Raspberry-Linux-Kernel-SourceCode??
    Wo landet der?

    Code
    cd ~/linux/drivers/video/
    git clone https://github.com/notro/fbtft.git


    Manueller Wechsel in in das Kernel-Source-DIR, dann laden des fbtft-SourceCodes.
    Was ist wenn fbft schon Installiert ist?

    Code
    # Let make/kbuild see the directory and config options.
    echo "obj-y += fbtft/" >> Makefile
    sed -i 's/endmenu/source "drivers\/video\/fbtft\/Kconfig"\n\nendmenu/' Kconfig


    Hab ich garnicht verstanden???? :s

    vielleicht erstmal bis hierhin......

  • So, jetzt aber ...

    Erster Schritt, den ich jetzt gemacht habe:
    Das aktuellste Kernel-Image mit Framebuffer-Unterstützung downloaden und auf eine SD-Karte flashen.
    Dabei das Image verwenden, bei dem die Treiber als Module vorliegen und nicht in den Kernel integriert sind:


    RPi damit booten. Jetzt kann man schon testen, ob der passende Kernel gebootet ist:

    sudo modprobe fbtft_device name=adafruit22

    sollte in etwa folgende Ausgaben im Log erzeugen ( mit dmesg anzeigen lassen :(

    Nun das Syste erst mal rudimentär einrichten (Netz, WLAN, FS erweitern, ...) und einen Reboot ausführen ( shutdown -r now ).

    Jetzt sind wir nach Anleitung etwa -> hier <-.

    Fortsetzung folgt ....

    -ds-

  • Moin,

    fleißig du bist......:bravo2:

    Die Installation des fbtft (mit den einzelnen *.ko-Modulen) habe ich so gemacht:

    Code
    sudo wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update -O /usr/bin/rpi-update
    sudo chmod +x /usr/bin/rpi-update
    sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update


    das habe ich von >>hier<<.

    Danach läuft fbtft wie beschrieben....
    Der Adafruit-Driver läßt sich auch installieren/laden:

    Code
    modprobe fbtft_device name=adafruit22

    Ergebnis ist wie von Dir gepostet, auf dem SPI ist auch leben......
    Mit

    Code
    con2fbmap 1 1


    Werden auch kontinuierlich Daten per SPI "rausgeschaufelt"

    Unter

    Code
    /lib/modules/3.10.34+/kernel/drivers/video/fbtft


    liegen alle Module als *.ko vor.

    Ist es denn notwendig das Image zu laden??

    Gruß
    Pf@nne

    EDIT:
    Ich hab das Image mal installiert, auf Anhieb kann ich da keinen Unterschied feststellen, läuft alles genauso,
    außer, dass die Grundkonfig neu gemacht werden muss.

    Einmal editiert, zuletzt von Pfanne (19. April 2014 um 11:50)

  • Hallöchen auch ...

    wenn ich es richtig gelesen habe, dann kannst Du entweder das image laden und per dd auf die SD-Karte schreiben, oder den Stand per rpi-update installieren.
    Voraussetzung für die Modulbauerei ist halt ein aktuelles wheezy mit Framebuffer-Unterstützung.

    So, doch jetzt schmeiss ich erst mal den KOCHpiler an und baue mir ein Mittagessen ;) ...

    EDIT:

    Es geht weiter wie in der Anleitung unter:


    Allerdings habe ich jetzt samba mal weggelassen.
    Es funktioniert auch alles so weit.

    Bis zum Punkt:


    Jetzt fehlt dieses extra-Verzeichnis. Ich hab' da was im Hinterkopf: wie war das mit den essentials?

    Fortsetzung folgt .....


    bis später,
    -ds-

  • Mahlzeit.... (und nix zu essen).....

    Zitat

    entweder das image laden und per dd auf die SD-Karte schreiben, oder den Stand per rpi-update installieren.
    Voraussetzung für die Modulbauerei ist halt ein aktuelles wheezy mit Framebuffer-Unterstützung.


    Sehe ich auch so, ich würde dann die zweite möglichkeit nutzen wollen, das spart ne Menge konfiguriererei.......:shy:

    Dann wollen wir mal sehen wie weit du so kommst..... :daumendreh2:

    Ich mach jetzt in Sachen GALA-Bau..... meine Frau hat die Liste ausgepackt

    • Rankgitter reparieren,
    • Buxbaum entsorgen,
    • Lavendel ausbuddeln......

    Gruß
    Pf@nne

    EDIT:
    Wie machst du die links zu einer bestimmten Stelle einer Seite? :s

    Einmal editiert, zuletzt von Pfanne (19. April 2014 um 15:02)

  • Zum Verlinken auf eine Textstelle kannst Du mit der Maus auf die fetten Schlagworte gehen. Dann erscheint links davon eine Grafik, die wohl zwei Kettenglieder darstellen soll. Da dann mit der Maus drauf und durch Rechtsklick "Link Adresse kopieren" ..

    Aber jetzt weiter im Text:

    Allerdings muss jetzt ein anderes Verzeichnis herhalten als in der Beschreibung. Die Dateien passen aber:

    cp ~/.rpi-firmware/extra/{.config,Module.symvers} ~/linux/
    cd ~/linux
    make prepare scripts

    So ... und jetzt lassen wir einen build laufen um sicher zu stellen, dass so ein build-Lauf auch funktioniert:

    Und damit sind wir hier:


    make -C /lib/modules/$(uname -r)/build SUBDIRS=drivers/video/fbtft modules

    Da kommt jetzt eine Fehlermeldung und es ist erstmal vorbei ... da steht wohl erst noch einiges an Recherche an.
    Wenn noch jemand anderes auch Zeit/Lust/Laune hat hier weiter zu machen: nur zu!
    Ich werd jetzt erstmal versuchen raus zu bekommen, was Sache ist.


    Bis demnächst ...
    -ds-

  • Hi,

    ich hab jetzt doch mal das Image installiert.....

    Code
    cd
    git clone --depth 1 git://github.com/raspberrypi/linux.git


    das lief durch....

    Ich hänge jetzt hier....

    Code
    root@raspberrypi:~# cd ~/linux/drivers/video/
    -bash: cd: /root/linux/drivers/video/: No such file or directory

    Oder ist damit das video-DIR des aktuellen kernels gemeint?

    Code
    root@raspberrypi:/lib/modules/3.10.33+/kernel/drivers/video#

    Mir macht dieses ~/linux zu schaffen.......

    Gruß
    Pf@nne

    EDIT:

    Zitat

    Allerdings muss jetzt ein anderes Verzeichnis herhalten als in der Beschreibung. Die Dateien passen aber:

    Code
    root@RaspBerry:/lib/modules/3.10.34+/kernel/drivers/video/fbtft# cp ~/.rpi-firmware/extra/{.config,Module.symvers} ~/linux/
    cp: target `/root/linux/' is not a directory

    Ich werd noch affig mit diesem /linux, beim durchsuchen finde ich auch kein linux???:wallbash:

    Gruß
    Pf@nne

    Einmal editiert, zuletzt von Pfanne (19. April 2014 um 19:37)


  • ...
    Ich hänge jetzt hier....

    Code
    root@raspberrypi:~# cd ~/linux/drivers/video/
    -bash: cd: /root/linux/drivers/video/: No such file or directory


    ...

    So, also ~/linux/ bedeutet $HOME/linux -> das ist also das Home-Verzeichnis des aktuellen Benutzers und darunter das Verzeichnis linux.

    Hast Du alles als root gemacht. Ich vermute mal, dass Du das clonen als User pi gemacht hast.
    Also putz das noch mal weg:

    Code
    cd /home/pi
    rm ./linux

    und dann clone das nochmal als User root:

    Code
    sudo bash
    cd
    (jetzt solltest Du im Verzeichnis /root sein)
    git clone --depth 1 git://github.com/raspberrypi/linux.git
    ...

    Tja, das sollte jetzt gehen.
    Ich hab' hier noch eine Funkgeschichte am Start ... das erledige ich noch, und dann geht's weiter

    -ds-

  • OK, ich war zwar die ganze Zeit als root unterwegs....
    wahrscheinlich hab ich aber in ein falsches DIR geklont......

    Jetzt habe ich aber alle da,

    • im ~/linux/ (/root/linux....) hab ich jetzt den Kernel!
    • und in diesem habe ich auch ..../video/fbtft/ ausgecheckt mit allen *.c-Files

    so weit so gut.....

    jetzt bin ich am Punkt Preparation

    Code
    root@RaspBerry:~# cp ~/extra/{.config,Module.symvers} ~/linux/
    cp: cannot stat `/root/extra/.config': No such file or directory
    cp: cannot stat `/root/extra/Module.symvers': No such file or directory


    Auch dein Vorschlag klappt nicht....

    Code
    root@RaspBerry:~# cp ~/.rpi-firmware/extra/{.config,Module.symvers} ~/linux/
    cp: cannot stat `/root/.rpi-firmware/extra/.config': No such file or directory
    cp: cannot stat `/root/.rpi-firmware/extra/Module.symvers': No such file or directory


    Im versteckten Ordner .rpi-firmware ist auch kein /extra vorhanden....

    Gruß
    Pf@nne

    Einmal editiert, zuletzt von Pfanne (19. April 2014 um 21:25)

  • Hmm - komisch. :s

    Aber seis drum: ich hab' hier noch was entdeckt ... mal gucken ob das geht :) ...

    wget https://github.com/raspberrypi/li…pi-3.6.y.tar.gz
    tar xvfz rpi-3.6.y.tar.gz
    su
    mv linux-rpi-3.6.y /usr/src
    ln -s /usr/src/linux-rpi-3.6.y /lib/modules/3.6.11+/build
    cd /lib/modules/3.6.11+/build
    make mrproper
    gzip -dc /proc/config.gz > .config
    make modules_prepare
    wget https://github.com/raspberrypi/fi…/Module.symvers

    und dann soll man noch ein makefile mit folgendem Inhalt anlegen:

    Code
    obj-m := kcrDriver.o
        all:
        $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
        clean:
        $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

    Aber das muss ich mir erst mal in Ruhe zu Gemüte führen ;) ....

    Diese Anleitung findest Du übrigens -> hier <-

    cu,
    -ds-

  • Yow ... das schaut schon viel besser aus ;) ...

    ACHTUNG!
    ich habe das jetzt hier erst korrigiert. Das muss natürlich 3.10.y bzw. 3.10.33+ heissen, nicht 3.6.y

    Nun denn,
    -ds-

  • Hallöle,

    neee ... das ist nur mal ein build über die Module. Da ist noch nix Neues dabei.
    Pf@nne wollte das was mit dem RA8875 machen.

    Ach ja: vielleicht ist es sinnvoller statt:

    Code
    wget https://github.com/raspberrypi/linux/arc...6.y.tar.gz
    tar xvfz rpi-3.10.y.tar.gz


    den Sourcetree wie bei notro mit

    Code
    git clone --depth 1 git://github.com/raspberrypi/linux.git


    zu nehmen. Wär mal was zum Merken wenns Probleme gibt

    ACHTUNG!
    ich habe das im vorigen post auch korrigiert. Das muss natürlich 3.10.y bzw. 3.10.33+ heissen, nicht 3.6.y


    cu,
    -ds-

  • Moin,

    ich hab jetzt mal versuch das nachzuvollziehen.....
    Alle Aktionen werden als root ausgeführt.....

    Code
    apt-get update
    apt-get -y install git libncurses5-dev

    Kernel- und fbtft-Source downloaden bzw. auschecken...

    Code
    cd
    mkdir tmp
    cd tmp
    wget https://github.com/raspberrypi/linux/archive/rpi-3.10.y.tar.gz
    tar xvfz rpi-3.10.y.tar.gz
    
    
    cd ~/tmp/linux-rpi-3.10.y/drivers/video
    git clone https://github.com/notro/fbtft.git

    Jetzt die ganze source nach /usr/src verschieben und in /lib/modules/3.10.34+/build (das ist die aktuelle Kernelversion) einen Link drauf setzen.....

    Code
    cd ~/tmp
    mv linux-rpi-3.10.y /usr/src
    ln -s /usr/src/linux-rpi-3.10.y /lib/modules/3.10.34+/build
    cd /lib/modules/3.10.34+/build

    Ggf. alte files löschen (groß reinemachen)

    Code
    make mrproper
    Code
    gzip -dc /proc/config.gz > .config
    make modules_prepare


    das läuft durch..... ich werde aber bei irgendeiner Audiofunktion gefragt was ich machen möchte....
    Ich hab mal ENTER gedrückt (default [NEW]??)

    Jetzt stecke ich hier....


    Dadurch wird das /extra wohl nicht erstellt.....
    folglich geht das hier auch nicht......

    Schönen sonnigen Ostersonntag (mit dicken Eiern) wünsche ich.....
    Gruß
    Pf@nne

    EDIT:
    Auch ein Update auf 3.10.37 hat nix gebracht....

    Code
    apt-get update
    apt-get upgrade
    rpi-update

    Einmal editiert, zuletzt von Pfanne (20. April 2014 um 11:38)

  • Hallöle Pfanne,

    auch noch schöne Ostern ... nachträglich ... hab' ein wenig relaxed ... muss auch sein ;) ...

    Also hier:


    das läuft durch..... ich werde aber bei irgendeiner Audiofunktion gefragt was ich machen möchte....
    Ich hab mal ENTER gedrückt (default [NEW]??)


    denke ich, ist default ok, wenn Du "m" für module eingibst, bist Du auf der sicheren Seite.


    Hier:


    GnuTLS: A TLS warning alert has been received.
    Unable to establish SSL connection.

    würde ich noch mal aufsetzen. Das sieht nach einem Verbundungsfehler aus. Die files solltest Du Dir schon holen ...

    Viel Erfolg,
    -ds-

  • wobei der verbindungsfehler nicht zwingent von ihm kommen muss.
    da tipper ich auf den git server

  • Da hast Du wohl recht, das wollte ich damit auch nicht sagen ;) ...

    Aaaber, mir kam da grad eine Idee ... ich häng das File einfach als Attachment hier an. Die Datei dann einfach nach /lib/modules/3.10.33+/build kopieren und bingo ...

    cu,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!