问下编译 Android 内核 clang 的选择

14 天前
 liyafe1997

我看很多教程里用的都是这个 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....

747 次点击
所在节点    Android
5 条回复
hejinliangsb
13 天前
你用什么手机刷机的
liyafe1997
13 天前
@hejinliangsb K30p ,不过这不重要吧?这应该是一个通用的问题。
rev1si0n
12 天前
是的,有的,都在 repo 里,最好是完全匹配官方用的,有时候可能差一个版本都能给你搞出问题来。最常见的,是给你整个编译不通过,这还好你还能知道错。编译安卓内核不要用外部的任何东西,用官方 repo 里的,并且版本分支要匹配,你用外面的编译器,能编译出来 kernel 文件也是佩服。
liyafe1997
12 天前
@rev1si0n 我试了下,在开启一些 defconfig 之后官方那个 clang ( android12-gsi 分支)有个头文件会不停地报 Warning 最后编译的内核启不来,倒是我 ubuntu22.04 源里的那个 clang 没问题,这个 clang 似乎是不管什么情况都是最好使的,给我整不会了。
rev1si0n
12 天前
@liyafe1997 没必要卡死 gsi 分支啊,试试 android-12.1.0_r27 ,最新最旧来回切换二分法,总归能找到,其次,你要得确定你编译的安卓 12 的内核,因为事实上,安卓 11 的内核塞到 12 里也不是不能运行,很多定制 rom 没有内核源码就是这么干的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1049042

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX