在linux源代码中添加新的驱动程序代码

时间:2012-07-29 14:30:13

标签: linux-kernel linux-device-driver

我开发了一个Linux设备驱动程序。截至目前,我正在Ubuntu 12.04上使用交叉编译器为arm编译它,然后在我的arm Linux映像中进行修改。但我想学习如何在Linux源代码中添加它,并通过配置arm Linux来添加/删除,以便我可以用Linux源代码编译来编译它?

有什么想法吗?

3 个答案:

答案 0 :(得分:40)

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

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

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

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

    config MY_DRIVER
    tristate "my driver" //gives your driver description like vendor name etc.
    depends on ARM
    default y if ARM
    help
      my driver module.
  4. 保存此文件,会显示为/linux_source_code/drivers/my_drvr/Kconfig

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

  6. 在Makefile中添加下一行

     obj-y    += my_drvr/ 

     obj-$(CONFIG_MY_DRIVER)   += my_drvr/
  7. 在Kconfig文件中,在最后一行添加以下内容

    source "drivers/my_drvr/Kconfig"
  8. 最后必须将Kconfig文件添加到特定于体系结构的配置文件中,该文件位于kernel_source/arch/arm/configs/--defconfig的最后一行

    CONFIG_MY_DRIVER=y
  9. 注意: - 最后一步因您的架构而异,因此您需要注意。 现在,您可以使用make命令编译驱动程序。 (例如:sun7i_defconfig)

答案 1 :(得分:6)

您需要在将放置设备驱动程序的内核源子目录的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中的config选项,您可以选择将其编译到内核中或构建为模块或不编译一点都不。

查看驱动程序所针对的子系统目录中的示例。

答案 2 :(得分:3)

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