当前位置: 首页>>技术教程>>正文


如何构建单个in-tree内核模块?

,

问题描述

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8037.html,未经允许,请勿转载。