【问题标题】:driver not working when built as built in driver内置驱动程序时驱动程序不工作
【发布时间】:2014-10-01 13:01:02
【问题描述】:

我为 beagle-bone 编写了一个基本的字符驱动程序,它通过一个工作队列和一个使用 printk 的 tasklet 在 1 秒的间隔内打印两条消息。

首先我将它构建为模块驱动程序,生成 .ko 文件,使用 insmod 命令加载它,当通过 dmesg 查看时打印出来了。

然后我构建为内置驱动程序并加载 uImage,启动后我检查了 dmesg 打印。但是没有指纹。

在.config文件中

 CONFIG_MY_DRIVER=y

所以我认为它是内置驱动程序。

我如何确认它是否真的内置在最终图像中。构建时未报告错误。

是否需要执行任何其他步骤来加载内置驱动程序。

如果我在任何基础上出错了,请原谅我。我真的是 linux 新手。

【问题讨论】:

  • 如果您确定驱动程序已编译并链接到内核,请参阅this answer,了解如何使用“initcall_debug”检查驱动程序的 init 例程是否被调用。

标签: linux linux-device-driver


【解决方案1】:

这意味着您可能将它添加到 Kconfig 文件的某个位置: "CONFIG_MY_DRIVER=y"

但是,您是否已将其添加到 Makefile 中?它的工作原理是这样的,然后内核在构建映像期间,获取所有这些指令“CONFIG_*”并使用它从 Makefile 构建特定的源文件。

例子:

cat fs/ext2/Makefile
ext2-$(CONFIG_EXT2_FS_SECURITY)  += xattr_security.o

cat fs/ext2/Kconfig
config EXT2_FS_SECURITY
    bool "Ext2 Security Labels"
    depends on EXT2_FS_XATTR

所以在上面的示例中,如果您的源文件是 xattr_security.c,那么您应该在构建时在 fs/ext2 目录中获取 xattr_security.o 文件。如果您的文件是在编译过程中构建的,您也应该看到它。

【讨论】:

  • 我在make文件中也做了那个修改......但它仍然无法正常工作......
  • 你能告诉我你所有的配置吗?也许您不只是将它包含在其他 Makefile 中。 .o 文件创建了吗?
  • 感谢您的帮助。我刚刚在 init 函数中放置了一个内核打印,并且该打印即将到来,这表明设备正在注册。我将通过一些内核打印检查更多内容,并会尽快更新
猜你喜欢
  • 2016-07-25
  • 2012-04-12
  • 2014-03-07
  • 1970-01-01
  • 2016-03-13
  • 2021-11-04
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多