2010-09-05 86 views
0

這是我第一次嘗試構建內核模塊。以下是make文件。在運行make命令。我得到的錯誤內核模塊製作文件問題

/bin/sh的:語法錯誤: 「(」 意外

化妝:*** [全部]錯誤2

obj-m =mod.o 
obj-m +=depmod.o 

obj-m +=mod1.o 
obj-m +=mod2.o 
obj-m +=mod3.o 


KDIR=/lib/modules/$(shell uname -r)/build 

all: 
     $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules 
clean: 
     rm -rf $(wildcard *.o *.ko *.mod.* .c* .t* test Module.symvers *.order *.markers) 
+1

嘗試回顯「$(MAKE)-C $(KDIR)SUBDIRS = $(PWD)modules」表達式來檢查它的擴展方式。添加後KDIR =:$(警告測試= $(MAKE)-C $(KDIR)SUBDIRS = $(PWD)) – pmod 2010-09-05 16:45:14

+0

是的我有問題PWD中的目錄名稱「(」存在,重命名我的目錄問題後解決 – Poorna 2010-09-06 13:55:27

回答

1

內核版本(由uname -r給出)即可在這種情況下,我敢打賭它的確如此,這意味着a)它不能很好地作爲路徑的一部分,並且b)shell不喜歡在Make中間接收它命令。我建議你翻譯的括號之中,比如,強調:(uname -r也可以給你正斜槓,它可以處理同樣的方式,如果你有)

KDIR=/lib/modules/$(shell uname -r | sed s/[\(\)]/_/g)/build 

+0

我找不到任何括號或斜線的例子,你有什麼?for(my)culture。:) – levif 2010-09-05 21:40:43

0

你應該合理報價論點,即

${MAKE} -C "${KDIR}" M="${PWD}" modules

另外,對於clean:則應該同樣使用

${MAKE} -C "${KDIR}" M="${PWD}" clean

而不是試圖用Kbuild自己生成的所有文件與一些通配符匹配(這只是不能保證未來)。