Hallo, ich arbeite hier auf dem Zynq und habe folgenden Linux-Kernel
(kommt wenn ich uname -r) eingebe.
4.6.0-xilinx-00040-g7862283-dirty
Ich möchte ein char-device kompilieren.
Natürlich habe ich gemerkt, dass die Verlinkung
/lib/modules/4.6.0-xilinx-00040-g7862283-dirty/build fehlt.
Auch unter /usr/src ist leere.
Der Befehl sudo apt-get install linux-headers-`uname -r` funktioniert
auch nicht.
jetzt muss ich mir manuell die Header beschaffen.
Ist es möglich, dass ich mir grad von Git nochmal alles hole und in
diesen Ordner dann die Verlinkung mache?
https://github.com/Xilinx/linux-xlnx
Ist es wichtig, dass die Inhalte unter /usr/src liegen?
Danke
Markus schrieb:> Clemens L. schrieb:>> Was ist denn der Name des Pakets, in dem der Kernel selbst ist?>> Wie finde ich das raus, wenn ich mal so doof fragen darf?
Der Kernel liegt einfach als Binärfile auf der SD-Karte in einer extra
FAT-Partition, der wird von U-Boot in den Ram geladen.
Als rootfs habe ich mir einfach ein armhf-ubuntu minimal rootfs irgendwo
runtergeladen, das kommt nicht von xilinx.
Clemens L. schrieb:> Markus schrieb:>> Der Kernel liegt einfach als Binärfile auf der SD-Karte in einer extra>> FAT-Partition>> Und wo hast du diesen Kernel her?
Den habe ich selber cross-(kompiliert) aus dem Xilinx-Linux Repo.
Markus schrieb:> Den habe ich selber cross-(kompiliert) aus dem Xilinx-Linux Repo.
Den Kernel baust du mit "make bzImage".
Die Module bekommst du mit "make modules modules_install".
Die Header bekommst du mit "make headers_install".
Beachte die Pfade, wo das hin installiert wird. Ich habe gerade keinen
Baum da, schau ins Makefile vom Kernel.
S. R. schrieb:> Beachte die Pfade, wo das hin installiert wird. Ich habe gerade keinen> Baum da, schau ins Makefile vom Kernel.
Das verrät "make help".
Mw E. schrieb:> Oder wenn er nen Kernelmodul/Treiber Für seine FPGA Hardware am> AXI Bus schreiben will ;)
BTDT: Das UIO-Framework macht das relativ einfach, wenn man es nutzen
will.
Mw E. schrieb:> Oder wenn er nen Kernelmodul/Treiber Für seine FPGA Hardware am> AXI Bus> schreiben will ;)
Genau das habe ich vor, aber mein VHDL-AXILite Modul funktioniert sogar
schon ;-)
Wenn ich direkt auf die Register via /dev/mem und mmap zugreife
funktioniert das.
Muss jetzt nur einen character-device dafür schreiben damit es einfacher
nutzbar ist.
Schau dir mal das UIO Framwork an (muss natürlich in deinem Kernel
aktiviert sein)
Da wirfst du eine Beschreibung "welchen Adressraum, wie viel, welchen
Interrupt" in den Device-Tree und bekommst ein /dev/uio0, mit dem du
ohne jede Kernelprogrammierung folgendes machen kannst:
- lesen (blockiert bis zum nächsten Interrupt)
- schreiben (aktiviert Interrupts)
- mmap (mappt den angegebenen Adressraum)
Das reicht für die meisten, eher einfachen FPGA-Module vollkommen aus,
ersparst dir einen eigenen Kerneltreiber und ist deutlich sicherer als
ein Zugriff über /dev/mem.
S. R. schrieb:> Schau dir mal das UIO Framwork an (muss natürlich in deinem Kernel> aktiviert sein)>> Da wirfst du eine Beschreibung "welchen Adressraum, wie viel, welchen> Interrupt" in den Device-Tree und bekommst ein /dev/uio0, mit dem du> ohne jede Kernelprogrammierung folgendes machen kannst:> - lesen (blockiert bis zum nächsten Interrupt)> - schreiben (aktiviert Interrupts)> - mmap (mappt den angegebenen Adressraum)>> Das reicht für die meisten, eher einfachen FPGA-Module vollkommen aus,> ersparst dir einen eigenen Kerneltreiber und ist deutlich sicherer als> ein Zugriff über /dev/mem.
Danke für den Tipp, ich werds mir mal anschauen ;-)
Aber mal so eine grundsätzliche Frage:
Wenn ihr Hardwaremodule für AXI entwerft, schreibt ihr quasi direkt die
Module mit der entsprechenden Funktion (z.B. PWM) die dann auch direkt
ein AXI Interface haben?
Bei uns wurde es so festgelegt, dass wir getrennte AXI-Lite Module nur
für schreiben und nur für lesen haben die zur weiteren Hardware über ein
FIFO-Interface entkoppelt ist, sodass man sich bei jeder weiteren
Entwicklung nicht immer mit der AXI-Kommunikation rumschlagen muss.
Ich habe mir ein AXI-Lite-Interface mit Timeout in VHDL selbst
geklöppelt, welches hinten einen simplen parallelen Bus ansteuert. Das
hat aber keine besonderen Grund, außer dass ich Anfänger bin.
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.