【问题标题】:Linux Static Driver Loading IssueLinux 静态驱动程序加载问题
【发布时间】:2012-07-06 06:07:55
【问题描述】:

驱动程序的静态加载存在一些问题,导致混乱。 为了静态加载驱动程序,我遵循了两种方法 Process 1) 和 Process 2)。 之前我也关注过:

过程 1: 步骤是:

  1. 我构建了名为 demochardrv.ko 的 char 驱动程序。
  2. 我将驱动程序复制到 /lib/modules/2.6.34.12/kernel/drivers/char/ 中。
  3. 我在 /etc/modules 中做了一个条目。
  4. 重启。

但是这 4 个步骤之前没有工作,我没有在 lsmod 中看到我的驱动程序。

因此,除了上述步骤之外,我还采用了另一种方式: 过程2: 步骤如下:

  1. 我在文件“/lib/modules/2.6.34.12/build/drivers/char/Kconfig”中添加了驱动程序详细信息: 配置 DEMOCHARDRV 三态“测试演示驱动程序” 默认 n 帮助 测试静态安装驱动程序

  2. 我在“/lib/modules/2.6.34.12/build/drivers/char/Makefile”中添加了驱动程序详细信息: obj-$(CONFIG_DEMOCHARDRV) += demochardrv.o

  3. 复制了/lib/modules/2.6.34.12/build/drivers/char/中的驱动文件。

  4. 编辑了 .config 文件并添加了 CONFIG_DEMOCHARDRV=y。
  5. 触发 make menuconfig 并选择(使用 * / M)我的驱动程序。
  6. 制作、制作模块、制作 modules_install 和制作安装。
  7. 重启

即使我没有在 menuconfig 中选择它,驱动程序也会在启动时加载。

为了解决流程 2 中的问题,我删除了 /etc/modules 中的条目。但是现在驱动程序根本没有加载。 因此,我删除了 Process 2 步骤并再次遵循 Process 1 步骤,驱动程序现在正在启动时加载。 现在流程 1 正在工作。 但流程 2 并不能单独运行,它需要流程 1 的额外步骤。

所以我对哪个过程是正确的感到困惑。 任何人都可以提供一些输入吗?

【问题讨论】:

  • 我想在启动时静态加载驱动程序,所以我不能使用 insmod。

标签: linux


【解决方案1】:

当您“静态”加载 Linux 驱动程序时,您无法编译模块,您必须将其直接构建到内核二进制文件中。因此,您根本不应该将其视为模块,并将其配置为“*”(内置),或者根本不包含它。

根据kernel makefile doc,第二个过程应该是要走的路。但是,你应该放弃制作模块的想法,因为模块总是动态加载的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-18
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    相关资源
    最近更新 更多