通常 /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
回答您的以下评论:
将“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
上面的复制指令