问题描述
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
)
最佳回答
我有同样的问题。我假设您不仅需要复制.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
次佳回答
从top-level源目录中,只需给出make到模块名称或模块目录的路径即可,例如:
make drivers/net/can/usb/peak_usb/
或更简单的示例(英特尔e1000以太网驱动程序):
make drivers/net/ethernet/intel/e1000/e1000.ko