本文介绍如何在天津飞腾信息科技有限公司FT2004 EVB board上Bringup Android10.0方法。
1.准备一台装有ubuntu20.04系统X86主机,内存最低配置要求16G。
2.新建一个存放下载脚本文件的目录:
mkdir ~/bin
PATH=~/bin:$PATH
3.下载repo脚本文件
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
vi ~/bin/repo
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
改为
REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
4.安装JDK 8
sudo apt-get install openjdk-8-jdk
5.安装依赖库
5.1
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
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 libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
sudo apt-get install libncurses5
5.2
安装依赖库时遇到libesd0-dev 安装不成功
E: 无法定位软件包 libesd0-dev
sudo vim /etc/apt/sources.list //在行尾添加如下两行的内容
deb http://us.archive.ubuntu.com/ubuntu/ xenial main universe
deb-src http://us.archive.ubuntu.com/ubuntu/ xenial main universe
sudo apt-get update && sudo apt-get install libesd0-dev
5.3
将默认python版本指定位phyton2
ln -s /usr/bin/python2 /usr/bin/python
1.创建存放android源码的目录,进到该目录:
mkdir android_source
cd android_source
2.下载初始化包
wget -c -t 0 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
tar xvf aosp-latest.tar
3.解压后看到一个aosp的目录,进到该目录,同步到Android-10.0.0_R33版本
cd aosp
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r33
repo sync
温馨提示: 1.此处我们通过wget下载的是清华打包好的源,由于地域或者网络因素可能下载会很慢而且可能wget会异常退出,这个建议开发者最好是最清晨或者网络比较空闲的时候下载
2.如果使用清华的源下载的速度非常慢的话,建议开发者可以切换到中科大的源进行先关的操作,具体可以详见博客使用清华或中科大AOSP源镜像下载Android源码和中科大AOSP 镜像使用帮助。
查看device/phytium/ft2004/patch/Readme文件
1.1
device/phytium/ft2004/patch目录下,增加和替换aosp项目中externl目录中对应的文件
1.2
合入system目录的patch
1.3
将libaudio.tar.gz解压到hardware目录; 将libcamera.tar.gz 解压到hardware目录
1.4
从phytium公司gitee网站中FT2004-Android10-Device仓库代码,将其拷贝到aosp目录下
1.android system.img vendor.img 编译
1.1
cd aosp
source ./build/envsetup.sh
lunch
可以看到
You're building on Linux
Lunch menu... pick a combo:
1. android_ft2004-eng
2. android_ft2004-user
3. android_ft2004-userdebug
.....
Which would you like? [aosp_arm-eng]
输入3, 选择编译android_ft2004-userdebug这个工程
温馨提示: 1.在开发阶段我们可以选择userdebug工程,实际生产或者测试相关性能的时候强烈建议切到user模式
2.当我们从userdebug切到user模式进行相关烧录的时候,注意一定要对userdata分区进行相关清除工作(格式化或者直接删除掉该分区相关的内容),否则Android系统会启动异常
1.2
make -j4
开始编译过程,这里j后面的数字依据cpu的核数调整。第一次编译很耗时,Intel I5-9500 6核
4线程CPU编译时间为5小时左右。
温馨提示: 1.如果编译机器的配置不是特别高,强烈建议编译线程数不要过多,否则编译机器会出现操作迟缓甚至卡死的情况
2.在make的过程中可能会出现稍许错误(这个和个人的编译环境有关,有些情况我们也有可能是不能预知的),这个开发者可以根据实际情况来进行修改从而使编译通过
3.在编译过程中有开发者反馈会出现system分区分配的空间过小,导致编译失败的问题,如下:
如果出现这种情况,开发者可以根据实际情况修改device/phytium/ft2004/BoardConfig.mk的配置选项,如下:
1.3 编译成功,在out/target/product/ft2004目录下,就会看到编译生成的文件。 如下:
1.4
进到 ramdisk目录下,执行下面命令
find . | cpio -o -Hnewc |gzip -9 > ../image.cpio.gz
可以在上一级目录下看到image.cpio.gz这个文件,该文件为根文件系统,在编译kernel时会用到
2.kernel image 编译
2.1 安装编译kernel交叉编译工具链
2.1.1 下载Linaro交叉环境编译工具链
Linaro是一家非营利性质的开源软件公司,自成立以来一直致力于推动基于ARM的开源
软件开发,提供多种编译工具链,为基于Linux内核的开发这提供了稳定的编译环境。
基于Linaro的交叉编译工具链可从Linaro 官网下载,以下截止到2020年7月时最新版本的交叉编译工具:
https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
2.1.2 解压到/opt目录
tar xvJf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /opt
2.1.3 配置环境变量
export PATH=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH
2.2 到phytium公司指定途径获得kernel 代码
2.3 合入需要支持显卡的修改
2.4 amd和radeon显卡,需要合入FT2004-Android10-Device仓库中kernel_radeon_amd_gpu_patch.diff中的改动
kernel_radeon_amd_gpu_patch.diff在device/phytium/ft2004/patch目录下
2.5 选择将1.4中的image.cpio.gz和kernel编译在一起
进到kernel 代码根目录,执行make menuconfig
选择进入General setup --->
选择Initial RAM filesystem and RAM disk(init ramfs/initrd) support
在 Initramfs source file(s) 项中输入image.cpio.gz文件路径,路径从根目录开始,例如文件保存在
用户的tmp目录下,则输入
/home/username/tmp/image.cpio.gz
保存退出
2.6 ARCH=arm64 scripts/kconfig/merge_config.sh arch/arm64/configs/defconfig arch/arm64/configs/sdk.config kernel/configs/android-base.config kernel/configs/android-recommended.config
2.7 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make -j6 开始kernel编译
2.8 编译完成,在kernel/arch/arm64/boot目录下,会生成Image文件。
在kenel/linux-4.19/arch/arm64/boot/dts/phytium/目录下,生成了ft2004-devboard-d4-dsk.dtb文件
1.准备一块SATA硬盘,删除原有分区后,创建4个分区
在linux下,使用fdsik命令分区
p1 256MB for BOOT
p2 1920MB for /system : Do fdisk, new primary partition
p3 128MB for /vendor : Do fdisk, new primary partition
p4 remainings for /data, data分区依据硬盘大小,可以分的大一些,应有都会装在这个分区里。
温馨提示: 1.对于fdisk的使用不是很熟悉的,请开发者自行百度或者谷歌。或者通过命令查看帮助选项如下:
2.上述分区的大小只是建议,开发者可以根据实际情况来确定每个分区的大小。通常system分区和vendor分区和data分区分大点,预留升级空间。
3.且随着Android版本的sync,可能编译出来的vendor和system分区都会大于上述我们既定的大小,这个开发者可以自行修改不会影响正常的启动,并且对于data分区这个就是多多益善了。
2.将Boot分区格式化为ext4格式,并设置分区名称,/dev/sdX中的X要依据该盘实际名字修改
sudo mkfs.ext4 -L boot /dev/sdX1
sudo mkfs.ext4 -L userdata /dev/sdX4
3.烧写system分区和endor分区
进到aosp/target/product/ft2004目录下
sudo dd if=system.img of=/dev/sdX2 bs=1M
sudo dd if=vendor.img of=/dev/sdX3 bs=1M
sync
4.拷贝的kernel镜像和设备树文件到boot分区
sudo cp kernel/arch/arm64/boot/Image to p1:/
sudo cp kernel/arch/arm64/boot/dts/phytium/ft2004-devboard-d4-dsk.dtb p1:/
1.FT2004 EVB 选择uboot启动方式
2.连接烧写好的SATA硬盘
3.连接串口线
4.打开putty,选择串口连接,波特率设置为115200
5.开机,串口console配置环境变量
5.1
setenv bootargs console=ttyAMA1,115200 earlycon=p1011,0x28001000 root=/dev/ram0 elevator=deadline rootwait rw loglevel=7 androidboot.hardware=android_ft2004 androidboot.selinux=permissive
ext4load scsi 0:1 0x90100000 ft2004-devboard-d4-dsk.dtb
ext4load scsi 0:1 0x90200000 Image
booti 0x90200000 - 0x90100000
5.2
设置DPI。它会影响Android界面图标的大小。在bootargs中添加一项 DPI=160.
1.安装32位应用,当打开过应用时,后面再次打开应用时需要清出应用的缓冲区
2.窗口无法自动翻转
Apache 2.0
飞腾信息技术有限公司
zhangjianwei@phytium.com.cn
tangkaiwen@phytium.com.cn
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。