Android系统源码下载及编译流程
Android系统源码下载及编译流程
- 1.准备工作
- 2.Android源码下载
- 3.Android编译环境搭建
- 4.Android系统编译
- 5.Android内核模块编译
- Android 由四个层组成:
- Linux 内核(c/c++)
- 本地用户空间native (c/c++)
- 应用程序框架层
- 应用程序层(java)
老师说她一般在kernel、native、framework层进行代码安全加固。
- 选择Android4.4,4.4系统优化较4.0,2.3明显,且不算太大;20G,6.0的大约60G
- 环境:
- ①安装虚拟机Ubuntu16.04编译快
4G运存,CPU 4核心,80G硬盘(最后占50G) - ②安装samba文件服务器,进行文件传输
- ①安装虚拟机Ubuntu16.04编译快
两种方式:
- repo工具(批处理工具,一次下载多个git仓库)
- ①.安装repo:
mkdir ~/bin
PATH=~/bin:$PATH
下载repo脚本:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
设置repo可执行权限:
chmod a+x ~/bin/repo - ②.初始化repo客户端
创建AndroidCode目录用来存放源码:
mkdir AndroidCode
cd AndroidCode
运行repo下载源码:
repo init -u https://android.googlesource.com/platform/manifest -b android-4.4_r1
repo sync
据说20个G,提供更新.repo文件占10个g,我们暂时用不到,所以采用第二种,并让同学帮我分担了一部分流量~
- ①.安装repo:
3.搭建Android编译环境:
安装一系列工具、依赖:
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-
安装jdk:
Android4.4的源码编译所使用的jdk为oracle jdk1.6。jdk一定要安装1.6的最高版本,即jdk1.6.0_45,否则编译中会报错- 具体过程:
在/usr/loacl目录下创建jvm文件夹用来存放jdk:mkdir /usr/local/jvm
复制到/usr/local/jvm中:cp jdk-6u45-linux-x64.bin /usr/local/jvm
进入到/usr/local/jvm下,给.bin文件一个可执行权限
chmod +x jdk-6u45-linux-x64.bin
执行.bin文件进行安装:./jdk-6u45-linux-x64.bin
安装成功后设置环境变量,打开/etc/profile,添加如下几行后保存export JAVA_HOME=/usr/local/java/jdk1.6.0_45
export JRE_HOME=/usr/local/java/jdk1.6.0_45/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
source /etc/profile后,输入java -version,显示java version “1.6.0_45”则成功
- 具体过程:
4.编译Android源码
- 环境初始化:
~.bashrc文件末尾追加export USE_CCACHE = 1(加速编译 )
echo export USE_CCACHE=1 >> ~/.bashrc
source ~/.bashrc
导入编译Android源码所需的环境变量和其他参数:
source build/envsetup.sh
最后: make –j4(开启四线程编译)
CPU满负荷运行,3个多小时后,系统镜像文件 system.img、ramdisk.img和userdata.img
5. Android内核模块编译
- 在/usr/local/android/kernel/goldfish/drivers/char/my_test/下,gedit hello.c
- 在my_test下,gedit makefile//编译hello.c
内容:obj-y := hello.o //内建编译,还有个obj-m表示模块编译,没时间实现了~ - 在../char下,gedit Makefile //包含hello驱动
加入:obj-y += my_test/hello.o - 重新编译,将hello驱动设备编译到内核中;
make –j4 - 启动后查看内核状态:
emulator –kernel zImage –show-kernel &