【问题标题】:can we install kernel module with make file我们可以用make文件安装内核模块吗
【发布时间】:2016-02-01 20:38:43
【问题描述】:

我有工作内核模块,我使用 insmod/modprobe 命令手动安装,正如通过阅读本书了解到的那样。但是我想知道是否有办法在编译后自动执行 - 那么基本上如何自动化 insmod/modprobe 命令?

我的 modprobe 也有一个依赖文件 thread_module.o

到目前为止我的制作文件

obj-m := wakeup_counter.o
obj-m += thread_module.o
$INSTALL_MOD_PATH = /lib/modules/2.6.32-5-amd64/

all:
    make -C /lib/modules/2.6.32-5-amd64/build M=$(PWD) modules

install:
    make $(INSTALL_MOD_PATH) =/build modules_install
clean:
    make -C /lib/modules/2.6.32-5-amd64/build M=$(PWD) modules

运行后输出:make install

root@xyz:/home/xyz/Desktop/Drivers/symbols# make install
make -C /lib/modules/2.6.32-5-amd64/build M=/home/xyz/Desktop/Drivers/symbols modules_install
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-5-amd64'
  INSTALL /home/xyz/Desktop/Drivers/symbols/thread_module.ko
  INSTALL /home/xyz/Desktop/Drivers/symbols/wakeup_counter.ko
  DEPMOD  2.6.32-5-amd64
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-5-amd64'

编辑:在通过 cmets 和 https://www.kernel.org/doc/Documentation/kbuild/modules.txt 之后,我尝试添加安装命令,但在构建路径中没有看到任何模块 - 同样在高级别上,我得到了我们在 cmd 提示符下输入的内容,我们在 Makefile 中输入,但如果有人可以举一个例子,它可以帮助我理解很好的基本案例来参考。

【问题讨论】:

  • 安装软件通常由make install命令执行。只需在您的 makefile 中创建“安装”目标并将所有需要的操作放在其配方中。
  • 是的,然后打电话给make … modules_install
  • 任何可以在命令外壳中运行的命令,都可以将该操作添加为 makefile 中目标的规则。
  • @Tsyvarev : 我试过了,但似乎我做错了——我已经用相关信息更新了帖子
  • @AndyShevchenko - 我试过你能看到我做错了什么

标签: makefile kernel linux-device-driver kernel-module insmod


【解决方案1】:
obj-m := wakeup_counter.o
obj-m += thread_module.o

KDIR = /lib/modules/2.6.32-5-amd64/build

all:
    make -C $(KDIR) M=$(PWD) modules_install

clean:
    make -C $(KDIR) M=$(PWD) clean

在 Makefile 中用作规则的命令 shell 指令示例:

install:
    modprobe wakeup_counter
    modprobe thread_module

【讨论】:

  • 感谢您的回答-我需要进行一些小的更改而不是 modules_install-我不得不将其更改为模块 ..但是根据您的步骤指出我对事情的理解更好..非常感谢为答案
【解决方案2】:

增强 @cm161 为未来用户发布的答案,以突出显示对我有用的确切步骤

使用下面的 Makefile 使用以下步骤

第 1 步:make(只需键入 make 命令)- 用于创建模块,即 .ko 文件和相关文件

第二步:安装

第 3 步:现在执行 lsmod,您应该能够看到新模块

obj-m := wakeup_counter.o
obj-m += thread_module.o

KDIR = /lib/modules/2.6.32-5-amd64/build

all:
    make -C $(KDIR) M=$(PWD) modules
    cp wakeup_counter.ko /lib/modules/2.6.32-5-amd64/
    cp thread_module.ko /lib/modules/2.6.32-5-amd64/

install:
    modprobe wakeup_counter
    modprobe thread_module

clean:
    make -C $(KDIR) M=$(PWD) clean

【讨论】:

  • 您可以通过为 'all' 目标添加 'cp' 规则,通过 makefile 自动复制 .ko 文件,如下所示: all:make ....cp wakeup_counter.ko $(DEST_DIR)/.cp thread_module.ko $(DEST_DIR)/.其中 DEST_DIR = /lib/modules/2.6.32-5-amd64
猜你喜欢
  • 2023-03-06
  • 2021-03-31
  • 1970-01-01
  • 2017-09-05
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
相关资源
最近更新 更多