通常 /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
这应该对你有用。
编辑一个
在下面回答您的评论:
-
将“newmodules”保留在内核目录之外,将其放在内核目录中是个坏主意。所以 mkdir newmodules 在 /home/foo 或 /tmp 之类的地方。这是您的构建链接搞砸的原因之一
-
ALSO .../build 是一个软链接 /to/kernel/build/location 它只会作为软链接复制过来。您还需要使用相同的相对位置将实际的内核源代码/内核构建目录复制到您的 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 时,你会看到 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