0

Ich möchte die Quelldateien von einigen der Gerätetreiber, die installiert und auf einem Raspberry Pi (Raspian), Beaglebone (Debian) oder einem Laptop (Ubuntu) geladen werden.Study Gerätetreiber Quelldateien?

Mein Ziel ist es, zu lernen, wie ich meine eigenen Module richtig implementieren kann, indem ich die Quelldateien einiger tatsächlich funktionierender Treiber lese.

Ich interessiere mich besonders für Treiber, die mit der tatsächlichen Hardware (USB, I2C, SPI, UART usw.) kommuniziert.

Kann mir jemand sagen, wie man diese Quellen findet? Sind sie in einem bestimmten Ordner verfügbar, wie zum Beispiel/usr/src/**** oder muss ich alle Kernel-Quelldateien von einer bestimmten Kernel-Version herunterladen?

Alle Ratschläge, Meinungen und Empfehlungen werden am meisten geschätzt.

ps Ich habe gelesen "Linux Kernel Development 3rd Edition", aber bitte sagen Sie mir, wenn Sie andere freie/Open-Source-Bücher zu diesem Thema kennen.

Mit freundlichen Grüßen Henrik

Antwort

5

Linux Quellverzeichnis und Beschreibung:

  • arch/- Der Bogen Unterverzeichnis enthält alle die Architektur spezifischen Kernel-Code.

    Example : 
    1. 'arch/arm/' will have your board related configuration file. 
        like 'arch/arm/mach-omap/' will have omap specific source code. 
    2. 'arch/arm/config' Generates a new kernel configuration with the 
        default answer being used for all options. The default values 
        are taken from a file located in the arch/$ARCH/defconfig 
        file,where $ARCH refers to the specific architecture for which 
        the kernel is being built. 
    3. arch/arm/boot have kernel zImage, dtb image after compilation. 
    
  • Block/- Dieser Ordner enthält Code für Block-Gerätetreiber. Block-Geräte sind Geräte, die Daten in Blöcken akzeptieren und senden. Datenblöcke sind Datenblöcke anstelle eines kontinuierlichen Datenstroms.

  • krypto/- Dieser Ordner enthält den Quellcode für viele Verschlüsselungsalgorithmen.

    example, “sha1_generic.c” is the file that contains the code for 
          the sha1 encryption algorithm. 
    
  • Dokumentation/- Es Kernel bezogenen Informationen im Textformat hat.

  • Treiber/- In diesem Verzeichnis befinden sich alle Gerätetreiber des Systems. Sie sind weiter in Klassen von Gerätetreibern unterteilt.

    Example, 
    1. drivers/video/backlight/ has blacklight driver source which 
        will control display brightness. 
    2. drivers/video/display/ has display driver source. 
    3. drivers/input/ has input driver source code. like touch, 
        keyboard and mouse driver. 
    4. drivers/char/ has charter driver source code. 
    5. drivers/i2c/ has i2c subsystem and driver source code. 
    6. drivers/pci/ has pci subsytem and driver related source code. 
    7. drivers/bluetooth has Bluetooth driver file. 
    8. drivers/power has power and battery driver. 
    
  • Firmware/- Die Firmware-Ordner enthält Code, der Computer-Signale von Geräten zu lesen und zu verstehen, ermöglicht. Zur Veranschaulichung verwaltet eine Webcam ihre eigene Hardware, aber der Computer muss die Signale verstehen, die die Webcam an den Computer sendet.

  • fs/- Der gesamte Dateisystemcode. Dies ist weiter unterteilt in Verzeichnisse, eines pro unterstütztem Dateisystem, zum Beispiel vfat und ext2.

  • Kernel/- Der Code in diesem Ordner steuert den Kernel selbst. Wenn beispielsweise ein Debugger ein Problem verfolgen muss, verwendet der Kernel Code, der aus Quelldateien in diesem Ordner stammt, um den Debugger über alle vom Kernel ausgeführten Aktionen zu informieren. Hier gibt es auch einen Code, um die Zeit zu verfolgen. Im Kernel-Ordner befindet sich ein Verzeichnis namens "power". Einige Codes in diesem Ordner bieten die Möglichkeiten, dass der Computer neu gestartet, ausgeschaltet und angehalten wird.

  • net/- net Die Netzwerk-Code des Kernels. lib Dieses Verzeichnis enthält den Bibliothekscode des Kernels. Der architekturspezifische Bibliothekscode kann in arch/*/lib/gefunden werden. Skripte Dieses Verzeichnis enthält die Skripte (zum Beispiel awk und tk scripts), die verwendet werden, wenn der Kernel konfiguriert ist.

  • lib/- Dieses Verzeichnis enthält den Bibliothekscode des Kernels. Der architekturspezifische Bibliothekscode kann in arch/*/lib/gefunden werden.

  • Skripte/- Dieses Verzeichnis enthält die Skripte (zB awk und tk Skripte), die verwendet werden, wenn der Kern konfiguriert ist.

  • mm/- Dieses Verzeichnis enthält den gesamten Speicherverwaltungscode. Der architekturspezifische Speicherverwaltungscode lebt in arch/*/mm /, zum Beispiel arch/i386/mm/fault.c.

  • ipc/- Dieses Verzeichnis enthält den Interprozesskommunikationscode des Kernels.

  • ** init/- ** Der init-Ordner enthält einen Code, der sich mit dem Start des Kernels beschäftigt (INITiation). Die Datei main.c ist der Kern des Kernels. Dies ist die Hauptquellcodedatei, die alle anderen Dateien verbindet.

  • Sound/- Hier befinden sich alle Soundkartentreiber.

Es gibt einige Verzeichnis Zert, Krypto, Sicherheit, umfassen, virt und usr etc ....

0

Es macht nichts, fand ich die Quelldateien unter

~/linux/drivers/ 

Beispiel:

nano ~/linux/drivers/spi/spi-bitbang.c 

Sorry, für die Unannehmlichkeiten!

2

Es gibt ein paar verschiedene Methoden, die ich zum Anzeigen von kernelbezogenen Quellen verwende, und ich bin mir sicher, dass es auch ein paar andere gute Methoden gibt. Sie werden feststellen, dass die Methoden weitgehend identisch sind.

  1. Kopf auf mehr als auf kernel.org und den Kernel Ihrer Wahl herunterladen. Sie finden die treiberbezogene Quelle unter /<path to your downloaded kernel>/drivers. Zum Beispiel habe ich Kernel 4.5.5 heruntergeladen und extrahiert auf /usr/src/linux-4.5.5, und auf die Quelle für meine Treiber über /usr/src/linux-4.5.5/drivers zugreifen.

  2. Verwenden Sie eine Linux-Querverweis-Website. Persönlich nutze ich den auf free-electrons gehosteten. Diese Websites sind schön für ihre Freitext- oder Identifizierer-Suche.

  3. Durchsuchen Linus Torvalds linux repo auf github gehostet.