在编译内核时构建/ lib / modules / $(uname -r)/ build

时间:2013-05-22 09:24:33

标签: linux linux-kernel kernel cross-compiling

我正在为嵌入式设备交叉编译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)安装内核头文件,但我怀疑它是个好主意,因为内核源代码可能不一样。

2 个答案:

答案 0 :(得分:3)

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

  make modules_install INSTALL_MOD_PATH=/some/root/

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

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

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

这应该适合你。

编辑A

回答下面的评论:

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

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

    假设你的内核源代码是:

      /usr/src/linux-3.5.0/
    

    您的内核构建目录是:

      /usr/src/linux-3.5.0-build/
    

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

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

          lib/modules/$(uname -r)/
    

    当你在这个目录中执行ls -al时,你会看到build是一个软链接:

          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

答案 1 :(得分:0)

这是旧的,但有些人会需要这些信息。

我花了很多时间来确定build文件夹的来源,以及为什么它只是我编译自己的内核时的链接。终于想通了;

Linux内核通常只将buildsource文件夹链接到源文件夹。

但是!

Arch linux(也可能是其他一些发行版);有一个手动脚本,用于删除这些链接,并将(已过滤)文件添加到build文件夹。

https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/linux

我已经将这个脚本解压缩到独立工作(在内核源代码树中):https://gist.github.com/furkanmustafa/9e73feb64b0b18942047fd7b7e2fd53e