21

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

有任何想法吗?

4

3 回答 3

47

要在 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 任何编辑器)并在此放置

    配置 MY_DRIVER
    tristate "my driver" // 提供您的驱动程序描述,如供应商名称等。
    依赖于 ARM
    默认 y 如果 ARM
    帮助
      我的驱动模块。
  4. 保存这个文件,这看起来像/linux_source_code/drivers/my_drvr/Kconfig

  5. 在 Linux 源驱动程序和文件中添加Makefile和文件,它们位于 和KconfigMakefileKconfig/linux_source_code/drivers/Makefile/linux_source_code/drivers/Kconfig

  6. 在 Makefile 的最后一行添加下面

    obj-y += my_drvr/

    或者

    obj-$(CONFIG_MY_DRIVER) += my_drvr/
  7. 在 Kconfig 文件的最后一行添加下面

    源“驱动程序/my_drvr/Kconfig”
  8. 最后必须将Kconfig文件添加到特定于体系结构的配置文件中,该文件将在kernel_source/arch/arm/configs/--defconfig最后一行的下面添加

    CONFIG_MY_DRIVER=y

注意:- 最后一步将根据您的架构而有所不同,因此请注意。现在您可以使用 make 命令编译您的驱动程序。(例如:sun7i_defconfig)

于 2013-10-30T11:07:13.270 回答
7

您需要在内核源子目录的 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 的配置选项,您将能够选择将其编译到内核中或构建为模块或根本不编译。

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

于 2012-07-30T17:35:41.257 回答
3

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

于 2012-07-29T14:32:00.707 回答