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