通常 /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
这应该对你有用。
EDIT A
回答您的以下评论:
-
将“newmodules”保留在内核目录之外,将其放在内核目录中是一个坏主意。所以 mkdir newmodules 类似 /home/foo 或 /tmp 之类的地方。这是您的构建链接搞砸的原因之一
-
另外 .../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 构建而不是交叉编译它?
NOTE
如果您的内核版本与内核源代码相同,则只需复制内核源代码并忽略linux-3.5.0-build
在上面的复制说明中