V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liyafe1997
V2EX  ›  Android

问下编译 Android 内核 clang 的选择

  •  
  •   liyafe1997 · 188 天前 · 4287 次点击
    这是一个创建于 188 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我看很多教程里用的都是这个 https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/,这个 Google 官方的 Pre-built binary ,甚至还有给每个安卓版本的分支,比如我编译的是 android12 的内核最好是不是用 android12-gsi 这个分支的编译器?

    之前试了下,用 Ubuntu22.04 源里的 clang 10.0.0 似乎没有问题,编译的内核正常。但是后来换到另一台 debian 环境的机器,上面 PATH 里的 clang 是 16.0.5 的,编译出来的内核能 boot 到锁屏界面,但是不出几秒钟之后就死机,然后自动重启。

    反复编译测试了几次都是如此,确认所有 source ,defconfig ,脚本,流程等等都一模一样,就是环境&编译的区别,编译过程也没有报错或报 warning 。看来编译器玄学/bug/来带 bug 是可能的。因此想问一下,最佳实践是用哪的编译器比较好,有没有一个“官方御用 clang binary”之类的东西?虽然 clang 10.0.0 或者那个 Google 的 git 里的也许看起来没问题,但是不知道会不会有其它隐性 bug....

    5 条回复    2024-06-14 17:02:01 +08:00
    hejinliangsb
        1
    hejinliangsb  
       188 天前 via Android
    你用什么手机刷机的
    liyafe1997
        2
    liyafe1997  
    OP
       188 天前 via Android
    @hejinliangsb K30p ,不过这不重要吧?这应该是一个通用的问题。
    rev1si0n
        3
    rev1si0n  
       187 天前
    是的,有的,都在 repo 里,最好是完全匹配官方用的,有时候可能差一个版本都能给你搞出问题来。最常见的,是给你整个编译不通过,这还好你还能知道错。编译安卓内核不要用外部的任何东西,用官方 repo 里的,并且版本分支要匹配,你用外面的编译器,能编译出来 kernel 文件也是佩服。
    liyafe1997
        4
    liyafe1997  
    OP
       187 天前
    @rev1si0n 我试了下,在开启一些 defconfig 之后官方那个 clang ( android12-gsi 分支)有个头文件会不停地报 Warning 最后编译的内核启不来,倒是我 ubuntu22.04 源里的那个 clang 没问题,这个 clang 似乎是不管什么情况都是最好使的,给我整不会了。
    rev1si0n
        5
    rev1si0n  
       187 天前
    @liyafe1997 没必要卡死 gsi 分支啊,试试 android-12.1.0_r27 ,最新最旧来回切换二分法,总归能找到,其次,你要得确定你编译的安卓 12 的内核,因为事实上,安卓 11 的内核塞到 12 里也不是不能运行,很多定制 rom 没有内核源码就是这么干的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3225 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:36 · PVG 20:36 · LAX 04:36 · JFK 07:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.