记录一下android整个代码的下载和编译过程

一、下载android源码

由于国内不能访问googlesource网站,所以下面所有的代码都需要借助清华开源镜像站下载。
首先创建一个android文件夹(可自定义)

mkdir android
cd android

然后执行下面的命令

curl https://storage.googleapis.com/git-repo-downloads/repo > ./repo
sudo chmod a+x repo

注:如果这个还没有安装curl工具,则需要通过apt安装

执行下面的命令来初始化仓库,因为需要下载android9所以在后面加-b android-9.0.0_r10来指定下载版本

./repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-9.0.0_r10

然后执行下面的命令就可以同步代码了

./repo sync

这里执行命令的时候出现了错误,看报错信息主要是repo文件里的https://gerrit.googlesource.com/git-repo地址不能够访问,需要在文件里把地址修改为https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/
然后再执行一次上述命令即可。

二、编译android

首先是java环境,网上很多说需要下载openjdk8,但是我编译来说源码里自带了jdk8jdk9,编译加载的jdk9。然后我机器上安装的有openjdk8,就导致JVM库的调用有问题,使得编译失败,对java不太熟悉,所以不太明白具体原因。最终是卸载干净机器上的java环境解决的。
此外还有一些相关库的依赖,也需要都安装,少了很有可能导致clang++在编译cpp的时候出错。(我这里坑了很久)

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache

编译主要通过下面三条命令执行,没有实际的机器运行,需要通过emulator来运行,所以lunch配置选择aosp_x86_64-eng

source ./build/envsetup.sh
lunch
# 选择6
make -j16

编译完成后,使用emulator来启动模拟器,这个命令是编译SDK生成的,我们上面是编译所有同时也把SDK编译成功了

emulator

然后我的机器上出现了错误,如下

liu@liu-MS-7C94:~/android$ emulator
emulator: WARNING: Couldn't find crash service executable /home/liu/android/prebuilts/android-emulator/linux-x86_64/emulator64-crash-serviceemulator: WARNING: system partition size adjusted to match image file (2562 MB > 800 MB)emulator: ERROR: x86_64 emulation currently requires hardware acceleration!
Please ensure KVM is properly installed and usable.
CPU acceleration status: This user doesn't have permissions to use KVM (/dev/kvm)

这里的错误信息很明显,没有权限使用(/dev/kvm)文件,赋给该文件对应权限即可。使用该功能需要BIOS开启虚拟化,如果不行可以先看看虚拟化是不是打开了,最终结果如下

然后需要adb连接虚拟机,进行相关的测试动作。使用源码中的adb程序即可

liu@liu-MS-7C94:~$ ./android/out/host/linux-x86/bin/adb shell
generic_x86_64:/ #

至此,android9的编译,启动,adb连接成功

三、下载android内核

我主要工作还是研究驱动,内核。所以还需要替换下载内核代码来研究
谷歌提供一个goldfish的内核代码用来适配模拟器平台,所以我们就拉这个代码,同样把地址换成清华大学镜像地址

git clone http://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git

然后通过adb查看一下刚刚运行成功的android9使用的内核版本

liu@liu-MS-7C94:~$ ./android/out/host/linux-x86/bin/adb shell
generic_x86_64:/ # cat pro
proc/     product/
generic_x86_64:/ # cat proc/version
Linux version 4.4.124+ (android-build@wprf1.hot.corp.google.com) (gcc version 4.9.x 20150123 (prerelease) (GCC) ) #1 SMP PREEMPT Thu Aug 16 04:59:43 UTC 2018
generic_x86_64:/ #

可以看到使用的是4.4的版本,拉下来的代码里面只有android-goldfish-4.4-dev,所以切换到该分支上开发

git checkout android-goldfish-4.4-dev

四、编译内核

编译主要两个参数,ARCH表示芯片的体系架构,CROSS_COMPILE指定使用的编译器
上面的android采用的是x86_64架构,所以编译内核时也采用x86_64架构。采用配置为x86_64_ranchu_defconfig,为什么不采用x86_64_defconfig的配置呢,因为编译后加载发现kernel会卡在wait /dev/sda1这里,使得进入不了android系统。所以采用x86_64_ranchu_defconfig配置
编译命令如下:

# 因为这里编译x86平台,就没有指定编译器,默认使用机器上的gcc
make ARCH=x86 x86_64_ranchu_defconfig
make ARCH=x86 -j8

编译成功后,在arch/x86/boot/下生成bzImage文件,然后使用emulator启动内核文件

# 后面的-show-kernel是将kernel的log输出出来,可以方便debug
emulator -kernel goldfish/arch/x86/boot/bzImage -show-kernel

到此,内核镜像的替换也成功了!

[记录] android源码下载编译相关推荐

  1. android 源码下载编译

    引用:http://www.2cto.com/kf/201202/121175.html 最新的android4.0源代码公布以后,相信很多人和我一样都跃跃欲试,其实4.0的代码下载和编译和以前的版本 ...

  2. linux编译android源码,ubuntu16.04 Android源码下载编译

    本次编译源码的电脑为Ubuntu 16.04,4核 + 4G内存. 注. 对于电脑配置低的建议不要编译7.0以上的版本,就像我这台电脑,基本编译7.0以上都会报内存不足问题,因为在7.0版以上andr ...

  3. android源码下载,编译及编译时遇到的错误整理

    一.环境搭建 因为android的源码编译只支持linux和mac,所以无法在windows下编译.我的电脑也没有双系统,因此只有装一个虚拟机.我用的是VMware workstation 我放到了百 ...

  4. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:http://item.jd.com/12212640.html 试读地址:http:/ ...

  5. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译...

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:item.jd.com/12212640.ht- 试读地址:www.epubit.com ...

  6. VLC for Android源码下载和编译

    Project Hosting on 点击打开链接 最受欢迎的开源项目 点击打开链接 由Android的核心开发团队提供了15个优秀的示例项 目,包含了游戏.图像处理.时间显示.开始菜单快捷方式等. ...

  7. Android AOSP和Android-X86源码下载编译终极普法

        Android AOSP和Android-X86源码下载编译终极普法 引言   最近有朋友在询问怎么下载Android AOSP源码和Android-X86源码,编译学习!其实这个说简单也简单 ...

  8. android 清华镜像,清华镜像网站下载android源码并编译

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 下载android源码方法: 我的系统是ubuntu 18.04,主要参考了blog通过清华大学镜像下载Android源 ...

  9. android源码下载以及编译自己的ROM

    android源码下载以及编译自己的ROM 最近发现kernel.org被墙了,为什么这种网站也能被墙了? 要想下载源码的话,只能绕过去了.下面是我从网上搜索到的一些下载方法: =========== ...

最新文章

  1. 测序技术有4个指标:读长、成本、准确度、通量
  2. 网站描述怎么写?对网站优化有什么作用?
  3. 在 Shell 脚本中执行语法检查调试模式
  4. go interface{}类型转换
  5. 如何使用nodejs代码在新浪微博上发布帖子
  6. SQL行列转换问题整理
  7. 长的帅不是你的错,长的没特点就不应该了
  8. Airflow 中文文档:用Celery扩大规模
  9. 【目标检测】IoU、GIoU、DIoU、CIoU Loss详解及代码实现
  10. 云原生的本质_什么是云原生?云原生和传统软件有什么区别?有什么特征
  11. Windows Phone本地数据库(SQLCE):13、更新数据(翻译)
  12. arduino超声波测距接线图详细_Arduino超声波测距模块使用
  13. 正则表达式-入门资料
  14. 3dmax2017卸载/安装失败/如何彻底卸载清除干净3dmax2017注册表和文件的方法
  15. 类案检索功能优化建议(一)——开发路径辨析
  16. 主观唯心、客观唯心、朴素唯物、历史唯物、辩证唯物主义的内涵、区别和联系
  17. 路由器当交换机用,应该怎样配置?
  18. 在精不在多,3 分钟看 3 个 JS 小把戏
  19. python3 onvif协议 摄像头控制
  20. 关于阿里云服务器可以怎么选择地域

热门文章

  1. zabbix连接mysql_zabbix的简单操作(监控客户端MySQL数据包库)
  2. 颜值爆表!Redis 官方客户端工具,功能强大,且支持可视化监控!
  3. autocad2014点击保存闪退_AutoCAD2014闪退的原因和解决方法 一打开就闪退怎么办
  4. 如何用自己电脑架设服务器!自助建站将不再是梦想
  5. 电子设计中常用的运放电路
  6. 设计一个猜拳游戏,完成人机猜拳互动游戏的开发。
  7. 机器学习------L1、L2规范化(L1 Regularization、L1 Regularization)
  8. Dell服务器组建阵列-Raid(无阵列卡)
  9. base64编码类------源代码(C#)
  10. oracle cosh 函数,oracle cosh exp floor in log等函数