我开发了一个Linux设备驱动程序。截至目前,我正在使用交叉编译器为arm编译Ubuntu 12.04,然后在我的arm Linux映像中进行insmoding。但我想学习如何将它添加到Linux源代码中,并通过配置arm Linux来添加/删除选项,以便我可以使用Linux源代码编译进行编译?将新驱动程序代码添加到linux源代码
任何想法?
我开发了一个Linux设备驱动程序。截至目前,我正在使用交叉编译器为arm编译Ubuntu 12.04,然后在我的arm Linux映像中进行insmoding。但我想学习如何将它添加到Linux源代码中,并通过配置arm Linux来添加/删除选项,以便我可以使用Linux源代码编译进行编译?将新驱动程序代码添加到linux源代码
任何想法?
在解压缩内核tarball之后,配置/编译之前,创建补丁并添加应用此补丁作为步骤。
您需要在将放置设备驱动程序的内核源子目录的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中放置的配置选项,你可以选择它编译进内核或者作为模块构建或者根本不编译。
在您的驱动程序的子系统目录中查找示例。
要在arm架构中交叉编译自己的驱动程序,您必须按照下面所述的一些步骤进行操作。
为您的驱动器一样my_drvr内部驱动程序的目录(这是在Linux的源代码),并把你的驱动程序(my_driver.c)这个目录中的文件。它会看起来像 /linux_source_code/drivers/my_drvr/my_driver.c
创建驱动程序目录里一个Makefile文件(用vi编辑任何),并在这里面把obj-$(CONFIG_MY_DRIVER) += my_driver.o
并保存此文件。这就会出现像/linux_source_code/drivers/my_drvr/Makefile
创建驱动程序目录(使用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.
保存此文件,这就会出现像/linux_source_code/drivers/my_drvr/Kconfig
在Linux源驱动程序Makefile
和Kconfig
文件中添加Makefile
和Kconfig
文件,这些文件位于/linux_source_code/drivers/Makefile
和/linux_source_code/drivers/Kconfig
在Makefile中下方添加在最后一行
obj-y += my_drvr/
或
obj-$(CONFIG_MY_DRIVER) += my_drvr/
在的Kconfig文件中最后一行下面添加
source "drivers/my_drvr/Kconfig"
最后不得不增加将Kconfig
文件转换为体系结构s这将是在kernel_source/arch/arm/configs/--defconfig
在这个pecific配置文件中添加下面一行在过去
CONFIG_MY_DRIVER=y
注: - 最后一步将根据你的架构不同,因此,你必须要小心。 现在您可以使用make命令编译驱动程序。 (eg:sun7i_defconfig)
优秀。准确和简洁。谢谢。 – 2015-07-19 12:19:44
感谢您的回复。我想出了它,并做了与你所提到的相同的事情。但现在有一个新问题。当我将驱动程序代码编译为模块并在linux内核中执行insmod时,我可以看到我的设备在/ dev /下创建。但是当我将代码放入内核树并编译内核时,我无法在/ dev下看到我的设备。请注意,我使用class_create()和device_create()来创建设备节点。同样,我也按照上面所述的方式将我的代码添加到内核树中。 – Ravi 2012-07-31 08:29:07
您是否已经设置了内置驱动程序?即突出显示驱动程序并按下'Y',以便前缀为星号,如下所示:[*] – microMolvi 2013-07-20 19:10:27