驱动程序没有编译 "没有规则使目标"

问题描述 投票:0回答:1
  • 编译这个驱动程序时,使用

    echo "obj-m := tiny_i2c_adap.o" > Makefilemake -C SUBDIRS=$PWD modules

Makefile: obj-m := tiny_i2c_adap.o 錯誤:prashanth@prashanth-Lenovo-ideapad-520-15IKB:~$ make -C usrsrclinux-headers-$(uname -r)

错误:prashanth@prashanth-Lenovo-ideapad-520-15IKB:~$ make -C usrsrclinux-headers-$(uname -r) M=$PWD modulesmake: 输入目录 'usrsrclinux-headers-5.1.7-050107-generic'make[1]: * 没有规则让目标'homeprashanthtiny_i2c_adap.c'成为'homeprashanthtiny_i2c_adap.o'所需要的。 Stop.Makefile:1571: 目标''的配方。模块homeprashanth "失败的制作。* [模块homeprashanth] 错误 2make: 离开目录 "usrsrclinux-headers-5.1.7-050107-generic

makefile
1个回答
0
投票

记住 $PWD 是一个 炮弹 变量,其中包含了当前的工作目录。 所以当你运行:

~$ make -C /usr/src/linux-headers-$(uname -r) M=$PWD modules

的时候 $PWD 这里是你运行make时所在的目录(这里是你的主目录),所以你正在运行。

~$ make -C /usr/src/linux-headers-$(uname -r) M=/home/prashanth modules

所以内核的makefile假定你的模块位于 /home/prashanth 因为那是你设置 M 变量的路径。

你需要为 M,否则使用 cd 切换到包含你的源代码的目录,然后再调用 make 以致于 $PWD 将包含正确的路径。

© www.soinside.com 2019 - 2024. All rights reserved.