我开发了一个 Linux 设备驱动程序。到目前为止,我正在使用 arm 的交叉编译器在 Ubuntu 12.04 上编译它,然后将它安装到我的 arm Linux 映像中。但是我想学习如何在Linux源代码中添加它,并通过arm Linux的配置给出添加/删除的选项,以便我可以用Linux源代码编译来编译它?
有任何想法吗?
我开发了一个 Linux 设备驱动程序。到目前为止,我正在使用 arm 的交叉编译器在 Ubuntu 12.04 上编译它,然后将它安装到我的 arm Linux 映像中。但是我想学习如何在Linux源代码中添加它,并通过arm Linux的配置给出添加/删除的选项,以便我可以用Linux源代码编译来编译它?
有任何想法吗?
要在 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 任何编辑器)并在此放置
配置 MY_DRIVER tristate "my driver" // 提供您的驱动程序描述,如供应商名称等。 依赖于 ARM 默认 y 如果 ARM 帮助 我的驱动模块。
保存这个文件,这看起来像/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 文件的最后一行添加下面
源“驱动程序/my_drvr/Kconfig”
最后必须将Kconfig
文件添加到特定于体系结构的配置文件中,该文件将在kernel_source/arch/arm/configs/--defconfig
最后一行的下面添加
CONFIG_MY_DRIVER=y
注意:- 最后一步将根据您的架构而有所不同,因此请注意。现在您可以使用 make 命令编译您的驱动程序。(例如:sun7i_defconfig)
您需要在内核源子目录的 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 的配置选项,您将能够选择将其编译到内核中或构建为模块或根本不编译。
在您的驱动程序适用的子系统目录中查找示例。
创建补丁并添加应用此补丁作为解压缩内核 tarball 之后和配置/编译之前的一个步骤。