Forum: Mikrocontroller und Digitale Elektronik Linux-Headers - Woher bekommen? Xilinx Zynq


von Markus (Gast)


Lesenswert?

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

von Clemens L. (c_l)


Lesenswert?

Was ist denn der Name des Pakets, in dem der Kernel selbst ist?

von Markus (Gast)


Lesenswert?

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?

von Markus (Gast)


Lesenswert?

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.

von Clemens L. (c_l)


Lesenswert?

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?

von Markus (Gast)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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.

von Clemens L. (c_l)


Lesenswert?

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".

von Markus (Gast)


Lesenswert?

Vielen Dank Leute, das mit make headers_install hat funktioniert.

Wieder was gelernt auf dem steinigen Weg zu einem 
embedded-linux-Menschen ;-)

von Chris (Gast)


Lesenswert?

Dann warte mal ab bis die Flesbrocken kommen :-D

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Oder wenn er nen Kernelmodul/Treiber Für seine FPGA Hardware am AXI Bus 
schreiben will ;)

von S. R. (svenska)


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

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 ;-)

von Markus (Gast)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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.

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.