# FT2004-Android10-Device **Repository Path**: quzn/ft2004-android10-device ## Basic Information - **Project Name**: FT2004-Android10-Device - **Description**: Android10.0中FT2004 EVB board配置文件。lunch名字为 android_ft2004-userdebug。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-07-03 - **Last Updated**: 2022-07-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FT2004EVB上Bringup Android10.0 本文介绍如何在天津飞腾信息科技有限公司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源码](https://www.kaelli.com/19.html)和[中科大AOSP 镜像使用帮助](https://mirrors.ustc.edu.cn/help/aosp.html)。 > # 代码整合 查看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分区分配的空间过小,导致编译失败的问题,如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210527171052299.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rrd3h0eQ==,size_16,color_FFFFFF,t_70#pic_center) >如果出现这种情况,开发者可以根据实际情况修改device/phytium/ft2004/BoardConfig.mk的配置选项,如下: >![在这里插入图片描述](https://img-blog.csdnimg.cn/20210527171902613.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rrd3h0eQ==,size_16,color_FFFFFF,t_70#pic_center) 1.3 编译成功,在out/target/product/ft2004目录下,就会看到编译生成的文件。 如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210527172651437.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rrd3h0eQ==,size_16,color_FFFFFF,t_70) 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的使用不是很熟悉的,请开发者自行百度或者谷歌。或者通过命令查看帮助选项如下: >![在这里插入图片描述](https://img-blog.csdnimg.cn/20210527172232817.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rrd3h0eQ==,size_16,color_FFFFFF,t_70)
> >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