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