2012-07-29 132 views
16

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

任何想法?

回答

3

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

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中放置的配置选项,你可以选择它编译进内核或者作为模块构建或者根本不编译。

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

+0

感谢您的回复。我想出了它,并做了与你所提到的相同的事情。但现在有一个新问题。当我将驱动程序代码编译为模块并在linux内核中执行insmod时,我可以看到我的设备在/ dev /下创建。但是当我将代码放入内核树并编译内核时,我无法在/ dev下看到我的设备。请注意,我使用class_create()和device_create()来创建设备节点。同样,我也按照上面所述的方式将我的代码添加到内核树中。 – Ravi 2012-07-31 08:29:07

+0

您是否已经设置了内置驱动程序?即突出显示驱动程序并按下'Y',以便前缀为星号,如下所示:[*] – microMolvi 2013-07-20 19:10:27

35

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

  1. 为您的驱动器一样my_drvr内部驱动程序的目录(这是在Linux的源代码),并把你的驱动程序(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. 创建驱动程序目录(使用vi任何编辑器)内的一个Kconfig文件,这里面放

    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. 在Linux源驱动程序MakefileKconfig文件中添加MakefileKconfig文件,这些文件位于/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文件转换为体系结构s这将是在kernel_source/arch/arm/configs/--defconfig在这个pecific配置文件中添加下面一行在过去

    CONFIG_MY_DRIVER=y

注: - 最后一步将根据你的架构不同,因此,你必须要小心。 现在您可以使用make命令编译驱动程序。 (eg:sun7i_defconfig)

+1

优秀。准确和简洁。谢谢。 – 2015-07-19 12:19:44