3

Ubuntu 9.10 (Linux 2.6.31-22-server) でビルドすると、phys_mem_access_prot に関する警告をスローするローダブル モジュールがあります。

[664] make -C /lib/modules/`uname -r`/build M=`pwd` 
make: Entering directory `/usr/src/linux-headers-2.6.31-22-server'
  LD      /home/chuck/dev/svd/built-in.o
  CC [M]  /home/chuck/dev/svd/svd.o
  LD [M]  /home/chuck/dev/svd/svd_drv.o
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: "phys_mem_access_prot" [/home/chuck/dev/svd/svd_drv.ko] undefined!
  CC      /home/chuck/dev/svd/svd_drv.mod.o
  LD [M]  /home/chuck/dev/svd/svd_drv.ko
make: Leaving directory `/usr/src/linux-headers-2.6.31-22-server'

関数は System.map-2.6.31-22-server ファイルに表示されます

[667] grep phys_mem_access_prot /boot/System.map-2.6.31-22-server 
ffffffff8103fb40 T phys_mem_access_prot
ffffffff8103fb50 T phys_mem_access_prot_allowed

とドライバーが読み込まれるので、なぜmodpostが不満なのか混乱しています。カーネルが関数をエクスポートしないため、これは問題EXPORT_SYMBOL()ですか?

4

1 に答える 1

1

あなたはあなた自身の質問に答えました!モジュールで使用されるカーネル関数は、さまざまな EXPORT_SYMBOL() マクロのいずれかでエクスポートする必要があります。

非 GPL モジュールが EXPORT_SYMBOL_GPL によってエクスポートされた関数を使用する必要がある場合にも問題が発生します。

于 2010-06-17T12:34:26.693 に答える