以进程的视角来看Android系统
Android源码获取途径
-
从谷歌网站获取Android源码
-
从芯片原厂获取Android源码
-
从方案厂商获取
优势:
-
从谷歌网站获取Android源码可以第一时间研究最新的技术,但是移植到具体的芯片上很难
-
从芯片原厂获取Android源码可以很容易得运行在某一个硬件上,但是更新较慢
AOSP下载
AOSP:Android Open-Source Project,中文为安卓开源项目。
repo工具下载
谷歌利用repo对所有git仓库进行管理,并且让用户通过repo工具批量下载Android源码,所以我们下载Android源码之前必须先安装repo工具。
电脑硬件要求
内存:不少于16GB
存储:不少于300GB
Ubuntu版本:Ubuntu18.04
安装git
执行以下命令
sudo apt-get install git
设置git
执行如下命令,填写名字和邮箱。
git config --global user.name “”
git config --global user.email “”
git config --list
下载repo
git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo
注意这里有可能会因为网络问题下载不成功,如果不能访问,可以换中科大的下载源。也会给大家提供一个下载好的。
配置repo
mkdir .repo //创建的是一个隐藏文件夹,我们使用命令“ll”查看。
mv git-repo .repo/repo //将git-repo移动到刚刚创建的.repo文件中,并将名称改为repo
cp .repo/repo/repo ./ //将repo复制到当前目录。
chmod u+x repo //修改repo操作权限。
下载源代码
确定需要的安装版本的名称
用的是Android11,对应的版本标记可以在Android官网上找到
https://source.android.google.cn/docs/setup/about/build-numbers?hl=zh-cn%3F
这里我们选择android-security-11.0.0_r54,并记下这个标记会在下载的时候使用到。
AOSP源码可以清华和中科大的源中去下载:
在repo所在路径下输入以下命令来下载源码
./repo-init -u git://mirrors.ustc.edu.cn/aosp/platform/mainfest -b android-security-11.0.0_r54
接着在repo所在路径输入命令,下载源码
./repo sync -j2
编译谷歌AOSP源码环境准备
需要使用apt命令安装以下依赖包:
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev g++-multilib g++-,ultilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
JDK
sudo apt-get update
sudo apt-get install openjdk-8-jdk
编译Android源码步骤(通用)
步骤1:初始化编译环境
source build/envsetup.sh //建立编译环境,提供编译所需要的命令(只对当前终端有效)
步骤2:选择对应产品
lunch
在虚拟机ubuntu中跑,所以选择aosp_x86_64-eng(或者31)
前半部分是编译生成目标产品信息,后半部分是编译源码的主机信息
步骤3:编译
编译
make -j12
用模拟器启动编译好的Android镜像
注意:
- VMware ubuntu18.04开启虚拟化引擎
2.shell终端切换到超级用户root
进入编译好的路径
source build/envsetup.sh //建立编译环境,提供编译所需要的命令 lunch //选择编译产品aosp_x86_64-eng(或者31) emulator //启动模拟器 (+verbose 可查看更多调试信息) |grep kernel(查kernel关键词)
cd /out/host/linux-x86/bin //存放相关命令
./adb shell //adb调试
从一级目录入手来认识瑞芯微Android11原厂BSP
- Android.bp 从Android7开始来替代.mk文件,soong会使用Android.bp(类似make与makefile)
- art 和dalvik Android运行环境相关(Android5.0以前用dalvik,5.0之后用art)
- bionic Android系统C库 专门为移动计算而设计的一个文件夹
- bootable 和引导程序相关
- build 编译规则
- build.sh 编译rk3568脚本
- compatibility Android兼容相关代码
- cts 兼容性测试相关
- developers 应用程序开发相关
- device 和硬件相关(重点关注)
- external 开源模组相关文件(重点关注)
- frameworks 应用程序框架(重点关注)
- hardware 硬件抽象层相关代码
- kernel linux内核源码和底层驱动(重点关注)
- libcore Android核心库相关
- libnativehelper 动态库相关
- out 编译之后生成镜像的文件夹(重点关注)
- package 应用程序相关文件夹
- pdk 本地开发套件
- platform-testing 测试相关
- prebuilts 资源文件相关比如编译器
- sdk SDK
- system 底层文件
- test 测试相关
- toolchain 编译链
- tools 工具相关
- u-boot uboot
- vendor 厂商定制相关
瑞芯微厂商添加的
- rknin
- RKDocs
- rkst
- RKTools
RK3568原厂Android源码编译
代码编译
一键编译命令
各个平台编译命令汇总
./build.sh -UKAup
( WHERE: -U = build uboot
-C = build kernel with Clang
-K = build kernel
-A = build android
-p = will build packaging in IMAGE
-o = build OTA package
-u = build update.img
-v = build android with 'user' or 'userdebug'
-d = huild kernel dts name
-V = build version
-J = build jobs
------------大家可以按需使用,不用记录uboot/kernel编译命令了------------------ )
============================================================
请注意使用一键编译命令之前需要设置环境变量,选择好自己需要编译的平台,举例:
source build/envsetup.sh
lunch rk3568_r-userdebug
============================================================
原厂uboot源码顶层目录讲解
Android下uboot移植
uboot->kernel->rootfs
- api 独立的API,给外部APP调用的,跟硬件的关系不大
- arch cpu架构相关代码
这里我们看ARM架构,mach-xxx 分别是不同的公司的CPU,(cpu,dts,include,lib都是ARM架构处理器通用文件夹)
- board 开发板相关代码(我们可以添加自己开发板的代码)
- cmd 支持shell命令
- common uboot通用文件(对硬件依赖性不是那么强)
- configs 编译uboot所用的配置文件
- disk 分区相关的数据结构
- doc Documentation 这两个文件夹放的是官方的文档
- drivers 驱动程序相关
- dts 编译好的设备树文件
- env 环境变量相关文件
- .example 示例相关代码
- fit 打包格式相关
- config.mk,Kbuild,Kconfig,Makefile,PREUPLOAD.cfg, README,snapshot.commit 和编译相关
- fs 表示uboot支持哪些文件系统
- include 头文件
- lib 库文件
- Licenses 许可
- make.sh 瑞芯微自己实现的自定义编译脚本
- net 网络功能实现相关代码
- post 测试相关
- scripts 固件操作的脚本
- spl tpl 编译uboot后放置的文件夹
- test 测试文件相关
- tools 工具相关
编译uboot
cd rk_android11/rk_android11.0_sdk_211130
./build.sh -U
报错提示不用管
编译后生成的两个重点文件
编译之后生成的文件分析
圈起来的是可行固件
- resource.img 资源文件
- u-boot 编译之后的elf格式uboot镜像文件
- u-boot.bin 编译之后的二进制格式uboot镜像文件
- u-boot.cfg u-boot.cfg.configs 编译之后的配置文件,可以通过这个来看我们配置哪些选项
- u-boot-dtb u-boot的设备树文件
- u-boot.lds 链接脚本
- u-boot.map 映像文件
- u-boot-nodtb.bin u-boot-dtb.bin
- u-boot.srec srec格式的uboot镜像文件
- u-boot.sym 符号文件
- tee.bin optv的镜像文件
将u-boot.img 烧写进开发板