Ubuntu 16.04(18.04) 编译安卓4.4.4_r1系统源码

编译安卓系统源码

编译环境: Nexus5 + Ubuntu16.04 64bit

在新安装的ubuntu 18.04 64bit下编译通过

一、下载安卓系统源码

国内可以通过清华镜像站 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 来下载

sudo apt-get install curl python git -y
git config --global user.email xxx #xxx是github邮箱
git config --global user.mame xxx  #xxx是github用户名
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
PATH=~/bin:$PATH
chmod a+x ~/bin/repo
#如果使用清华网址下载, 则修改repo文件, 将url改为:https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
mkdir android-4.4.4_r1 #创建工作目录
cd android-4.4.4_r1
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.4.4_r1  #清华网址
#repo init -u https://android.googlesource.com/platform/manifest -b android-4.4.4_r1  #谷歌网址
repo sync -j4 #或使用如下的脚本文件来持续下载
​
#!/bin/bash  
echo "======start repo sync======"  
        repo sync -j4
        while [ $? != 0 ]; do
        echo "======sync failed, re-sync again======"  
        sleep 2
        repo sync -j4
        done

 

二、获取驱动文件

1). 获取镜像文件编号 https://source.android.com/setup/build-numbers

2). 下载对应的硬件驱动文件 https://developers.google.com/android/drivers

Ubuntu 16.04(18.04) 编译安卓4.4.4_r1系统源码_第1张图片

3). 将驱动文件解压到andoird-4.4.4_r1源码根目录下,得到三个.sh脚本文件

Ubuntu 16.04(18.04) 编译安卓4.4.4_r1系统源码_第2张图片

4). sudo chmod u+x extract-*.sh 赋予3个脚本以可执行权限, 执行这三个脚本。

5). 执行成功后,会在andoird-4.4.4_r1源码的根目录下创建 vendor 文件夹,并将编译需要的驱动文件释放到 vendor 文件夹中。

Ubuntu 16.04(18.04) 编译安卓4.4.4_r1系统源码_第3张图片

 

三、准备编译环境

1). 安装编译工具

sudo gedit /etc/apt/sources.list
# 在sources.list末尾添加下面这行(用于安装mingw32),然后保存
deb http://us.archive.ubuntu.com/ubuntu trusty main universe
sudo apt-get update
​
sudo apt-get install -y git git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev 
sudo apt-get install -y lib32ncurses5-dev x11proto-core-dev libx11-dev 
sudo apt-get install -y lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown 
sudo apt-get install -y libxml2-utils xsltproc gcc-multilib lib32readline-gplv2-dev

 

2). 安装jdk1.6.0_45

下载地址 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html 或 链接: https://pan.baidu.com/s/1miVKUHq 密码: y26k

Ubuntu 16.04(18.04) 编译安卓4.4.4_r1系统源码_第4张图片

安装jdk1.60_45

sudo mkdir /usr/local/jdk #jdk的安装路径
sudo cp /home/youlor/Downloads/jdk-6u45-linux-x64.bin /usr/local/jdk
#其中/home/youlor/Downloads/jdk-6u45-linux-x64.bin为jdk1.60_45的二进制文件所在路径
cd /usr/local/jdk
sudo chmod +x jdk-6u45-linux-x64.bin
sudo ./jdk-6u45-linux-x64.bin
#安装成功后,配置环境变量
sudo gedit /etc/profile #打开配置文件将下面4行加入到末尾并保存退出
export JAVA_HOME=/usr/local/jdk/jdk1.6.0_45
export JRE_HOME=/usr/local/jdk/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

Log Out或重启后重新进入终端后输入java -version 显示 java version "1.6.0_45" 则说明jdk1.60_45安装成功

 

3). 降级安装make

由于ubuntu16.04自带make版本过高,无法编译。因此需要将make降至3.81或3.82版本

下载地址: ftp://ftp.gnu.org/gnu/make/

Ubuntu 16.04(18.04) 编译安卓4.4.4_r1系统源码_第5张图片

tar -zxvf make-3.82.tar.gz #解压
cd make-3.82 #进入make目录
./configure
make
sudo make install
#重新进入终端
make -v #查看make版本,看到GNU Make 3.82说明降级安装成功
​
#如果出现错误, 可以使用下面这个简单的办法: 从ubuntu官方下载make3.81套件
https://packages.ubuntu.com/trusty/amd64/make/download
# 下载后双击打开, 然后点击安装(install)即可

 

四、编译安卓系统源码

官方教程 https://source.android.com/setup/building

cd /home/youlor/android-4.4.4_r1 #/home/youlor/android-4.4.4_r1为源码路径
make clobber #清理
source build/envsetup.sh #配置环境
lunch #选择编译类型, 这里基于nexus5考虑, 选择aosp_hammerhead_eng或aosp_hammerhead-userdebug(建议选择eng), 参考官方文档 https://source.android.com/source/running.html
make -j4 #编译, 4为核心数
​
# 如果希望编译hammerhead的eng版本, 可以这么做
# 1. 进入到device/lge/hammerhead目录
# 2. 用gedit打开vendorsetup.sh文件,在最后添加一行 add_lunch_combo aosp_hammerhead-eng
# 3. 再次lunch就可以看到 aosp_hammerhead-eng 的编译类型

Ubuntu 16.04(18.04) 编译安卓4.4.4_r1系统源码_第6张图片

 

五、刷机

fastboot flashall -w -p /home/youlor/android-4.4.4_r1/out/target/product/hammerhead
# 其中/home/youlor/android-4.4.4_r1为源码路径, 需要注意的是ubuntu下可能无法识别手机设备, 需要的百度解决, 我这里用下面的方法
​
# 将out/target/product/hammerhead目录下的所有文件拷贝到windows下, 使用下面的命令刷入
adb reboot bootloader #重启到boot界面
set ANDROID_PRODUCT_OUT=xxx #xxx为编译后的路径, 在安卓源码目录下的out/target/product/hammerhead
fastboot flashall -w #刷入系统

 

六、编译内核

cd /home/youlor/android-4.4.4_r1 #/home/youlor/android-4.4.4_r1源码路径
git clone https://android.googlesource.com/kernel/msm #下载内核源码,参考https://source.android.com/setup/building-kernels#downloading-sources
​
# 配置环境变量
cd /home/youlor/android-4.4.4_r1 #/home/youlor/android-4.4.4_r1源码路径
export PATH=$(pwd)/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH
export ARCH=arm #指定目标体系架构
export CROSS_COMPILE=arm-eabi- #指定交叉编译器前缀(注意最后的'-')
cd kernel/msm
git checkout -b android-msm-hammerhead-3.4-kitkat-mr2  origin/android-msm-hammerhead-3.4-kitkat-mr2 #android-msm-hammerhead-3.4-kitkat-mr2通过git branch -r --contains d59db4e得到,其中d59db4e为从nexus5上看到的内核版本号
make hammerhead_defconfig
make -j4

 

64位系统编译时会出现错误,打开文件 kernel/asm/kernel/timeconst.pl 将373行的 if (!defined(@val)) 改为 if (!@val)) 即可

Ubuntu 16.04(18.04) 编译安卓4.4.4_r1系统源码_第7张图片

替换内核

cd /home/youlor/android-4.4.4_r1 #/home/youlor/android-4.4.4_r1源码路径
cd kernel
git clone https://github.com/pbatard/bootimg-tools.git
cd bootimg-tools
make
cd mkbootimg
cp /home/youlor/android-4.4.4_r1/out/target/product/hammerhead/boot.img . #拷贝boot.img
./unmkbootimg -i boot.img #解包, 会给出一个组包命令, 一会用于组包
cp /home/youlor/android-4.4.4_r1/kernel/msm/arch/arm/boot/zImage-dtb kernel #拷贝覆盖kernel
​
./mkbootimg --base 0 --pagesize 2048 --kernel_offset 0x00008000 --ramdisk_offset 0x02900000 --second_offset 0x00f00000 --tags_offset 0x02700000 --cmdline 'console=ttyHSL0,115200,n8 androidboot.hardware=hammerhead user_debug=31 maxcpus=2 msm_watchdog_v2.enable=1' --kernel kernel --ramdisk ramdisk.cpio.gz -o bootNew.img #执行解包时给出的组包命令
​
fastboot flash boot bootnew.img #重新刷入boot
fastboot reboot

 

你可能感兴趣的:(Ubuntu 16.04(18.04) 编译安卓4.4.4_r1系统源码)