首页
社区
课程
招聘
[原创]2022记录一次编译aosp并刷机n5x
2022-8-7 23:02 9762

[原创]2022记录一次编译aosp并刷机n5x

2022-8-7 23:02
9762

说明

菜鸡尝试编译aosp源码,手中有一台n5x,专门用来折腾。之前刷了fart镜像,好奇制作过程,所以自己来捣鼓一下。原先想用r0env编译,有个依赖过不去(太菜了)还是自己搞个虚拟机吧*。*,把坑又踩了一遍。

编译环境

虚拟机
虚拟机这里选择vmware16 pro,破解版请自行查找
图片描述

 

iso
iso这里选择ubuntu20,因为ubuntu的镜像小。试过centos7结果操作过程崩了T。T
镜像下载:ubuntu阿里开源镜像站

# 镜像md5
ca0c7f1cf362eef25f54f6cd61c5fdba *ubuntu-20.04.4-desktop-amd64.iso

 

Ubuntu配置如下,内存可开到12G,10G可以编译但还会有卡顿,并且安装过程中请立即分配磁盘,避免后面磁盘大小问题:
图片描述

编译步骤

  1. 安装jdk,加入环境
    1
    2
    3
    4
    5
    6
    7
    apt-get install openjdk-8-jdk
    # 加入环境变量
    vim ~/.bashrc
    #在文件末尾加入
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64  #根据你自身的路径修改
    export PATH=$JAVA_HOME/bin:$PATH
    source ~/.bashrc
  2. 安装依赖, 提示没有python,就apt install python

    1
    apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
  3. 下载 repo 工具

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 清华源
    mkdir ~/bin
    PATH=~/bin:$PATH
    curl https://aosp.tuna.tsinghua.edu.cn/git-repo-downloads/repo > ~/bin/repo
    chmod a+x ~/bin/repo
    # 加入环境变量
    vim ~/.bashrc
    在文件末尾加入
    export PATH=~/bin:$PATH
    source ~/.bashrc
  4. 选择磁盘空间大的建立源码下载文件夹,如果磁盘不够请自行扩展磁盘和挂载文件夹
    图片描述
    图片描述

    1
    2
    mkdir -p data/aosp/android-8.1.0_r20
    cd data/asop/android-8.1.0_r20
  5. 初始化git,repo;初始化repo中应查询清楚编译出来的镜像是否适配手中的手机
    细分版本号查询
    图片描述

    1
    2
    3
    4
    5
    6
    # 初始化git
    git config --global user.name "***"
    git config --global user.email "you@example.com"
    # android8 中科大源,清华源可能会失败
    export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
    repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-8.1.0_r20
  6. 下载源码, 过程很长,请耐性等待

    1
    2
    3
    repo sync -j1
    # 或则
    repo sync --current-branch
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # 可能会中断,整个shell脚本执行
    fn_repo_sync()
    {
     repo sync -j8 2>&1 | tee sync_log.txt
    }
    fn_get_source_code()
    {
     echo "fn_get_source_code:$(pwd)"
     fn_repo_sync
     FETCH_ERROR=`grep -i "error: Exited sync" -A 1  sync_log.txt`
     echo  "${FETCH_ERROR}"
     while [ -n "${FETCH_ERROR}" ]
     do
         echo "Need to pull the code again"
         fn_repo_sync
         FETCH_ERROR=`grep -i "error: Exited sync" -A 1  sync_log.txt`
     done
     echo "leave begin download source"
     #repo start ${DATE_TIME} --all
    }
    fn_get_source_code
  7. 下载驱动

    1. 下载源码对应版本驱动并解压放入源码根目录:驱动下载
      图片描述
      图片描述

    2. 依次执行刚解压的shell文件(别enter的太急),每个文件执行都需要在最后输入 “I AGREE”,所以谨慎enter(坑人)。

      • 下载源码后并执行完成驱动文件后的项目根目录:
        图片描述
    3. make clobber:删除所有以前编译操作的已有输出,如果编译过单项重新编译就执行这条命令

  8. 编译
    选择设备编译系统:查询设备编译系统
    图片描述

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 导入环境变量
    source build/envsetup.sh
    # 选择设备编译系统
    lunch aosp_hammerhead-userdebug
    # 去除可能问题
    export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
    export LC_ALL=C
    ulimit -c unlimited     # 去除core文件大小限制
    # 开始编译,时间很长耐心等待
    make -j8
  9. 编译完成

    • 编译完成后的镜像在out文件夹下
      图片描述

刷机

  1. 配置镜像环境变量

    1
    export ANDROID_PRODUCT_OUT=/root/data/android-8.1.0_r20/out/target/product/bullhead
  2. 进入fastboot模式

    1
    adb fastboot bootloader

    图片描述

  3. 开始刷机
    如果遇到这个错误“error: Cannot generate image for userdata”,请删除 -w执行

    1
    fastboot -w flashall
  4. 刷机结束,等待手机重启
    图片描述
    图片描述

遇见问题

  • 编译步骤中出现错误最多的可能在下载源码和编译过程中
    1. 下载源码的错误多为源的问题,选择国内源即可
    2. 编译过程中的错误多为环境和版本的问题。环境依赖需要安装齐全,并且查漏补缺把环境补全;并且手机型号,源码,驱动以及设备编译系统都要一致,不可错乱,以免变砖=。=
  • 在刷机中的问题一般比较简单,一般把oem锁打开刷机即可成功,如有问题可自行搜索

小结

这次编译本想周末搞完,没想到搞了一个礼拜(踩坑*N),中间还差点手机变砖T。T到总算编译刷机成功。对于fart镜像将相应的代码替换源码编译应该就可以了(还没试)。关于过root检测等系统级别的操作在 编译步骤-8 之前做出修改再编译也应是同理。在网上也有其他编译的文章,但多多少少都有点出入,写完这篇文章,根据步骤自己是可以编译和刷机成功的,但如果还有出入,需自行甄别实现。(手机变砖概不负责)
加油,少年。。。

相关文章


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2022-8-9 22:53 被andyhah编辑 ,原因: 文中一处版本号对应问题
收藏
点赞5
打赏
分享
最新回复 (5)
雪    币: 774
活跃值: (772)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leehero 2022-8-30 14:42
2
0
现在不用VMware,用windows子系统编译也挺方便的。
雪    币: 981
活跃值: (424)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
andyhah 2022-9-2 16:10
3
0

.

最后于 2022-9-2 16:11 被andyhah编辑 ,原因:
雪    币: 981
活跃值: (424)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
andyhah 2022-9-2 16:12
4
0
leehero 现在不用VMware,用windows子系统编译也挺方便的。
我怕崩,VM用的方便
雪    币: 172
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
liukuo362573 2022-10-19 20:40
5
0
厉害呀
雪    币: 1431
活跃值: (1096)
能力值: ( LV3,RANK:23 )
在线值:
发帖
回帖
粉丝
Black貓①呺 2024-1-20 09:45
6
0
编译源码,几个需要patch的点知道在哪里吗,比如设置prop.default
游客
登录 | 注册 方可回帖
返回