在学习驱动程序的过程中,做的最多的一件事情就是从文章中直接把代码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文件!!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐