gpt4 book ai didi

linux - building/lib/modules/$(uname -r)/build 编译内核时

转载 作者:太空狗 更新时间:2023-10-29 11:09:44 28 4
gpt4 key购买 nike

我正在为嵌入式设备交叉编译 3.4.0 内核。然后我想安装需要 /lib/modules/3.4/build 目录和子文件的 compat-wireless 驱动程序。谁能解释一下我如何构建该目录,以便当我执行 INSTALL_MOD_PATH=newmodules make modules_install 时它会加载 /lib/modules/$(uname -r)/build 目录还有吗?如果您能给我一个明确的解释,我将不胜感激。

我正在使用 debian 发行版。我知道我可以通过 apt-get install linux-headers-$(uname -r) 安装内核头文件,但我怀疑这是否是个好主意,因为内核源代码可能不相同。

最佳答案

通常/lib/modules/$(uname -r)/build 是指向执行构建的目录的软链接(soft link)。所以这样做的方法就是简单地做一个

  make modules_install INSTALL_MOD_PATH=/some/root/

在内核的构建目录中,/some/root 是您希望交叉编译片段结束的地方。这将在/some/root/lib/modules/$(uname -r) 中创建一个指向您的内核构建路径的链接……验证这一点。

现在,当您构建 compat_wireless 驱动程序时,使用 KLIB_BUILD 变量(阅读 Makefile)将 Makefile 中的内核构建目录指定为/some/root

make modules KLIB_BUILD=/some/root/lib/modules/$(uname -r)/build 

这应该可以解决问题。

编辑一个

在回答您的以下评论时:

  1. 将“newmodules”放在内核目录之外,将它放在内核目录中是个坏主意。所以 mkdir newmodules 像/home/foo 或/tmp 之类的地方。这是您的构建链接被搞砸的原因之一

  2. 另外 .../build 是一个软链接(soft link)/to/kernel/build/location 它只会作为软链接(soft link)复制过来。您还需要使用相同的相对位置将实际的内核源代码/内核构建目录复制到您的 microSD。例如,

假设您的内核源代码位于:

      /usr/src/linux-3.5.0/

您的内核构建目录是:

      /usr/src/linux-3.5.0-build/

您的新模块(在以下 1. 之后)位于:

      /tmp/newmodules/

因此,在/tmp/newmodules/下,您会看到安装在树中的模块,如下所示:

      lib/modules/$(uname -r)/

当你在这个目录中执行 ls -al 时,你会看到构建是一个软链接(soft link)到:

      build -> /usr/src/linux-3.5.0-build/

现在假设您的 microSD 安装在/mnt/microSD 下

然后你需要做以下事情

      mkdir  -p /mnt/microSD/usr/src 
cp -a /usr/src/linux-3.5.0 /usr/src/linux-3.5.0-build /mnt/microSD/usr/src
cp -a /tmp/newmodules/lib /mnt/microSD/lib

现在您已经拥有了需要带到嵌入式环境中的所有内容。我认为您是在目标系统上构建 compat_wireless 而不是交叉编译它?

注意

如果您的内核构建与内核源代码相同,那么只需复制内核源代码并忽略上面复制说明中的linux-3.5.0-build

关于linux - building/lib/modules/$(uname -r)/build 编译内核时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16688138/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com