文档章节

编译x86_64 android 7.1及goldfish内核

wuqingyi
 wuqingyi
发布于 2017/05/18 11:08
字数 963
阅读 685
收藏 0

编译Android系统的教程网上很多,之所以还要写这篇文章,是网上的教程基本都是针对arm,而且Android系统都是2.3,4.0等旧版本。本文要做到的是使用模拟器启动自己编译的x86_64架构android 7.1和goldfish。

我第一次编译的arm64的Android 7.1系统,编译完后可以直接在模拟器中运行,默认使用的内核在Android系统源码目录的prebuild/qemu-kernel中,是源码里自带的,并不是我编译出来的。如果想要进行Android内核方面的开发,需要自己编译内核。

当我准备编译goldfish内核的时候,根据网上的教程,却无法在goldfish的arch/arm64/configs目录下找到需要的goldfish_defconfig文件,有的教程说可以在Android系统启动的情况下,使用adb pull /proc/config.gz,解压得到deconfig文件,但是我启动系统之后,发现里面并没有这个压缩包。纠结之后,重新编译了Android系统源码,架构改为x86_64,但是结果还是一样,goldfish的arch/x86_64/configs里面的x86_64_defconfig完全没有效果,同样没有config.gz这个文件。

继续在网上扒资料,终于发现一篇不一样的文章:编译并测试 android goldfish kernel x86,但是文章使用的Android系统版本好像比较早,CROSS_COMPILE设置的路径我在Android7.1里面找不到,build-kernel.sh的路径同样没有。几乎就要放弃的时候,无意间在Android系统源码目录的prebuilts/qemu-kernel/目录中发现了build-kernel.sh文件。真是柳暗花明又一村啊。于是就有了下面的教程了。

一、编译Android系统

可以从Google或者中国科技大学和清华大学的镜像站下载,我是下载别人下的压缩包,里面没有.git文件夹,体积大大减小,只有4G多:http://pan.baidu.com/s/1o8PVK9O 缺点就是无法利用git切换其他版本。下载之后解压。

编译Android系统的教程网上很多,大家可以参考自己动手编译Android源码(超详细)这篇文章。

cd ~/Desktop/android-7.1.0_r1    #我存放Android系统源码的目录
source build/envsetup.sh
lunch aosp_x86_64-eng            #注意,我们编译的是x86_64的系统
make -j4
emulator

以后运行Android系统,只要使用下面的命令:

cd ~/Desktop/android-7.1.0_r1
source build/envsetup.sh
lunch aosp_x86_64-eng
emulator

二、编译goldfish内核

1、下载goldfish源码,我放在~/Desktop/goldfish中:

cd ~/Desktop
git clone git://mirrors.ustc.edu.cn/aosp/kernel/goldfish.git 

git clone 的时候会自动创建goldfish文件夹,因此不要先在桌面创建goldfish文件夹,再进入goldfish进行git clone命令。

2、运行Android系统,查看对应的内核版本

 

3.checkout相应的版本

cd ~/Desktop/goldfish
git branch -a   #查看版本
git checkout remotes/origin/android-goldfish-3.10-n-dev   #checkout

4.编译内核

cd ~/Desktop/goldfish
PATH=$PATH:/home/wuqingyi/Desktop/android-7.1.0_r1/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin
export ARCH=x86_64
export CROSS_COMPILE=x86_64-linux-android-
export REAL_CROSS_COMPILE=x86_64-linux-android-       #这个必须有,否则终端直接闪退。
/home/wuqingyi/Desktop/android-7.1.0_r1/prebuilts/qemu-kernel/build-kernel.sh --arch=x86_64

必须在goldfish内核源码的顶级目录运行上面的命令,我的为~/Desktop/goldfish。否则无法编译。

 

编译生成的内核放在/tmp/kernel-qemu/x86_64-3.10.0/kernel-qemu。运行Android系统,在emulator中加入参数,即可运行自己编译的内核了。

cd ~/Desktop/android-7.1.0_r1
source build/envsetup.sh
lunch aosp_x86_64-eng
emulator -kernel /tmp/kernel-qemu/x86_64-3.10.0/kernel-qemu

 

三、总结

本文最主要的是说明goldfish内核的编译,基本可以确定,上面编译x86_64 goldfish的步骤,同样可以用来编译arm64 goldfish,只需把相应的参数修改一下即可。但是模拟器在模拟x86_64的Android系统速度上,较arm有很大的提升。

 

© 著作权归作者所有

上一篇: VS Code创建C项目
wuqingyi
粉丝 0
博文 39
码字总数 19055
作品 0
厦门
程序员
私信 提问
Linux 3.9内核将会支持谷歌的Goldfish模拟器

Ingo Molnar已经为Linux 3.9内核提交了x86平台的pull request,开发正式从昨晚开始。Linux 3.9内核将会支持谷歌Android的“Goldfish”模拟器。 谷歌Android模拟器使用被称为“Goldfish”的虚...

xyxzfj
2013/02/21
2.9K
5
如何下载并编译Android 4.0内核源码Goldfish

下面进入正题: 第一步:下载goldfish源码 在Android源码根目录下新建kernel文件夹 $mkdir kernel $cd kernel 下载源码: $git clone http://android.googlesource.com/kernel/goldfish.git 下载...

andy521zhu
2014/05/09
0
0
android 模拟器用3.18的内核无法启动,一直黑屏

模拟器内核使用的是https://android.googlesource.com/kernel/goldfish.git android-goldfish-3.18-dev这个分支,模拟器系统是自己编译的android 6.0.1.然后启动的时候debug信息如下: emul...

duanguyuan
2016/06/04
1K
1
Ubuntu11.10下编译android内核源码

在之前的文章中,为读者介绍了《Ubuntu Linux下android源码下载方法》、《Ubuntu11.10下配置android的Eclipse开发环境》、配置过程中遇到的一些问题,以及《Ubuntu11.10下android源码4.0.3的...

Taskiller
2012/01/11
0
0
在Ubuntu上下载、编译和安装Android4.0.3 source与 kernel 源码

首先要注意的是:在进行环境变量的配置或者涉及到跟目录有关的操作时一定要注意你自己的目录是什么,你自己的android source放在哪个目录下,不要完全copy我的PATH的路径 。 说明:home/dell...

wangxigui
2012/11/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

0.01-Win10安装linux子系统

一、安装Debian子系统 -1、控制面板设置: -1.1、打开“控制面板” —— “程序” —— “启用或关闭Windows功能” —— 勾选 “适用于Linux的Windows子系统” -2、设置: -2.1、打开“设置”...

静以修身2025
昨天
1
0
init 0-6 (启动级别:init 0,1,2,3,4,5,6)

启动级别: init 0,1,2,3,4,5,6 这是个很久的知识点了,只是自己一直都迷迷糊糊的,今天在翻出来好好理解下。。 0: 停机 1:单用户形式,只root进行维护 2:多用户,不能使用net file system...

圣洁之子
昨天
2
0
Android Camera HAL浅析

1、Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信号,经过A/D(模数转...

天王盖地虎626
昨天
2
0
聊聊Elasticsearch的ProcessProbe

序 本文主要研究一下Elasticsearch的ProcessProbe ProcessProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/process/ProcessProbe.java public class ProcessProb......

go4it
昨天
2
0
mysql PL(procedure language)流程控制语句

在MySQL中,常见的过程式SQL语句可以用在存储体中。其中包括IF语句、CASE语句、LOOP语句、WHILE语句、ITERATE语句和LEAVE语句,它们可以进行流程控制。 IF语句相当于Java中的if()...else if(...

edison_kwok
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部