web-dev-qa-db-ja.com

単一のツリー内カーネルモジュールを構築するにはどうすればよいですか?

Linux-source -...にはconfig /boot/config-3.4-trunk-686-paeで無効になっているモジュールがあり、linux-image -...の一部ではありません(これはDebianですが、ソリューションはUbuntuでも同じである必要がありますか?)、たとえば.

# CONFIG_CAN_PEAK_USB is not set

分散カーネルで使用できるように、そのカーネルモジュールだけをどのようにコンパイルしますか?

それぞれのlinux-source -...パッケージは既にインストールされており、圧縮解除され、/ usr/src/linuxにリンクされています。 /boot/config-3.4-trunk-686-paeは/usr/src/linux/.configにコピーされ、次のように変更されます

CONFIG_CAN_PEAK_USB=m

make
make modules

カーネルとすべてのモジュールをコンパイルすることが可能です。しかし、その特定の単一モジュールのみをどのようにコンパイルしますか?

(注:また、カーネルは事前にコンパイルする必要があります。そうしないと、次のエラーが表示されます:no symbol version for module_layout

33
mab

同じ問題がありました。 .configをコピーするだけでなく、Module.symversもコピーする必要があると思います

モジュールft1000をコンパイルする手順(Debian Wheeze 7.1.0を実行、カーネル3.2.0-4-686-pae):

aptitude install linux-headers-3.2.0-4-686-pae
aptitude install linux-source-3.2
cd /usr/src/
tar xjf linux-source-3.2.tar.bz2
cd /usr/src/linux-source-3.2
cp ../linux-headers-3.2.0-4-686-pae/Module.symvers .
make oldconfig # it copies .config to ./
vi .config # enable ft1000 module: CONFIG_FT1000=m
make prepare # setup FT1000 as module
make modules_prepare
make SUBDIRS=scripts/mod
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules
cp drivers/staging/ft1000/ft1000-usb/ft1000.ko /lib/modules/3.2.0-4-686-pae/kernel
/drivers/staging/
depmod
modprobe ft1000
33
Maros Michalik

最上位のソースディレクトリ内から、単にモジュール名またはモジュールディレクトリへのパスを指定します。例:

make drivers/net/can/usb/peak_usb/

または、より簡単な例(Intel e1000イーサネットドライバー):

make drivers/net/ethernet/intel/e1000/e1000.ko
13
ish