编译这个驱动程序时,使用
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
记住 $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
将包含正确的路径。