Linux驱动make命令没有生成ko文件

本文记录了一位开发者在学习Linux驱动程序时遇到的问题,由于复制Makefile时的一个小错误(obj-m误写为bj-m),导致编译过程中ko文件未能生成。在发现并修正错误后,成功编译出ko内核模块。这个案例强调了代码细节的重要性以及在编程过程中仔细检查的必要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习驱动程序的过程中,做的最多的一件事情就是从文章中直接把代码copy回去,直接就Makefile了,但是也会遇到标题类似的问题:

curtis@curtis-virtual-machine:~/Desktop/test$ ls
Makefile  test.c
curtis@curtis-virtual-machine:~/Desktop/test$ vim Makefile 
curtis@curtis-virtual-machine:~/Desktop/test$ make
make -C /lib/modules/4.2.0-42-generic/build M=/home/curtis/Desktop/open_hook_demo modules
make[1]: Entering directory `/usr/src/linux-headers-4.2.0-42-generic'
  Building modules, stage 2.
  MODPOST 0 modules
make[1]: Leaving directory `/usr/src/linux-headers-4.2.0-42-generic'
curtis@curtis-virtual-machine:~/Desktop/test$ ls
Makefile  modules.order  Module.symvers  test.c
curtis@curtis-virtual-machine:~/Desktop/test$ 

从上面结果可以看到,虽然make没有报错,但是并没有生成ko文件,原因就在自己copy Makefile的时候出问题,从实体机copy到虚拟机的时候,少了一个字母!!!!

curtis@curtis-virtual-machine:~/Desktop/test$ cat Makefile 

bj-m :=test.o
KERNEL := /lib/modules/$(shell uname -r)/build
 
all:
	make -C $(KERNEL) M=$(shell pwd) modules
install:
	make -C $(KERNEL) M=$(shell pwd) modules_install
	depmod -A
clean:
	make -C $(KERNEL) M=$(shell pwd) clean

原来是obj-m,复制进去成了bj-m,修改Makefile再次make:

curtis@curtis-virtual-machine:~/Desktop/test$ make
make -C /lib/modules/4.2.0-42-generic/build M=/home/curtis/Desktop/open_hook_demo modules
make[1]: Entering directory `/usr/src/linux-headers-4.2.0-42-generic'
  CC [M]  /home/curtis/Desktop/open_hook_demo/test.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/curtis/Desktop/open_hook_demo/test.mod.o
  LD [M]  /home/curtis/Desktop/open_hook_demo/test.ko
make[1]: Leaving directory `/usr/src/linux-headers-4.2.0-42-generic'
curtis@curtis-virtual-machine:~/Desktop/test$ ls
Makefile  modules.order  Module.symvers  test.c  test.ko  test.mod.c  test.mod.o  test.o

成功生成ko文件!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值