如何从下载的Linux源代码编译模块?

时间:2013-11-15 07:12:21

标签: c linux module kernel driver

我最终想修改和编译现有的Linux USB存储驱动程序并对其进行测试。第一步,我想按原样编译模块。

我下载了最新的Linux内核(版本3.12)并将其解压缩到~/linux-3.12

我找到了我想要编译的驱动程序:drivers/usb/storage,但是当我运行make时,我收到以下错误:

make: *** No targets.  Stop.

我在网上找到了很多指南,但没有一个能用于USB存储驱动程序。我想要的只是编译这个模块并获得.ko所以我可以测试它。

注意:我正在运行Ubuntu 13.04 64位,uname -r输出3.8.0-30-generic - 我不确定这是不是问题,但我之前设法编译了整个内核。我现在不想这样做,因为它需要一个时间。

2 个答案:

答案 0 :(得分:3)

如果你想构建drivers/usb/storage模块,你可以这样做:

make M=drivers/usb/storage

从内核树的根目录。在此之前,您需要确保您的配置与正在运行的内核的配置相同。

答案 1 :(得分:2)

您不能简单地获取一个内核的源代码并使用它来构建另一个内核的模块。该模块需要使用相同的源构建,并且具有与内核本身相同的配置。

基本上,您需要找到正在运行的Ubuntu内核的源代码。在Ubuntu中,就像在Debian中一样,可以使用'apt-get source'来完成。软件包名称可能类似于“linux-image-3.8-2-amd64”。

获得源代码后,您需要找到正在运行的内核的配置。幸运的是,Ubuntu将其保留在/boot/config-3.8 -....

将该配置作为.config复制到内核源代码树并运行'make oldconfig'。现在你应该能够构建模块了(假设它还没有内置到你的内核中!)。