# E2000-Android11-Device **Repository Path**: phytium_embedded/e2000-android11-device ## Basic Information - **Project Name**: E2000-Android11-Device - **Description**: 本文介绍如何在飞腾信息科技有限公司E2000 EVB board上Bringup Android11.0方案! - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 4 - **Created**: 2022-12-12 - **Last Updated**: 2024-10-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #   Phytium Android11 E2000 Device Bring up ## 引言 该项目主要是介绍如何在飞腾信息科技有限公司的E2000开发板上移植Android11 aosp和AMD显卡启动方案!如果您对该项目感兴趣的话,让我们一起来愉快的开启飞腾芯片运行Android系统之旅! ---

## 一.搭建开发环境 万事开头难,不过木有关系,千里之行始于足下吗!让我们先从最最简单的搭建Android aosp编译开发环境为起点,来开始我们的Android系统启动之旅! #### 1.1 准备一台装有ubuntu20.04系统X86主机,内存最低配置要求16G。 >当然这个只是最低配置的要求,机器性能肯定是多多益善。配置越高,编译速度越快!而且强烈建议不要使用虚拟机安装ubuntu,而是直接安装ubuntu系统。不要问为什么,因为虚拟机跑ubuntu的效率太低,编译起来那酸爽,你懂的! #### 1.2 新建一个存放下载脚本文件的目录: ```bash mkdir ~/bin PATH=~/bin:$PATH ``` #### 1.3 下载repo脚本文件 ```bash 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' ``` #### 1.4.安装JDK 8 ```bash sudo apt-get install openjdk-8-jdk ``` #### 1.5.安装编译依赖库 构建Android编译需要依赖的库非常多,如下都是我们需要安装下载的库: ```bash 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 ``` > 如果在安装依赖库时遇到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 #### 1.6.修改编译服务器默认python版本 将默认python版本指定位python2 ,执行如下命令 ```bash ln -s /usr/bin/python2 /usr/bin/python ``` ---

## 二.Android aosp源代码下载 经过前面的一顿操作,我们Android的开发环境已经构建OK了(Android源码下载环境和编译环境),此时我们可以进行下载Android aosp源码的步骤了。 #### 2.1 创建存放android aosp源码的目录,进到该目录: ```bash mkdir AN cd AN ``` #### 2.2.下载初始化包 执行如下命令: ```bash wget -c -t 0 --user-agent="Mozilla" https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar tar xvf aosp-latest.tar ``` #### 2.3.解压后看到一个aosp的目录,进到该目录,同步到android-11.0.0_r37版本 ```bash cd aosp repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-11.0.0_r37 repo sync ``` 下载完成后的目录结构如下: ```bash tangkaiwen@phytium-PowerEdge-R740xd:~/AN$ cd aosp/ tangkaiwen@phytium-PowerEdge-R740xd:~/AN/aosp$ ls Android.bp build development ir3_parser.tab.c out sdk art compatibility device kernel packages system bionic cts external libcore pdk test bootable dalvik frameworks libnativehelper platform_testing toolchain bootstrap.bash developers hardware Makefile prebuilts tools tangkaiwen@phytium-PowerEdge-R740xd:~/AN/aosp$ ``` >温馨提示:
>1.此处我们通过wget下载的是清华打包好的源,由于地域或者网络因素可能下载会很慢而且可能wget会异常退出,这个建议开发者最好是最清晨或者网络比较空闲的时候下载
>2.如果使用清华的源下载的速度非常慢的话,建议开发者可以切换到中科大的源进行先关的操作,具体可以详见博客[使用清华或中科大AOSP源镜像下载Android源码](https://www.kaelli.com/19.html)和[中科大AOSP 镜像使用帮助](https://mirrors.ustc.edu.cn/help/aosp.html)。 ----

## 三. 代码整合 妈啊,不容易啊到这里,我们Android的编译环境和aosp源码也都已经下载OK了。是时候和入飞腾适配相关的源码了! #### 3.1 下载飞腾相关Android源码部分 >这里强烈建议朋友们,不要将飞腾对Android源码修改部分下载到前面Android aosp仓库的根目录下面,最后是和Android根目录平级的一个目录。 开始下载,执行clone命令: ```bash tangkaiwen@phytium-PowerEdge-R740xd:~/AN$ git clone https://gitee.com/phytium_embedded/e2000-android11-device.git Cloning into 'e2000-android11-device'... remote: Enumerating objects: 124436, done. remote: Counting objects: 100% (124436/124436), done. remote: Compressing objects: 100% (98852/98852), done. remote: Total 124436 (delta 21032), reused 124429 (delta 21031), pack-reused 0 Receiving objects: 100% (124436/124436), 336.71 MiB | 9.04 MiB/s, done. Resolving deltas: 100% (21032/21032), done. Updating files: 100% (117557/117557), done. ``` 执行完成之后,飞腾部分Android源码下载ok,这里我通过命令查看下: ```bash tangkaiwen@phytium-PowerEdge-R740xd:~/AN$ tree -L 1 e2000-android11-device/ e2000-android11-device/ ├── device_phytium_e2000 ├── e2000_android_kernel.patch ├── external_alsa-lib ├── external_alsa-utils ├── external_drm_framebuffer ├── external_gbm_gralloc ├── external_libdrm ├── external_llvm-project ├── external_mesa ├── external_shaderc ├── external_toybox ├── hardware_interfaces ├── hardware_libaudio ├── hardware_libcamera ├── image ├── phytium_android11_patch ├── phytium_env.sh ├── LICENSE ├── README.md └── system_core 16 directories, 4 files ``` #### 3.2 执行飞腾android相关源码和入 飞腾android相关源码下载完毕之后,我们就可以执行和入代码呢,我们可以执行如下的操作: ```bash tangkaiwen@phytium-PowerEdge-R740xd:~/AN/e2000-android11-device$ chmod 777 phytium_env.sh tangkaiwen@phytium-PowerEdge-R740xd:~/AN/e2000-android11-device$ ./phytium_env.sh /home/tangkaiwen/AN/aosp THE ANDROID_PATH_ROOT /home/tangkaiwen/AN/aosp #### sync phytium env start! #### #### sync system_core #### #### sync system_core end #### #### sync device_phytium_e2000 #### #### sync device_phytium_e2000 end #### #### sync hardware_libaudio #### #### sync hardware_libaudio end #### #### sync hardware_libcamera #### #### sync hardware_libcamera end #### #### sync hardware_interfaces #### #### sync hardware_interfaces end #### #### sync external_alsa-lib #### #### sync external_alsa-lib end #### #### sync external_alsa-utils #### #### sync external_alsa-utils end #### #### sync external_shaderc #### #### sync external_shaderc end #### #### sync external_toybox #### #### sync external_toybox end #### #### sync external_libdrm #### #### sync external_libdrm end #### #### sync external_llvm-project #### #### sync external_llvm-project end #### #### sync external_mesa #### #### sync external_mesa end #### #### sync external_gbm_gralloc #### #### sync external_gbm_gralloc end #### #### sync external_drm_framebuffer #### #### sync external_drm_framebuffer end #### #### apply patch #### patching file frameworks/av/media/libstagefright/colorconversion/ColorConverter.cpp patching file frameworks/av/media/libstagefright/colorconversion/SoftwareRenderer.cpp patching file frameworks/base/services/core/java/com/android/server/wm/DisplayContent.java patching file frameworks/base/services/core/java/com/android/server/wm/DisplayRotation.java #### applay patch end #### #### sync phytium end! #### ``` >这里我们需要对上述脚本传入一个参数,即前面我们下载好之后的aosp源码路径。 -----

## 四.编译Android代码 执行到这里,万事俱备只欠东风了。我们可以开始最终的Android源码编译和构建了。这里我们分为如下两部分进行: #### 4.1 lunch编译项目 进入前面aosp的根目录执行,如下命令: ```bash tangkaiwen@phytium-PowerEdge-R740xd:~/AN/aosp$ tangkaiwen@phytium-PowerEdge-R740xd:~/AN/aosp$ source build/envsetup.sh && lunch 41 ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=11 TARGET_PRODUCT=e2000 TARGET_BUILD_VARIANT=userdebug TARGET_BUILD_TYPE=release TARGET_ARCH=arm64 TARGET_ARCH_VARIANT=armv8-a TARGET_CPU_VARIANT=generic TARGET_2ND_ARCH=arm TARGET_2ND_ARCH_VARIANT=armv8-a TARGET_2ND_CPU_VARIANT=generic HOST_ARCH=x86_64 HOST_2ND_ARCH=x86 HOST_OS=linux HOST_OS_EXTRA=Linux-5.15.0-56-generic-x86_64-Ubuntu-20.04.5-LTS HOST_CROSS_OS=windows HOST_CROSS_ARCH=x86 HOST_CROSS_2ND_ARCH=x86_64 HOST_BUILD_TYPE=release BUILD_ID=RQ2A.210505.003 OUT_DIR=out PRODUCT_SOONG_NAMESPACES=device/generic/goldfish device/generic/goldfish-opengl ============================================ tangkaiwen@phytium-PowerEdge-R740xd:~/AN/aosp$ make ``` >温馨提示:
>1.在开发阶段我们可以选择userdebug工程,实际生产或者测试相关性能的时候强烈建议切到user模式
>2.当我们从userdebug切到user模式进行相关烧录的时候,注意一定要对userdata分区进行相关清除工作(格式化或者直接删除掉该分区相关的内容),否则Android系统会启动异常 #### 4.2 开始构建lunch项目 开始编译过程,这里j后面的数字依据cpu的核数调整。第一次编译很耗时,Intel I5-9500 6核 4线程CPU编译时间为5小时左右(当然线程数越多越好,但是如果编译服务器不够强大,那么开几个线程都是假的了) ```bash make -j4 ``` >温馨提示:
>1.如果编译机器的配置不是特别高,强烈建议编译线程数不要过多,否则编译机器会出现操作迟缓甚至卡死的情况
>2.在make的过程中可能会出现稍许错误(这个和个人的编译环境有关,有些情况我们也有可能是不能预知的),这个开发者可以根据实际情况来进行修改从而使编译通过
#### 4.3 构建根文件系统 进入out下面的ramdisk目录,执行如下命令生成根文件系统镜像 ```bash tangkaiwen@phytium-PowerEdge-R740xd:~/AN/aosp/out/target/product/e2000/ramdisk$ tangkaiwen@phytium-PowerEdge-R740xd:~/AN/aosp/out/target/product/e2000/ramdisk$ find . | cpio -o -Hnewc > ../initramfs.img 4062 blocks ``` #### 4.4 查看最终构建结果 编译成功,我们可以到out/target/product/e2000目录下查看,就会看到编译生成的相关镜像文件。 如下: ```bash tangkaiwen@phytium-PowerEdge-R740xd:~/AN/aosp$ cd out/target/product/e2000/ tangkaiwen@phytium-PowerEdge-R740xd:~/AN/aosp/out/target/product/e2000$ ls android-info.txt initramfs.img installed-files-vendor.txt recovery apex installed-files.json misc_info.txt root appcompat installed-files-ramdisk-debug.json module-info.json symbols build_fingerprint.txt installed-files-ramdisk-debug.txt module-info.json.rsp system build_thumbprint.txt installed-files-ramdisk.json obj system.img clean_steps.mk installed-files-ramdisk.txt obj_arm userdata.img data installed-files-root.json previous_build_config.mk vendor debug_ramdisk installed-files-root.txt ramdisk vendor.img fake_packages installed-files.txt ramdisk-debug.img gen installed-files-vendor.json ramdisk.img ``` -----

## 五.编译E2000内核 通过前面一顿猛如虎的操作,我们完成了Android镜像的编译了,是时候来编译飞腾相关的内核镜像了。大致流程无外乎,下载,配置编译环境,编译! ### 5.1下载E2000内核,然后切到正确分支 ```bash tangkaiwen@phytium-PowerEdge-R740xd:~/AN$ tangkaiwen@phytium-PowerEdge-R740xd:~/AN$ git clone https://gitee.com/phytium_embedded/phytium-linux-kernel.git phytium_android_kernel Cloning into 'phytium_android_kernel'... remote: Enumerating objects: 8031123, done. remote: Counting objects: 100% (148/148), done. remote: Compressing objects: 100% (148/148), done. remote: Total 8031123 (delta 110), reused 0 (delta 0), pack-reused 8030975 Receiving objects: 100% (8031123/8031123), 1.50 GiB | 2.99 MiB/s, done. Resolving deltas: 100% (6764024/6764024), done. Updating files: 100% (62233/62233), done. tangkaiwen@phytium-PowerEdge-R740xd:~/AN$ cd phytium_android_kernel tangkaiwen@phytium-PowerEdge-R740xd:~/AN/phytium_android_kernel$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/linux-4.19 remotes/origin/linux-4.19-rt remotes/origin/linux-5.10 remotes/origin/linux-5.10-rt remotes/origin/master tangkaiwen@phytium-PowerEdge-R740xd:~/AN/phytium_android_kernel$ git checkout remotes/origin/linux-4.19 Note: switching to 'remotes/origin/linux-4.19'. tangkaiwen@phytium-PowerEdge-R740xd:~/AN/phytium_android_kernel$ git branch -a * (HEAD detached at origin/linux-4.19) master remotes/origin/HEAD -> origin/master remotes/origin/linux-4.19 remotes/origin/linux-4.19-rt remotes/origin/linux-5.10 remotes/origin/linux-5.10-rt remotes/origin/master ``` ### 5.2 构建正确config配置 将前面git仓库下的e2000仓库中相关内核的配置打入内核工程文件,如下 ```bash tangkaiwen@phytium-PowerEdge-R740xd:~/AN$ cd phytium_android_kernel/ tangkaiwen@phytium-PowerEdge-R740xd:~/AN/phytium_android_kernel$ git applay ~/AN/e2000-android11-device/e2000_android_kernel.patch ./ ``` ### 5.3 构建编译环境开始编译 - 下载Linaro 的交叉编译工具链,具体地址如下: ```bash 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 ``` - 解压到/opt 目录 ```bash $ export PATH=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$P ATH $ export ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- $ export CC=aarch64-linux-gnu-gcc $ cd ~/AN/phytium_android_kernel $ make e2000_android_defconfig $ make ``` - 配置环境变量和编译内核 -----

## 六. 镜像烧写 通过前面艰苦卓绝的战斗,我们终于构建出来我们想要的各种Android镜像文件了,是时候见证奇迹的时刻了,让我们通过上述镜像来开启我们的Android启动之旅! #### 6.1 烧录分区初始化 首先准备一块SATA硬盘,删除原有分区后,创建4个分区, 这里我们在linux下以伪代码来介绍下fdsik创建相关分区 ```bash p1 256MB for BOOT p2 1920MB for /system : Do fdisk, new primary partition p3 256MB for /vendor : Do fdisk, new primary partition p4 remainings for /data, data分区依据硬盘大小,可以分的大一些,应有都会装在这个分区里。 ``` 这里我简单的来实际操作一番,如下: ```bash tangkw@tangkw:~$ sudo fdisk /dev/sdb Welcome to fdisk (util-linux 2.34). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n Partition number (1-128, default 1): First sector (2048-1953525134, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1953525134, default 1953525134): +256M Created a new partition 1 of type 'Linux filesystem' and of size 256 MiB. Command (m for help): n Partition number (2-128, default 2): First sector (526336-1953525134, default 526336): Last sector, +/-sectors or +/-size{K,M,G,T,P} (526336-1953525134, default 1953525134): +2G Created a new partition 2 of type 'Linux filesystem' and of size 2 GiB. Partition #2 contains a ext4 signature. Do you want to remove the signature? [Y]es/[N]o: Y The signature will be removed by a write command. Command (m for help): n Partition number (3-128, default 3): First sector (4720640-1953525134, default 4720640): Last sector, +/-sectors or +/-size{K,M,G,T,P} (4720640-1953525134, default 1953525134): +256M Created a new partition 3 of type 'Linux filesystem' and of size 256 MiB. Command (m for help): n Partition number (4-128, default 4): First sector (5244928-1953525134, default 5244928): Last sector, +/-sectors or +/-size{K,M,G,T,P} (5244928-1953525134, default 1953525134): +20G Created a new partition 4 of type 'Linux filesystem' and of size 20 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. ``` >温馨提示:
>1.对于fdisk的使用不是很熟悉的,请开发者自行百度或者谷歌。或者通过命令查看帮助选项如下: ```bash tangkaiwen@phytium-PowerEdge-R740xd:~/AN$ sudo fdisk -h Usage: fdisk [options] change partition table fdisk [options] -l [] list partition table(s) Display or manipulate a disk partition table. Options: -b, --sector-size physical and logical sector size -B, --protect-boot don't erase bootbits when creating a new label -c, --compatibility[=] mode is 'dos' or 'nondos' (default) -L, --color[=] colorize output (auto, always or never) colors are enabled by default -l, --list display partitions and exit -o, --output output columns -t, --type recognize specified partition table type only -u, --units[=] display units: 'cylinders' or 'sectors' (default) -s, --getsz display device size in 512-byte sectors [DEPRECATED] --bytes print SIZE in bytes rather than in human readable format -w, --wipe wipe signatures (auto, always or never) -W, --wipe-partitions wipe signatures from new partitions (auto, always or never) -C, --cylinders specify the number of cylinders -H, --heads specify the number of heads -S, --sectors specify the number of sectors per track -h, --help display this help -V, --version display version Available output columns: gpt: Device Start End Sectors Size Type Type-UUID Attrs Name UUID dos: Device Start End Sectors Cylinders Size Type Id Attrs Boot End-C/H/S Start-C/H/S bsd: Slice Start End Sectors Cylinders Size Type Bsize Cpg Fsize sgi: Device Start End Sectors Cylinders Size Type Id Attrs sun: Device Start End Sectors Cylinders Size Type Id Flags For more details see fdisk(8). ``` >2.上述分区的大小只是建议,开发者可以根据实际情况来确定每个分区的大小。通常system分区和vendor分区和data分区分大点,预留升级空间。
>3.且随着Android版本的sync,可能编译出来的vendor和system分区都会大于上述我们既定的大小,这个开发者可以自行修改不会影响正常的启动,并且对于data分区这个就是多多益善了。 #### 6.2 格式化boot分区和userdata分区 将Boot分区格式化为ext4格式,并设置分区名称,/dev/sdX中的X要依据该盘实际名字修改 ,伪代码如下: ```bash sudo mkfs.ext4 -L boot /dev/sdX1 sudo mkfs.ext4 -L userdata /dev/sdX4 ``` 我们将前面前面创建的分区,进行格式化如下: ```bash tangkw@tangkw:~$ sudo mkfs.ext4 -L boot /dev/sdb1 mke2fs 1.45.5 (07-Jan-2020) Creating filesystem with 65536 4k blocks and 65536 inodes Filesystem UUID: 3ccd6c98-ef91-4b16-a871-f2775d9f0ada Superblock backups stored on blocks: 32768 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done tangkw@tangkw:~$ sudo mkfs.ext4 -L userdata /dev/sdb4 mke2fs 1.45.5 (07-Jan-2020) Creating filesystem with 5242880 4k blocks and 1310720 inodes Filesystem UUID: f0c1ff27-4ceb-4d15-bdbb-c14de2b4360c Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done ``` #### 6.3 烧写system分区和endor分区 还是老规矩先使用伪指令演示一下: ```bash sudo dd if=system.img of=/dev/sdX2 bs=1M sudo dd if=vendor.img of=/dev/sdX3 bs=1M sync ``` 结合前面我们编译的环境,以及具体的创建的分区,进到out/target/product/e20000目录下 ,执行如下指令: ```bash tangkw@tangkw:~/hgfs/AN/aosp/out/target/product/e2000$ sudo dd if=system.img of=/dev/sdb2 bs=1M 2049+0 records in 2048+0 records out 2147483648 bytes (2.1 GB, 2.0 GiB) copied, 184.983 s, 11.6 MB/s tangkw@tangkw:~/hgfs/AN/aosp/out/target/product/e2000$ sudo dd if=vendor.img of=/dev/sdb3 bs=1M 256+0 records in 256+0 records out 268435456 bytes (268 MB, 256 MiB) copied, 25.6534 s, 10.5 MB/s ``` #### 6.4 拷贝的kernel镜像和设备树文件以及ramdisk到boot分区 还是老规矩先使用伪指令演示一下: ```bash sudo cp kernel/arch/arm64/boot/Image to p1:/ sudo cp kernel/arch/arm64/boot/dts/phytium/e2000q-demo-board.dtb p1:/ sudo cp initramfs.img p1:/ ``` 结合前面我们编译的环境,以及具体的创建的分区,我们来具体烧录: ```bash tangkw@tangkw:~/xxx$ sudo cp arch/arm64/boot/Image /media/tangkw/boot/ tangkw@tangkw:~/xxx$ sudo cp arch/arm64/boot/dts/phytium/e2000q-demo-board.dtb /media/tangkw/boot/ tangkw@tangkw:~/xxx$ sudo cp initramfs.img /media/tangkw/boot/ ``` ---

## 七. 配置相关参数,启动设备 见证奇迹的时刻就要到了,成功还是失败就在这把操作了。让我们紧跟步伐来执行这最后一套组合拳,步骤如下: ##### 7.1 e2000 EVB 选择uboot启动方式 ##### 7.2 连接烧写好的SATA硬盘 ##### 7.3 连接串口线 ##### 7.4 打开putty,选择串口连接,波特率设置为115200 ##### 7.5 开机,串口console配置环境变量 ```bash setenv bootargs console=ttyAMA1,115200 earlycon=p1011,0x2800d000 root=/dev/ram0 elevator=deadline rootwait rw loglevel=7 androidboot.hardware=e2000 androidboot.selinux=permissive initrd=0x93000000,90M ext4load scsi 0:1 0x90100000 e2000q-demo-board.dtb ext4load scsi 0:1 0x90200000 Image ext4load scsi 0:1 0x93000000 initramfs.img booti 0x90200000 - 0x90100000 ``` ##### 7.6 设置DPI。它会影响Android界面图标的大小。在bootargs中添加一项 DPI=160. 如果不出意外的话,静等片刻就可以看到我们的Android开机动画了,最终进入Android的启动界面。 ![输入图片说明](image/bootanimation.png) ![输入图片说明](image/startok.png) ---------

## 八. 开源许可协议 这个项目我们采用的协议是:Apache 2.0 。 ----

## 九.项目维护者联系方式 各位朋友,如果在使用过程中有遇到相关疑问,可以联系如下的相关维护者,我们将在第一时间为您提供答疑解惑,助您及时解决相关问题。
zhangjianwei@phytium.com.cn tangkaiwen@phytium.com.cn
xiayan1086@phytium.com.cn