0

我想研究在樹莓派(raspian),beaglebone(debian)或我的筆記本電腦(ubuntu)上安裝並加載的一些設備驅動程序的源文件。學習設備驅動程序源文件?

我的目標是學習如何正確實現我自己的模塊,通過研究一些實際工作的驅動程序的源文件。我對與實際硬件(USB,I2C,SPI,UART等)通信的驅動程序特別感興趣。

有人能告訴我如何找到這些來源?它們是否可用於某些特定的文件夾,即/ usr/src/****,還是必須從特定內核版本下載所有內核源文件?

所有的意見,意見和建議,非常感謝。

p.s我已閱讀「Linux Kernel Development 3rd edition」,但請告訴我,如果您知道其他有關此主題的免費/開放源代碼書籍,請致電 。

問候 亨裏克

回答

5

Linux源代碼目錄和說明:

  • 弓/ - 拱子目錄包含所有架構的核心代碼的。

    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. 
    
  • 塊/ - 此文件夾包含用於塊的設備驅動程序的代碼。塊設備是以塊爲單位接收和發送數據的設備。數據塊是數據塊,而不是連續的數據流。

  • 加密/ - 此文件夾包含許多加密算法的源代碼。

    example, 「sha1_generic.c」 is the file that contains the code for 
          the sha1 encryption algorithm. 
    
  • 文檔/ - 它在文本格式內核相關的信息。

  • 驅動程序/ -所有系統的設備驅動程序都位於此目錄中。它們被進一步細分爲設備驅動程序的類別。

    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. 
    
  • 固件/ - 固件文件夾中包含代碼,使所述計算機讀出和從設備理解的信號。爲了說明,攝像頭管理自己的硬件,但計算機必須瞭解攝像頭髮送計算機的信號。

  • fs/- 所有的文件系統代碼。這進一步細分爲目錄,每個支持的文件系統一個,例如vfat和ext2。

  • kernel/- 此文件夾中的代碼控制內核本身。例如,如果調試器需要跟蹤問題,內核將使用源自該文件夾中源文件的代碼來通知調試器內核執行的所有操作。此處還有代碼用於跟蹤時間。在內核文件夾中有一個名爲「power」的目錄。此文件夾中的一些代碼提供了計算機重新啓動,關閉電源和暫停的功能。

  • 網/ - 網 內核的網絡代碼。 lib 該目錄包含內核的庫代碼。體系結構特定的庫代碼可以在arch/*/lib /中找到。 腳本 該目錄包含配置內核時使用的腳本(例如awk和tk腳本)。

  • lib/- 此目錄包含內核的庫代碼。體系結構特定的庫代碼可以在arch/*/lib /中找到。

  • 腳本/ - 該目錄包含的腳本(例如AWK和tk腳本)內核被配置爲當被使用。

  • mm/- 該目錄包含所有的存儲器管理代碼。體系結構特定的內存管理代碼位於arch/*/mm /中,例如arch/i386/mm/fault.c。

  • ipc/- 該目錄包含內核進程間通信代碼。

  • ** init/- ** init文件夾有處理內核啓動(INITiation)的代碼。 main.c文件是內核的核心。這是連接所有其他文件的主要源代碼文件。

  • sound/-這是所有聲卡驅動程序所在的地方。

有幾個目錄證書,加密,安全性,包括程序,virt和USR等....

0

沒關係,我發現

下的源文件
~/linux/drivers/ 

例如:

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

對不起,任何不便之處!

2

我使用幾種不同的方法查看內核相關的源代碼,並且我確信還有其他一些好的方法。你會發現這些方法在很大程度上是相同的。

  1. 轉到kernel.org並下載您選擇的內核。您可以在/<path to your downloaded kernel>/drivers下找到與驅動相關的源碼。例如,我已經下載並提取內核4.5.5到/usr/src/linux-4.5.5,並通過/usr/src/linux-4.5.5/drivers訪問我的驅動程序的源代碼。

  2. 使用linux交叉引用網站。我個人使用free-electrons上託管的那個。這些網站很適合他們的自由文本或標識符搜索。

  3. 瀏覽github上託管的Linus Torvalds'linux repo

相關問題