关于内核模块的Makefile
请问一下内核模块里面有关于操作系统名称的宏定义吗,比如Suse,centos,等,或者我怎么样才能在Makefile 里面来根据不同的系统加上不同的宏定义呢? 又碰到一个问题,我的Makefile 内容如下:obj-m := test.o
all :
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
include $(PWD)/1.make
但是在编译的时候,前面make的PWD路径是我代码的当前路径,可是到了后面include的时候, $(PWD)却显示的是系统的源码路径,找不到我要包含的文件,这到底是怎么回事啊 $(PWD)是变量引用,前后有地方修改了。
你改成 $(shell pwd)呢 。 一样的,我就是在开头先付给一个变量,得到的也是内核路径,感觉好像只有在执行make语句的时候才会在我代码的路径下,其他时候得到的都是源码的路径。 回复 1# sky__sea
好像没有发行版的信息吧。
回复 2# sky__sea
makefile在kbuild的过程中会被执行两遍(假设模块代码在Kernel tree之外),第一遍在模块代码路径下,第二遍在kernel tree下。
有什么办法可以得到我当前的源码路径呢? obj-m = a.c
$(shell env >/dev/tty; sleep 5)
all:
make -C /kernel-src-tree/ M=`pwd`从env的输出(注意有两次),看看哪个环境变量符合“当前源码路径”的定义:lol
polejo 发表于 2016-04-01 11:37 static/image/common/back.gif
$(PWD)是变量引用,前后有地方修改了。
你改成 $(shell pwd)呢 。
这是正确的方法。 PWD是bash的环境变量,应该不是make的内置变量吧?(当然make可以引用环境变量)
如果是这样的话,make -C /k-dir/ 执行的话,PWD的值不应该是k-dir$ cat sub1/Makefile
a=$(PWD)
b=$(shell pwd)
all:
echo $a $b
make -C ../sub2
$ cat sub2/Makefile
a=$(PWD)
b=$(shell pwd)
all:
echo $a $b
$ make -C sub1/ --no-print
echo /home/test /home/test/sub1
/home/test /home/test/sub1
make -C ../sub2
echo /home/test /home/test/sub2
/home/test /home/test/sub2