【问题标题】:arm-linux-androideabi-4.9 or arm-eabi-4.8?arm-linux-androideabi-4.9 还是 arm-eabi-4.8?
【发布时间】:2018-08-08 01:13:13
【问题描述】:

最近一段时间,我一直在为我的 Pixel XL 编译自己的内核,并带有几个补丁。在 Android 9.0 之前,我必须为交叉编译器使用 aarch64-linux-android-4.9,但在 Android 9.0 中,它现在告诉我,内核的某些部分还需要一个 ARM32 工具链(我不记得是什么它说,但这并不重要)。

无论如何,在 XDA 上,nathanchance 有一个指南,我用来学习如何构建内核和 ARM32 工具链,他链接到 arm-eabi-4.8,以及 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,因为它在内核的构建配置中被引用),我想知道有什么区别。

【问题讨论】:

    标签: android android-ndk cross-compiling


    【解决方案1】:

    构建内核(或裸机软件)时

    主要区别(就内核而言)是您用于构建它们的 gcc 版本。

    三元组格式如下:

    arch-sys-abi

    在这两种情况下,arch 都是arm(即 ARM32)。在这种情况下,内核既是系统又是 abi 不可知论者……所以这里没有区别。就内核而言,最后剩下的区别是 arm-eabi-4.8 是针对 gcc-4.8 构建的,arm-linux-androideabi-4.9 是针对 gcc 4.9 构建的。

    在这种情况下,我建议使用 Gcc 4.9,此外,这个版本的 gcc 与 android NDK 中的版本相同(但并不是说会有很大的不同)。

    -- 编辑--:

    关于用户空间应用程序:

    在这种情况下,实际上归结为工具链的版本,以及该工具链中包含哪个 sysroot。

    具体来说,arm-linux-anrdroideabi-4.9(在我看来)就像 Android NDK 工具链,因此它是基于 android sysroot(平台工具和库)构建的。这意味着如果您要使用它构建用户应用程序,您将可以访问它附带的所有库。

    arm-eabi-4.8 的情况下,由于没有包含系统,它很可能是一个没有任何库的嵌入式目标。对于用户空间程序,这意味着这个工具链根本没有库。 (这些工具链通常针对裸机开发,而不是任何真正的用户空间开发)。

    免责声明:我没有检查那些特定的工具链来确定包含哪些库。

    作为结论,请记住,由于内核不是基于任何用户空间库构建的(出于显而易见的原因),因此这种差异不适用于内核构建。

    【讨论】:

    • 谢谢你的回答,但是说我们不只是在谈论内核,有什么区别?您说内核与系统和 abi 无关,那么为什么 arm-eabi-4.8 根本没有列出系统,而 arm-linux-androideabi-4.9 却列出了 Linux?另外,“androideabi”和“eabi”有什么区别?
    • 我通过添加用户空间软件构建的案例来完成我的答案,它有什么不同。
    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 2014-05-09
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2016-03-02
    相关资源
    最近更新 更多