我正在尝试在 Windows 主机上为 ARM 目标 (Freescale i.Mx28) 交叉编译 Linux 内核。我知道与使用 Linux 主机相比,这种方法并不是最好的方法,但不幸的是,这不是由我决定的。
限制是:
到目前为止,我解决了 Windows 上缺少的区分大小写的问题,以便我可以使用 Cygwin 提取内核源代码。但现在我遇到了内核 Makefile 的问题。我认为 Windows 路径存在一些问题,因为我收到错误消息
*** multiple target patterns. Stop.
,该消息来自路径中的 :
以及配置时有关依赖项检查的其他错误:
HOSTCC scripts/basic/fixdep
/usr/bin/sh: scripts/basic/fixdep: cannot execute binary file
make[1]: *** [scripts/basic/fixdep] Error 126
make: *** [scripts_basic] Error 2
是否有一种方法可以移植 Makefile 而无需重写它,或者是否有另一种方法可以在不使用给定 Makefile 的情况下构建内核?我可以使用源工具链或 IDE 来处理 Makefile 吗? 有没有办法在给定的限制内构建内核?
要交叉编译内核,您需要两个编译器:一个能够构建在构建环境中运行的工具,另一个可以为您的目标创建可执行文件。
看起来你并没有真正交叉编译,但你刚刚更换了编译器。您现在正在构建构建 ARM 所需的工具并尝试在 Windows 上运行它们。
您可以指定使用哪个交叉编译器:
make ARCH=arm CROSS_COMPILE=your-compiler-prefix- ...
您可能还遇到文件系统问题。 Windows 中的文件系统不区分大小写,内核构建可能会在区分大小写的情况下创建文件。要在 Windows 上获得对不区分大小写的文件系统的支持,您可以查看 Windows Services for UNIX (更新: 现在已过时,您可能希望使用 WSL 来解决文件系统问题。)
使用另一个工具链! CodeBench 与在 Windows 主机上构建 Linux 不兼容,无论他们在网站上放置关于使用 CYGPATH 等的什么花言巧语(谎言)。
我自己已经尝试了几周,问题是 CodeBench 接受 POSIX 路径,但坚持输出 Win32 路径,这些路径在 Linux Kernel Make 程序中很难(如果不是不可能)控制。
我并不是说这是不可能的;我并不是说这是不可能的。我确信这是可能的。但无论你的老板告诉你什么,都不值得花时间。还有更多的问题需要考虑。另一个问题是 Linux 源代码
./scripts
目录中的工具与 Windows 环境不直接兼容,因此,尽管它们可以编译,但无法按预期运行。他们需要修补!
您拥有的最好机会是使用 Cygwin 编译您自己的交叉编译器。或者找一个已经为你做好的。