【问题标题】:Adding new driver code to linux source code将新的驱动程序代码添加到 linux 源代码
【发布时间】:2012-07-29 14:30:12
【问题描述】:

我开发了一个 Linux 设备驱动程序。到目前为止,我正在使用 arm 的交叉编译器在 Ubuntu 12.04 上编译它,然后将它安装到我的 arm Linux 映像中。但是我想学习如何在Linux源代码中添加它,并通过arm Linux的配置给出添加/删除的选项,以便我可以用Linux源代码编译来编译它?

有什么想法吗?

【问题讨论】:

    标签: linux-kernel linux-device-driver


    【解决方案1】:

    要在 arm 架构中交叉编译您自己的驱动程序,您必须按照下面提到的一些步骤进行操作。

    1. 在驱动程序(位于 Linux 源代码中)中为您的驱动程序创建一个类似 my_drvr 的目录,并将您的驱动程序 (my_driver.c) 文件放入该目录中。它看起来像 /linux_source_code/drivers/my_drvr/my_driver.c

    2. 在您的驱动程序目录(使用 vi 任何编辑器)中创建一个 Makefile,并在其中放置 obj-$(CONFIG_MY_DRIVER) += my_driver.o 并保存此文件。这将显示为/linux_source_code/drivers/my_drvr/Makefile

    3. 在您的驱动程序目录中创建一个Kconfig 文件(使用vi 任何编辑器)并在此放置中

      配置 MY_DRIVER
      tristate“我的驱动程序”//提供您的驱动程序描述,如供应商名称等。
      依赖于 ARM
      默认 y 如果 ARM
      帮助
        我的驱动模块。
    4. 保存这个文件,它看起来像/linux_source_code/drivers/my_drvr/Kconfig

    5. 在位于/linux_source_code/drivers/Makefile的Linux源驱动程序Makefile和Kconfig文件中添加Makefile和Kconfig文件 和/linux_source_code/drivers/Kconfig

    6. 在 Makefile 的最后一行添加下面

       obj-y += my_drvr/ 

      或

       obj-$(CONFIG_MY_DRIVER) += my_drvr/
    7. 在Kconfig文件的最后一行添加下面

      来源“驱动程序/my_drvr/Kconfig”
    8. 最后必须将Kconfig 文件添加到特定于架构的配置文件中,该文件将在kernel_source/arch/arm/configs/--defconfig 中添加到最后一行

      CONFIG_MY_DRIVER=y

    注意:- 最后一步将根据您的架构而有所不同,因此请注意。 现在您可以使用 make 命令编译您的驱动程序。 (例如:sun7i_defconfig)

    【讨论】:

      【解决方案2】:

      您需要在内核源代码子目录的 Kconfig 文件中添加一个配置选项,将在其中放置您的设备驱动程序。您还需要在该目录的 Makefile 中添加行。显然,您也需要将源文件复制到该目录。

      由于您的驱动程序依赖于 ARM 架构,因此在 Kconfig 中,您需要放置一个“取决于”选项,例如:

      config SND_ARMAACI
      tristate "ARM PrimeCell PL041 AC Link support"
      depends on ARM_AMBA
      

      你的 Makefile 看起来像

      obj-$(CONFIG_SND_ARMAACI)   += snd-aaci.o
      snd-aaci-objs       := aaci.o
      

      所以现在当您在内核源代码树中执行 make menuconfig 时,您将找到您放入 Kconfig 的配置选项,您将能够选择将其编译到内核中或作为模块构建或不编译完全没有。

      在您的驱动程序适用的子系统目录中查找示例。

      【讨论】:

      • 感谢您的回复。我想通了,做了和你提到的一样的事情。但现在有一个新问题。当我将驱动程序代码编译为模块并在 linux 内核中执行 insmod 时,我可以看到我的设备在 /dev/ 下创建。但是当我将代码放入内核树并编译内核时,我在 /dev 下看不到我的设备。请注意,我使用 class_create() 和 device_create() 来创建设备节点。此外,我还以与上述相同的方式将代码添加到内核树中。
      • 您是否将驱动程序设置为内置。即突出显示驱动程序并按Y,使其以星号为前缀,如下所示:[*]
      【解决方案3】:

      在解压内核 tarball 之后和配置/编译之前创建补丁并添加应用此补丁。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-01
        • 1970-01-01
        • 2018-11-29
        • 2014-04-20
        • 1970-01-01
        • 2015-09-27
        • 2020-10-22
        • 2012-07-01
        相关资源
        最近更新 更多