0

カーネルモジュールを構築しようとするのはこれが初めてです。以下はmakeファイルです。make コマンドの実行時。エラーが発生します

/bin/sh: 構文エラー: "(" 予期しない

make: *** [すべて] エラー 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)
4

2 に答える 2

1

カーネル リリース ( で指定uname -r) には括弧を含めることができます。これは、a) パスの一部としてうまく動作しないこと、および b) シェルが Make コマンドの途中でそれを受け取ることを好まないことを意味します。括弧をアンダースコアなどに変換することをお勧めします。

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

(uname -rスラッシュを使用することもできます。必要に応じて同じ方法で対処できます。)

于 2010-09-05T18:43:30.763 に答える
0

引数を適切に引用する必要があります。

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

また、clean:同様に使用する必要があります

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

Kbuild によって生成されたすべてのファイルを自分でワイルドカードと一致させようとするのではなく (これは将来的に保証されません)。

于 2010-11-21T13:35:41.673 に答える