【问题标题】:Can't install some driver modules from C program无法从 C 程序安装某些驱动程序模块
【发布时间】:2015-11-05 07:43:39
【问题描述】:

我有一个嵌入式 Linux 应用程序,它可以从基于 C 的应用程序中找到并安装 一些驱动程序,但是它根本找不到其他驱动程序。

来自应用程序:

system("insmod i2c_core.ko");

调试错误信息:

insmod: i2c_core.ko: no module by that name found 

但是,使用 insmod 命令从命令行安装任何相同的驱动程序都没有问题。

这不是驱动程序序列依赖问题,因为错误消息与上述错误消息不同。

Linux 版本是 2.6.10(旧是的,但来自参考设计)

所有驱动程序都在此路径“/lib/modules”下,并且作为内核构建的一部分构建。

【问题讨论】:

  • 尝试使用绝对路径。另外,system?你真的需要运行一个shell吗?
  • 可以安装的驱动程序和您不能安装的驱动程序有什么区别?小路?权限?
  • 您的 /lib/modules/i2c_core.ko 实际上是指向丢失文件的符号链接吗?检查 $ ls -l /lib/modules
  • 是的,我可以尝试绝对路径,但我不喜欢硬编码路径。此外,它是一种解决方法。我真的很想知道为什么找到了一些驱动程序而没有找到其他驱动程序。
  • 权限相同。错误说找不到文件...没有说权限问题。

标签: c linux module embedded-linux drivers


【解决方案1】:

insmod 想要正确的路径(绝对或相对,insmod i2c_core.koinsmod ./i2c_core.ko 相同)。如果内核正确安装了模块,请尝试使用modprobe

system("modprobe i2c_core");

否则,你需要弄清楚如何找到模块文件的正确路径。

【讨论】:

  • 为什么它不需要安装其他驱动程序的路径?
  • Modprobe 不起作用。没有生成模块依赖文件。
  • 您在构建新模块后是否运行depmod -a?此外,请仔细检查当前工作目录(从命令行测试和尝试从应用程序加载时)。无论如何,至少我在 Ubuntu 上的 insmod 找不到没有路径的模块(并且 man insmod 没有谈论搜索路径)。
  • 是的,只是查看 depmod -a。
  • 抱歉,仔细检查到底是什么意思?仔细检查什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多