AOSP Android 10内核编译刷入Pixel3
背景
下载Android10的内核源码编译并刷入Pixel3中,为后面的过反调试做准备。
环境
mv Ubuntu 18.04
已经成功编译的AOSP 10_r41环境,编译内核需要源码交叉编译环境。
Pixel3
下载内核代码
Ubuntu中找个非中文路径的位置
1 | mkdir ~/bin |
repo是用来下载代码的,如果你已经安装了就进入下一步。
1 | # 创建一个目录 |
这里有个很严重的坑
不要使用Mac下载源码复制到Ubuntu中!
不要使用Mac下载源码复制到Ubuntu中!
不要使用Mac下载源码复制到Ubuntu中!
由于大小写不敏感,下载文件比如a.h和A.h只有其中一份,编译内核的时候会导致文件丢失missing xxx
。等等。
这里访问的是android.googlesource.com的地址,需要留学上网才能下载代码。自己想办法。
同步代码速度慢估计一个小时就OK,目录结构大概是这样:
编译内核
编译内核我们需要编译AOSP的环境变量。
进入我们的源码目录
1 | # 载入编译源码环境 |
载入环境之后,进入内核源码目录,开始编译。编译内核需要libssl-dev
库,如果你没有安装,需要安装这个库。
1 | sudo apt-get install libssl-dev |
可以通过命令查询是否已经安装了。
1 | # 进入内核源码目录 |
编译大概需要十分钟这样,具体看电脑配置。
到这里内核编译完成了。
刷入手机Pixel3中
前提:
已经编译AOSP完成,且刷入手机是没问题的,正常屏幕触摸,WiFi,蓝牙连接正常,相机麦克风可用。
查看当前系统的内核:
1 | adb shell cat /proc/version |
设置新的内核环境变量
先把编译好的系统刷入手机中。
源码目录下执行:
1 | # 重启手机到bl模式 |
AOSP源码本身是附带了内核产物的,默认情况下编译boot.img会使用AOSP源码目录中的内核产物。位置在:
/home/aosp/aosp/android-10.0.0_r41/device/google/crosshatch-kernel/
也就是源码根目录下的:device/google/crosshatch-kernel/
我们重新构建boot.img
的时候需要重定向到新编译成功的目录
在/home/aosp/aosp/android-10.0.0_r41
目录下执行:
1 | # 内核位置指向我们自己编译的位置,当前窗口有效 |
如果想恢复默认内核位置,执行:
1 | export TARGET_PREBUILT_KERNEL="" |
开始构建新的内核boot.img
1 | # 源码根目录执行 |
刷入新内核
构建成功之后,刷入ko
文件,再刷入新的boot.img
1 | adb root |
进入内核目录
我的位置是/home/aosp/k
执行:
1 | adb push /out/android-msm-pixel-4.9/dist/*.ko /vendor/lib/modules |
接着进入bl模式
1 | adb reboot bootloader |
进入AOSP编译的产物目录
1 | android-10.0.0_r41\out\target\product\blueline |
查看内核信息:
1 | adb shell cat /proc/version |
在内核目录下产物目录下执行
1 | # k/out/android-msm-pixel-4.9/dist |
这里的内核信息和我们手机上面的一致。
到此编译和烧录到手机完结。
视频讲解版本:哔站,讲解内核编译遇到问题
整体流程版本:哔站内核编译整体流程
总结
1:不要使用Mac下载内核源码。
2:下载内核的地址是google地址,需要留学上网。
3:需要AOSP编译的环境。
4:编译内核后需要注意刷入ko和boot.img的顺序。
欢迎关注公众号:黄大官AOSP