这篇博客主要记录下利用Android模拟器,在Android7.1.1系统下换goldfish3.10-n-dev
核的过程,在此之前参考了网上大大小小的换核教程,没有那种一次性走到头的,可能是时间太久,多多少少都有点bug。所以打算整理下,如果您按照此过程有啥bug,欢迎交流~
其他系统、内核换的过程大同小异。SDK的安装这里推荐用Android studio下载,因为AS可以更好的管理SDK的更换,以及模拟器的选择等。
先说下我的配置。
实体机系统:Win10 64位
虚拟机系统:Ubuntu18.04 64位
目标android版本:Android7.1.1 x86_64
待移植内核版本:android-goldfish-3.10-n-dev
本来想本着简单的风格记录下,但是换位思考后觉得还是在中间加了很多图,所以导致篇幅太长。见谅-_-
由于源码还不小,再加上需要在虚拟机里编译源码,所以尽可能的给虚拟机高点配置,这里建议硬盘100G+,内存4G+,处理器4c+
由于要用到虚拟机,难免会用到KVM.
Virtual Technology
功能,这里注意,由于BIOS不同,有的主板对这个功能的命名不同,比如我的技嘉主板命名为SVM Mode
,保证在Ubuntu里kvm测试通过,如下
wz@ubuntu:~$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
保证git提前配置好,这里就略过去了。直接在官方源或者镜像源pull即可。(自选其一)(废话:建议把关于android的源码、linux源码、等放到一个文件里)
# 官方源(自备梯子)
git clone https://android.googlesource.com/kernel/goldfish.git
# 镜像源 (中科大)
git clone git://mirrors.ustc.edu.cn/aosp/kernel/goldfish.git
# 镜像源 (清华)
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
下载后,在goldfish文件夹里checkout到指定分支,如下
cd ~/Desktop/goldfish
# 查看所有分支
git branch -a
# 切换到指定分支
git checkout remotes/origin/android-goldfish-3.10-n-dev
由于我们用的x86_64交叉编译的工具,这里提供了gitee的repo,这里多说一句,由于需要拉的东西很大,很多官方的源拉资源很慢,所以推荐国内的gitee,遇到大的项目,gitee是个不错之选。
# prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9
git clone https://gitee.com/wangzhe8889/prebuilts_gcc_linux-x86_x86_x86_64-linux-android-4.9.git
这里说些废话,由于我一开始想用arm的内核,但是后来移植内核时模拟器一直黑屏,所以才换了x64,所以当时也找了关于arm的交叉编译工具,这里也分享下。仅供参考。(想移植x86_64直接无视就好^_^)
# prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9
git clone https://gitee.com/wangzhe8889/prebuilts_gcc_linux-x86_aarch64_aarch64-linux-android-4.9.git
# prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9
git clone https://gitee.com/wangzhe8889/prebuilts_gcc_linux-x86_arm_arm-linux-androideabi-4.9.git
下载好后配置变量
# 记事本打开~/.bashrc文件
sudo gedit ~/.bashrc
# 末尾添加
# 这里路径换成你的
export PATH=/home/wz/Desktop/new/prebuilts_gcc_linux-x86_x86_x86_64-linux-android-4.9/bin:$PATH
export ARCH=x86_64
export CROSS_COMPILE=x86_64-linux-android-
export REAL_CROSS_COMPILE=x86_64-linux-android-
# 使能下bash
source ~/.bashrc
直接去官网下载即可 ,这里建议直接在VMware虚拟机里打开下载,这样自动识别系统,下载即可。
本地解压后,进入android-studio/bin/
目录执行./studio.h
即可启动AS
打开后在configure
里找到AVD Manager
和SDK Manager
,如下图
首先说SDK的配置,其实看着下载就行,我也是随便下的,因为硬盘空间大,我就都下了,参考我画框的。
再就是AVD的配置了,新建一个安卓虚拟机,随便选一个外观,主要是System Image的选择(见下图),然后记得最后一步的时候在进阶(Advanced)设置中选择冷启动(cold),保证每次都开机清空上次的状态,如果不勾选,可能导致换核失败,表现为换核后还是之前的核(亲测)
建好之后就可以自己试着启动下,然后通过adb记录下当前的内核,或者眼瞅法(在setting里看属性)。建议这里记录下,以检查是否换核成功。
adb命令如下:
# 保证虚拟机启动
adb shell
cat /proc/version
老样子,还得先配置下环境变量
# 记事本打开~/.bashrc文件
sudo gedit ~/.bashrc
# 末尾添加
# 这里SDK路径换成你的
export ANDROID_HOME=/home/wz/Desktop/Android/Sdk
export PATH=$ANDROID_HOME/emulator:$PATH
# 修改后使能下bash
source ~/.bashrc
虽然不知道有啥用,看着别人都配置,也就跟着了,不知道不配置是不是也可以,有缘人可以试下,哈哈
sudo apt-get install openjdk-8-jdk
# 查看java版本
java -version
编译内核就很简单了,你会发现前戏几小时,正片几分钟完事。
保证以下命令在你goldfish文件夹内运行。路径根据自己的对应修改
# 指定到输出路径,方便查看,保证文件夹存在
make ARCH=x86_64 O=../out_7_1 x86_64_ranchu_defconfig
# make 线程的选择看你自己
make ARCH=x86_64 O=../out_7_1/ -j64
# 先保证 可以命令行启动
emulator -avd Android7_1_1
# 指定内核,搞定,注意路径
emulator -avd Android7_1_1 -kernel /home/wz/Desktop/new/out_7_1/arch/x86/boot/bzImage
启动后,adb查看内核版本
成功换核后用户会变成Ubuntu用户名称如下:
generic_x86_64:/ $ cat proc/version
Linux version 3.10.0+ (wz@ubuntu) (gcc version 4.9 20140827 (prerelease) (GCC) ) #3 SMP PREEMPT Sun Aug 23 13:04:59 PDT 2020
就酱,芜湖~
成功的就麻烦点个赞吧,失败的bug贴出来,讨论一波~