一,安装VMware Workstation,百度网盘下载(内含注册机)
链接: https://pan.baidu.com/s/1wz4hdNQBikTvyUMNokSVYg 提取码: yed7
VMware Workstation 15 Pro 永久激活密钥 下载
https://blog.youkuaiyun.com/felix__h/article/details/82853501
二,创建新的虚拟机
三,下载Ubuntu系统镜像,配置虚机的CD/DVD路径为当前下载的ubuntu-16.04.6-desktop-amd64.iso系统镜像文件路径。
ubuntu16.04下载地址:
中科大源
http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/
阿里云开源镜像站
http://mirrors.aliyun.com/ubuntu-releases/16.04/
兰州大学开源镜像站
http://mirror.lzu.edu.cn/ubuntu-releases/16.04/
北京理工大学开源
http://mirror.bit.edu.cn/ubuntu-releases/16.04/
浙江大学
http://mirrors.zju.edu.cn/ubuntu-releases/16.04/
四,启动虚拟机,安装Ubuntu系统
启动过程中,VMware提示此主机支持Intel VT-x,但Intel VT-x处于禁用状态,解决方式:
Intel VT-x完整名称是Intel Virtualization Technology,就是Intel虚拟技术,开启它可以让硬件平台同时运行多个操作系统,是虚拟机软件运行必备的技术之一,如果禁用,就会弹出“此主机支持Intel VT-x,但Intel VT-x处于禁用状态”这个提示,解决办法就是进BIOS开启Intel Virtualization Technology。
五,设置Windows与Ubuntu系统间的共享文件夹目录
六,下载android-6.0.1_r72源码压缩包,将下载好的Android源码压缩包android-6.0.1_r72.7z放置共享目录。
android-6.0.1_r72版本源码下载链接:
https://pan.baidu.com/s/1skEVR1F 密码: ik6t
七,安装7z解压缩工具,将android-6.0.1_r72.7z压缩包解压至当前目录。
sudo apt-get install p7zip
解压:
7za x android-6.0.1_r72.7z -r -o./
八,配置系统编译环境
(1) 安装open JDK7
Android 6.0只能使用OpenJDK7才能编译成功,具体原因读者查资料,这里不在解说。
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk
打开/etc/profile文件,配置OpenJDK:
sudo gedit /etc/profile
在末尾追加下面代码:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
修改完/etc/profile文件需要重启才能生效,但在不重启的情况下,使用下面命令可以使当前bash环境生效:
source /etc/profile
检查OpenJDK:
java -version
java version “1.7.0_95”
OpenJDK Runtime Environment (IcedTea 2.6.4) (7u95-2.6.4-3)
OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)
(2) 修改源码
修改源码/android-6.0.1/art/build/Android.common_build.mk文件,定位到75行,将下面的代码
ifneq ($(WITHOUT_HOST_CLANG),true)
改成:
ifeq ($(WITHOUT_HOST_CLANG),false)
若不修改这里,编译源码的时候会出现错误,修改的目的是为了把CLANG这个编译选项关掉,不会影响源码编译。
(3) 安装依赖
更换软件源为阿里云
为了更快的安装软件,我们需要更换软件源为国内的软件源,这里推荐使用Ubuntu官方指定的国内软件源阿里云,博主之前使用的是网易的软件源,结果发现OpenJDK7装不上去,于是换成了阿里的,具体方法是:
sudo gedit /etc/apt/sources.list
在文件最前面加入下面代码:
deb http://mirrors.aliyun.com/ubuntu/ quantal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ quantal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ quantal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ quantal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ quantal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal-backports main restricted universe multiverse
这是编译源码前的最后一步,也是做重要的一步,若不安装依赖,在编译过程中会出现源码编译错误的现象。
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g+±multilib
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 lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
Ubuntu 16.04请务必使用上面的依赖,Ubuntu 16.04需要的依赖和Ubuntu 14.04所需要的依赖是不同的,照着Ubuntu 14.04的依赖结果掉进大坑
九,开始编译
(1) 在 .bashrc文件末尾添加:export USE_CCACHE = 1
echo export USE_CCACHE=1 >> ~/.bashrc
(2) 提高编译效率,设置编译器高速缓存:
prebuilts/misc/linux-x86/ccache/ccache -M 50G
(3) 导入编译Android源码所需的环境变量和其它参数:
source build/envsetup.sh
(4) 运行lunch命令选择编译目标: 选择5
(5) 开始编译
make -j8
make -jN来设置参与编译的线程数量,一般来说设置为cpu核心数的两倍,N是cpu核心数。
查看cpu个数,可以用下面命令:
cat /proc/cpuinfo
问题:make: *** wait: 没有子进程。 停止。
尝试1:降低make版本,将make 4.1版本降低为make 3.81版本
https://blog.youkuaiyun.com/daoliting5268/article/details/84503064
make下载地址:
https://ftp.gnu.org/gnu/make/
make -version
GNU Make 3.81
Copyright © 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
(6) 编译成功
进入/android-6.0.1/out/target/product/generic_x86目录,可以看到编译好的文件:
十,编译SDK,启动模拟器:
emulator
问题:emulator:未找到命令
解决:需要将sdk编译一遍,就可以直接执行emulator 命令,也不用带 -kernel参数 --sysdir -system -data -ramdisk 等几个参数。
source ./build/envsetup.sh
lunch sdk-eng
make sdk
在/out/host/linux-x86/sdk/sdk 目录下就可以看到编译好的SDK
再次emulator,稍等几分钟,就可以出现模拟器画面了
十一,下载、编译 kernel
(1)下载kernel
下载下来的Android源代码,是不包括linux kernel内核代码的,是使用的谷歌工程师们预先编译好的内核(在prebuilts/qemu-kernel文件中),它们是两个部分。下载下来是为了方便查看里面的内核结构。
是用的3.4版本的内核,因此自己也要下载Android源码系统对应的内核版本。
在android根目录下创建kernel文件夹
mkdir kernel
cd kernel
下载kernel源码,初始化仓库:
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
会自动创建一个goldfish目录,进入goldfish目录:
cd goldfish
查看所有分支:
git branch -a
切换到android-goldfish-3.4分支
git checkout -b android-goldfish-3.4 origin/android-goldfish-3.4
现在kernel源码就下载到goldfish目录下了。
(2)编译内核源码
在下载好的Android系统源码目录中新建kernel文件夹,把goldfish复制到kernel文件夹下。
修改goldfish目录下makefile文件配置:
sudo gedit Makefile
定位大约第195行:
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
更改为
ARCH ?= arm
CROSS_COMPILE ?= arm-eabi-
进入goldfish目录,配置环境变量:
export PATH=$PATH:~/rwShare/android-6.0.1_r72/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin
编译:
make goldfish_armv7_defconfig
最后执行:
make
返回Android系统源码目录,运行模拟器:
source build/envsetup.sh
lunch sdk-eng
emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage & //从内核文件启动模拟器
分析的此次,VMware虚拟机下载安装,Ubuntu16.04系统下载安装,Android系统源码下载、源码编译、SDK编译、内核编译就结束了。接下来,就开始该读者分析源码、解读源码、修改源码了。