如何在macOS上编译android kernel golfdish?

目录

环境准备

开始编译


linux kernel已经编译过很多次了,在macOS上有一些坑要踩,再整理一下,就有了这篇水文。

环境准备

    由于macOS的磁盘文件系统默认不区分大小写,因此编译源码最好在ubuntu上进行,或者在macOS上创建一块case-sensitive的磁盘+docker编译。本文主要记录一下方法二。       

    磁盘创建方式:磁盘工具->分区->创建加密的大小写敏感的磁盘->输入密码->完成。 创建成功后,新磁盘和原来的磁盘共享剩余的空间,路径为/Volumes/APFS-case-sensitive,可以把源码放到这里。

    之后创建一个ubuntu docker并映射一下文件,编译环境就搞定了。

开始编译

      编译参考官方文档:https://source.android.com/setup/build/building-kernels

1. 下载kernel

选择需要clone的版本。通常选择msm或者goldfish。具体手机型号和kenrel版本对应关系参考官方文档,选择kernel一小节。

    msm 项目包含适用于 ADP1、ADP2、Nexus One、Nexus 4、Nexus 5、Nexus 6、Nexus 5X、Nexus 6P、Nexus 7 (2013)、Pixel 和 Pixel XL 的源代码,可用作在 Qualcomm MSM 芯片组上开展相关工作的着手点。
    goldfish 项目包含适用于所模拟的平台的内核源代码。

    下载地址:https://android.googlesource.com/kernel
    下载时可以使用tsinghua镜像源,https://android.googlesource.com/ 全部使用 https://aosp.tuna.tsinghua.edu.cn/ 代替即可。

#下载源代码
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish/

# 切换分支
git checkout remotes/origin/android-goldfish-4.4-dev

      由于替换kernel会导致系统不稳定,因此切换branch的kernel version和原来的version最好一致。原始kernel:

2. 下载交叉编译工具链
    下载地址:https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/

git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9
export PATH=<dir>/x86_64-linux-android-4.9/bin/:$PATH

# 可选
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/

export PATH=<dir>/aarch64-linux-android-4.9/bin/:$PATH

3. 开始编译

编译时交叉工具链、arch、make config配置的选择很重要。推荐参考虚拟机中的kernel文件再进行配置。

android studio中创建avd后,img保存的路径在<SDK>/system-images/android-28/google_apis/x86中。这里很神奇的是,pixel2虚拟机的CPU在AVD manager中是x86的,但是img路径中kernel却是kernel-ranchu-64。因此,编译kernel时的ARCH需要选择x86_64。

make时的config配置在kernel源码的arch/x86/configs中,这里选择x86_64_ranchu_defconfig。和x86_64_defconfig的区别暂未深究。

交叉编译工具链选择export CROSS_COMPILE=,选择另一个会报错。

编译时可能会缺少部分文件,google一下安装即可。

# 用android vitrual machine 默认创建的android arch都是x86的,据说x86比x86_64要快,未验证
#export ARCH=x86
export ARCH=x86_64

export CROSS_COMPILE=x86_64-linux-android-
# export CROSS_COMPILE=aarch64-linux-android-

make x86_64_ranchu_defconfig
# 根据cpu number选择,一般是一倍到两倍之间
make -j10 

4. 编译完成

5. 运行

使用sdk的tools中的emulator模拟器来启动android virtual machine,替换kernel为编译好的kernel。
如果出现PANIC: Missing emulator engine program for 'x86' CPU.错误,请用sdk/emulator下的emulator来启动。

$ ./emulator -list-avds
Nexus_5X_API_19_-_change_system.img_dex2oat
Pixel_2_API_25
Pixel_2_API_27
Pixel_2_API_28
$ ./emulator -avd Pixel_2_API_28 -kernel <PATH>/goldfish/arch/x86/boot/bzImage

替换kernel后:

如果遇到最后输出clocksource: Switched to clocksource tsc就停了的状态,可能是由于arch不对导致的。

PS:折腾了半天,各种google,最后发现goldfish目录下写好了build配置. 0.0

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值