我正在尝试在Windows主机上为ARM目标(飞思卡尔i.Mx28(交叉编译Linux内核。我知道与使用 Linux 主机相比,这种方法不是最好的方法,但不幸的是,这不是由我决定的。
限制是:
- 内核
- 必须是飞思卡尔提供的内核(L2.6.35_MX28_SDK_10.12(
- 它必须使用 Sourcery Toolchain 和 CodeBench 构建
- 整个事情必须在Windows上完成
解决了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 来处理生成文件吗?有没有办法在给定的限制内构建内核?
若要交叉编译内核,需要两个编译器:一个能够生成在生成环境中运行的工具,另一个可以为目标创建可执行文件。
看起来你并没有真正交叉编译,但你刚刚替换了你的编译器。您现在正在构建 ARM 构建所需的工具,并尝试在 Windows 上运行它们。
您可以指定要使用的交叉编译器:
make ARCH=arm CROSS_COMPILE=your-compiler-prefix- ...
您可能还遇到文件系统问题。Windows 中的文件系统不区分大小写,内核构建可能会在大小写很重要的地方创建文件。要在 Windows 上获得对不区分大小写的文件系统的支持,您可以查看 Windows Services for UNIX。
使用另一个工具链!CodeBench 与在 Windows 主机上构建 Linux 不兼容,无论他们在他们的网站上放了什么关于使用 CYGPATH 的眼睛糖果(谎言(等。
我自己已经尝试了几个星期,问题是CodeBench接受POSIX路径,但坚持输出Win32路径,这些路径在Linux Kernel Make过程中很难控制,如果不是不可能的话。
我并不是说这是不可能的;我相信这是可能的。但不管你的老板告诉你什么,这都不值得花时间。还有更多的问题需要考虑。另一个问题是 Linux 源代码./scripts
目录中的工具与 Windows 环境不直接兼容,因此,尽管它们可能会编译,但它们不会按预期运行。它们需要修补!
你最好的机会是用Cygwin编译你自己的交叉编译器。或者找一个已经为你煮熟的。