我开发了一个Linux设备驱动程序。截至目前,我正在Ubuntu 12.04上使用交叉编译器为arm编译它,然后在我的arm Linux映像中进行修改。但我想学习如何在Linux源代码中添加它,并通过配置arm Linux来添加/删除,以便我可以用Linux源代码编译来编译它?
有什么想法吗?
答案 0 :(得分:40)
要在arm架构中交叉编译自己的驱动程序,您必须按照下面的步骤进行操作。
在驱动程序的驱动程序(在Linux源代码中)中创建类似my_drvr的目录,并将驱动程序(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
在您的驱动程序目录中创建一个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.
保存此文件,会显示为/linux_source_code/drivers/my_drvr/Kconfig
将Makefile
和Kconfig
文件添加到位于Makefile
的Linux源驱动程序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
文件添加到特定于体系结构的配置文件中,该文件位于kernel_source/arch/arm/configs/--defconfig
的最后一行
CONFIG_MY_DRIVER=y
注意: - 最后一步因您的架构而异,因此您需要注意。 现在,您可以使用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之后和配置/编译之前,创建补丁并添加此补丁的应用。