arm-linux-androideabi-4.9 还是 arm-eabi-4.8?
arm-linux-androideabi-4.9 or arm-eabi-4.8?
最近一段时间,我一直在用几个补丁为我的 Pixel XL 编译我自己的内核。在 Android 9.0 之前,我必须为交叉编译器使用的是 aarch64-linux-android-4.9,但是对于 Android 9.0,它现在告诉我我还需要用于内核某些部分的 ARM32 工具链(我不记得它说了什么,但这并不重要)。
无论如何,在 XDA,nathanchance 有一个指南,我用它来学习如何构建内核和 ARM32 工具链,他链接到 arm-eabi-4.8,以及 "Building Kernels" 的旧版本在 AOSP 站点上,过去也说 arm-eabi。新版本的"Building Kernels"页面根本没有提到获取工具链,但是当我去获取arm-eabi-4.8时我注意到了arm-linux-androideabi-4.9也存在
我的问题是,我应该使用arm-eabi-4.8还是arm-linux-androideabi-4.9?有什么不同?我能够用两者构建内核(都没有测试过,但我认为它们都可以正常工作)但我只是好奇我应该实际使用哪一个(我很确定它是 arm-linux-androideabi-4.9,因为在内核的构建配置中引用了它)我想知道有什么区别。
构建内核(或裸机软件)时
主要区别(关于内核)是您用来构建它们的 gcc 版本。
三元组格式如下:
arch-sys-abi
在这两种情况下,arch 都是arm
(即ARM32)。在那种情况下,内核既是系统不可知的,也是不可知的……所以这里没有区别。关于内核的最后一个区别是 arm-eabi-4.8
是针对 gcc-4.8 构建的,而 arm-linux-androideabi-4.9
是针对 gcc 4.9 构建的。
在这种情况下,我建议使用 Gcc 4.9,此外,此版本的 gcc 与 android NDK 中提供的版本相同(但不会有很大的不同)。
--编辑--:
关于用户space 应用程序:
在那种情况下,真正归结为工具链的版本,以及该工具链中包含哪个 sysroot。
具体来说,arm-linux-anrdroideabi-4.9
(在我看来)类似于 Android NDK 工具链,因此它构建在 android sysroot(平台工具和库)之上。这意味着如果您要使用它来构建用户应用程序,您将可以访问它附带的所有库。
在arm-eabi-4.8
的情况下,由于没有包含任何系统,它很可能是一个没有任何库的嵌入式目标。对于 userspace 程序,这意味着该工具链根本没有库。 (那些工具链通常针对裸机开发,而不是任何真正的用户 space 开发)。
免责声明:我没有检查那些特定的工具链以确保包含哪些库。
总而言之,请记住,由于内核不是基于任何用户space 库构建的(原因很明显),因此这种差异不适用于内核构建。
最近一段时间,我一直在用几个补丁为我的 Pixel XL 编译我自己的内核。在 Android 9.0 之前,我必须为交叉编译器使用的是 aarch64-linux-android-4.9,但是对于 Android 9.0,它现在告诉我我还需要用于内核某些部分的 ARM32 工具链(我不记得它说了什么,但这并不重要)。
无论如何,在 XDA,nathanchance 有一个指南,我用它来学习如何构建内核和 ARM32 工具链,他链接到 arm-eabi-4.8,以及 "Building Kernels" 的旧版本在 AOSP 站点上,过去也说 arm-eabi。新版本的"Building Kernels"页面根本没有提到获取工具链,但是当我去获取arm-eabi-4.8时我注意到了arm-linux-androideabi-4.9也存在
我的问题是,我应该使用arm-eabi-4.8还是arm-linux-androideabi-4.9?有什么不同?我能够用两者构建内核(都没有测试过,但我认为它们都可以正常工作)但我只是好奇我应该实际使用哪一个(我很确定它是 arm-linux-androideabi-4.9,因为在内核的构建配置中引用了它)我想知道有什么区别。
构建内核(或裸机软件)时
主要区别(关于内核)是您用来构建它们的 gcc 版本。
三元组格式如下:
arch-sys-abi
在这两种情况下,arch 都是arm
(即ARM32)。在那种情况下,内核既是系统不可知的,也是不可知的……所以这里没有区别。关于内核的最后一个区别是 arm-eabi-4.8
是针对 gcc-4.8 构建的,而 arm-linux-androideabi-4.9
是针对 gcc 4.9 构建的。
在这种情况下,我建议使用 Gcc 4.9,此外,此版本的 gcc 与 android NDK 中提供的版本相同(但不会有很大的不同)。
--编辑--:
关于用户space 应用程序:
在那种情况下,真正归结为工具链的版本,以及该工具链中包含哪个 sysroot。
具体来说,arm-linux-anrdroideabi-4.9
(在我看来)类似于 Android NDK 工具链,因此它构建在 android sysroot(平台工具和库)之上。这意味着如果您要使用它来构建用户应用程序,您将可以访问它附带的所有库。
在arm-eabi-4.8
的情况下,由于没有包含任何系统,它很可能是一个没有任何库的嵌入式目标。对于 userspace 程序,这意味着该工具链根本没有库。 (那些工具链通常针对裸机开发,而不是任何真正的用户 space 开发)。
免责声明:我没有检查那些特定的工具链以确保包含哪些库。
总而言之,请记住,由于内核不是基于任何用户space 库构建的(原因很明显),因此这种差异不适用于内核构建。