AOSP 源码编译android 12

目录

一、python安装 

    a. python2安装

    b. python3安装

二、repo管理多个git

   a.第一步,   新建一个空白文件夹保存repo引导文件,并包含你的路径

   b.下载启动器

 c.将git-repo中的repo文件复制到 1 创建的.bin目录中

 d.修改权限

e. 执行版本检查

三、初始化工程

  a.执行创建文件夹命令,创建android12文件夹

  b.切换到android12目录下

   c.初始化android12

d.同步下载android源代码 j4代表的是4个线程

四、准备编译环境

    a. 安装 jdk8

   b.安装依赖包

五、下载内核源码

a.与下载AOSP源码类似,需要先建立文件夹 

 b.使用清华的镜像

 c.完成后kernel目录中会生成一个goldfish文件夹,进入goldfish目录并使用git命令

 六、交换空间

方法一

方法二

七、编译

 a.初始化环境

  b. 选择编译目标

 c.Which would you like?


一、python安装 

    a. python2安装

     sudo  apt-get install python 

    b. python3安装

     sudo  apt-get install python3

二、repo管理多个git

   repo因为Android源码由多个git组成,故安装repo利于管理git工程.

    repo安装步骤

   a.第一步,   新建一个空白文件夹保存repo引导文件,并包含你的路径

  mkdir ~/binPATH=~/bin:$PATH    //配置环境变量

   b.下载启动器

   注意

   如果提示 curl: command not found ,那是因为没装 Curl

   执行 :sudo  apt-get install curl -y

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
或
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repochmod a+x ~/bin/repo

我采用的是另外一种方法

 首先

sudo snap install git-repo

其次

git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo下载repogit clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo

 c.将git-repo中的repo文件复制到 1 创建的.bin目录中

cd git-repo/
cp repo ~/bin/

 d.修改权限

chmod a+x ~/bin/repo

e. 执行版本检查

repo -version 如果报错File "/bin/repo", line 51def print(self, *args, **kwargs):^SyntaxError: invalid syntax

发现是python链接的不对,我的ubuntu装了两个版本的python,分别是python2.7和python3.8,输入python后提示是python2.7,因为python软链接到python2上面了:

     /usr/bin/python
    -> /usr/bin/python2*

repo需要的是python3,所以需要修改一下上面的软链接:   

sudo rm /usr/bin/python
sudo ln -s /usr/bin/python3 /usr/bin/python


三、初始化工程

  a.执行创建文件夹命令,创建android12文件夹

mkdir android12

  b.切换到android12目录下

cd android12/

   c.初始化android12

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-security-12.0.0_r47

 注意如果被拒绝

repo的运行过程中会尝试访问官方的git源更新自己,如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

初始化git

git config --global user.email "450561200@qq.com"
git config --global user.name "mogutou"

 再执行

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-security-12.0.0_r47

d.同步下载android源代码 j4代表的是4个线程

repo sync -j4

四、准备编译环境

    a. 安装 jdk8

sudo apt-get update
sudo apt-get install openjdk-8-jdk

   b.安装依赖包

sudo 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 ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

五、下载内核源码

   AOSP源码中并不包括内核源码,需要单独下载,内核源码有很多版本,比如common是通用的Linux内核,msm是用于使用高通MSM芯片的Android设备,goldfish是用于Android模拟器的内核源码,这里以goldfish为例

a.与下载AOSP源码类似,需要先建立文件夹 

mkdir kernel
cd kernel

 b.使用清华的镜像

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

 c.完成后kernel目录中会生成一个goldfish文件夹,进入goldfish目录并使用git命令

cd goldfish
git branch -a

 这时会列出有哪些内核的版本分支可以下载

这里选择下载goldfish 3.4版本

git checkout remotes/origin/android-goldfish-3.4

 六、交换空间

由于电脑内存不够,采用了交换空间的方式解决。

方法一

#停用交换文件
swapoff /swapfile
#删除文件
rm /swapfile
#新建swap空间,个人设置的是20G
fallocate -l 20G /swapfile
#设置文件权限 
chmod 600 /swapfile
#挂载
mkswap /swapfile
#激活启用
swapon /swapfile
#安装vim(可选)
apt-get install vim
#接下来,需要将交换信息写入系统配置
#打开配置文件
vim /etc/fstab
#在最末尾处插入(输入i进行插入,ctrl + shift + v是粘贴,如果不能实现粘贴,自行搜索处理一下,esc退出编辑,输入wq进行保存)
/swapfile  swap  swap  defaults  0  0
#更改交换空间大小
vim /etc/sysctl.conf
#在最末尾处插入
vm.min_free_kbytes=1500000

方法二

迅为提供的编译环境 Ubuntu20.04 默认配置了交换内存是 9G,如果在编译过程中,因内

存不够而编译报错,可以参考本小节进行设置。

这里举例分配 5G 交换内存。

在开始之前,使用命令检查一下您的 ubuntu 的 swap 分区。

sudo swapon --show

通过以下命令创建一个用于 swap 的文件

sudo fallocate -l 5G /swapfile

注意,此时可能会显示

fallocate:fallocate failed:Text file busy

此时,执行以下命令:

sudo swapoff -a

然后再执行以下命令:

sudo fallocate -l 5G /swapfile

执行以下命令为 swapfile 文件设置正确的权限:

sudo chmod 600 /swapfile

使用 mkswap 实用程序在文件上设置 Linux SWAP 区域:

sudo mkswap /swapfile

使用以下命令激活 swap 文件:

sudo swapon /swapfile

要让创建好的 swap 分区永久生效,可以将 swapfile 路径内容写入到 /etc/fstab 文件当中:

sudo vim /etc/fstab

在/etc/fstab 文件最后添加如下内容:

/swapfile swap swap defaults 0 0

使用 swapon 或 free 命令验证 SWAP 是否处于活动状态,如下所示:

sudo swapon --show

sudo free -h

七、编译

 a.初始化环境

  cd进入android12的目录,依次输入如下2个命令:  

source build/envsetup.sh
// 编译前删除build文件夹A
make clobber

  b. 选择编译目标

   输入命令:

lunch

 c.Which would you like?

    Which would you like? [aosp_arm-eng]后面直接输入对应序号39就可以。

   lunch命令用来让用户选择编译目标,只有在source build/envsetup.sh之后才会有效,不然会报命令not found
这里我又踩了一个坑,参照其他人的比较老的教程选择了aosp_x86-eng,这是可以运行在模拟器上。

编译:lunch arm_v7_v8-eng

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/289201.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【halcon深度学习之那些封装好的库函数】determine_dl_model_detection_param

determine_dl_model_detection_param 目标检测的数据准备过程中的有一个库函数determine_dl_model_detection_param “determine_dl_model_detection_param” 直译为 “确定深度学习模型检测参数”。 这个过程会自动针对给定数据集估算模型的某些高级参数,强烈建议…

[DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案

[网络故障] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案 问题描述 最近,我在使用CSDN插件浏览 MOOC 网站时,遇到了一些网络故障。具体表现为: MOOC 中国大学慕课网:www.icourse163.org点击CSDN插件首页的 MOOC&#xff08…

实验:使用ADC读取烟雾传感器的值

CubeMX 配置 3.3/4096 * smoke_value 这个表达式的含义是将ADC的原始数值 smoke_valuesmoke_value 转换成相应的电压值,假设ADC的范围是0到4095,电源电压是3.3V。这是一个将ADC的数字值映射到实际电压值的线性转换。 具体来说: 3.33.3 是电…

diffusers-Inpainting

原文链接:添加链接描述 白色mask区域仅使用生成出来的,非白色mask区域使用原始影像,但是图像有点不平滑 import PIL import numpy as np import torchfrom diffusers import AutoPipelineForInpainting from diffusers.utils i…

Linux5.2、进程等待

个人主页:Lei宝啊 愿所有美好如期而遇 目录 进程等待的必要性 进程等待的方法 获取子进程status 进程等待的必要性 首先,子进程退出,如果父进程不去回收子进程资源,读取子进程的PCB,那么就会使子进程变成僵尸进程…

如何通过MT-Bench评估大模型

如何评估LLM在开放性问题的回答能力 前面三篇博客中介绍了如何评估大模型,内容包括评估大模型时常用的指标,每个指标背后的含义,如何通过编写代码实现指标的收集。对于passk指标,还进行了专门的说明。在前面的博客中,我…

如何使用 TailwindCSS 画一条0.5px的线条

背景 在移动端项目,一般为了让线条看起来更细、更锐利,此时使用0.5px的线条是非常合适的。那么如何使用TailwindCSS画一条0.5px的线条呢? 在实现这个需求的时候,首先去TailwindCSS官网查了一下border有没有对应的内置工具类&…

mysql:查看服务端为了处理连接而创建的线程数量

使用命令show global status like Threads_created;可以查看服务端为了处理连接而创建的线程数量。 例如:

信息收集 - 网站架构

网站架构组成 通常,一个典型的网站架构包括以下组件: 动态脚本语言:动态脚本语言用于处理网站的逻辑和动态内容生成。常见的动态脚本语言包括PHP、Python、Ruby和Node.js等。这些脚本语言可以根据用户请求生成动态的网页内容。 数据库:数据库用于存储网站的数据,包括用户…

对GPU进行压力测试

GPU压力测试工具安装指导(RHEL8.2) - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/443165016 1、下载gpu-burn工具 下载地址:https://github.com/wilicc/gpu-burn 2、上传到系统后安装 # unzip gpu-burn-master.zip # cd gpu-burn-mas…

华清远见嵌入式学习——ARM——作业1

要求: 代码: mov r0,#0 用于加mov r1,#1 初始值mov r2,#101 终止值loop: cmp r1,r2addne r0,r0,r1addne r1,r1,#1bne loop 效果:

【Spring-Securty】安全框架使用详解

前言: 上一篇我分享了,关于使用swarrger的博客, 今天来分享关于security的操作: 在日常开发中,几乎所有的项目都需要进行请求的安全校验操作。 通常会采取以下几种方式来实现安全校验和过滤。 1、实例化HandlerInterce…