Linux静态驱动程序加载问题

时间:2012-07-06 06:07:56

标签: linux

驱动程序的静态加载存在一些问题,导致混乱。 为了静态加载驱动程序,我遵循了两个方法:进程1)和进程2)。 早些时候我跟着说:

流程1: 步骤是:

  1. 我构建了名为demochardrv.ko的char驱动程序。
  2. 我在/lib/modules/2.6.34.12/kernel/drivers/char /.
  3. 中复制了驱动程序
  4. 我在/ etc / modules中输入了它。
  5. 重新启动。
  6. 但是这4个步骤没有提前工作,我没有在lsmod中看到我的驱动程序。

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

    1. 我在文件“/lib/modules/2.6.34.12/build/drivers/char/Kconfig”中添加了驱动程序详细信息: 配置DEMOCHARDRV 三态“TEST DEMO DRIVER” 默认的 救命 测试静态安装驱动程序

    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. 中复制驱动程序文件
    5. 编辑.config文件并添加了CONFIG_DEMOCHARDRV = y。
    6. 启动make menuconfig并选择(使用* / M)我的驱动程序。
    7. 制作,制作模块,制作modules_install并进行安装。
    8. 重新启动
    9. 现在驱动程序正在启动时加载,即使我没有在menuconfig中选择它。

      要解决进程2中的问题,我删除了/ etc / modules中的条目。但现在司机根本没有加载。 所以我删除了Process 2步骤并再次遵循Process 1步骤,驱动程序现在正在启动时加载。 现在流程1正在运行。 但是,流程2不是单独工作,而是需要流程1的其他步骤。

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

1 个答案:

答案 0 :(得分:1)

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

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