# T-HEAD Android

本项目为平头哥维护的生态开发板对安卓开源项目(AOSP)支持的仓库，主要包含了生态开发板的板级配置、外设HAL层、内核、u-boot和预编译组件支持，其余组件则可直接从上游AOSP仓库拉取。目前仓库中维护了基于[曳影1520](https://occ.t-head.cn/product/wujian/4080405462988689408?spm=a2cl5.27298288.0.0.60998L2t8L2tm0&product=wujian600) SoC原型的BeagleV Ahead和Lichee Pi 4A开发板相关支持。

平头哥一直致力于RISC-V架构的安卓支持，开源了安卓10和安卓12两个版本的RISC-V架构支持，推动了RISC-V架构支持向安卓主线的合入并贡献了大量补丁提交；目前RISC-V架构已经得到了安卓开源项目的官方支持并作为Tire 1目标进行维护；后续平头哥也会持续贡献AOSP主线、上游三方项目、算法库优化、生态开发板、应用支持和RISC-V标准规范制定，帮助RISC-V的安卓支持在功能、性能、稳定性以及软硬件生态上进一步完善;也欢迎社区开发者参与到RISC-V的安卓支持和生态开发板支持的贡献。

## 生态开发板
### BeagleV Ahead
BeagleV Ahead是Beagle board推出的开发板产品，可以支持安卓、Debian、Ubuntu等多种操作系统；开发板集成了TH1520 SoC，包含4核运行于1.85G的玄铁C910处理器和4TOPS算力的NPU，内置GPU支持OpenGL ES、OpenCL和Vulkan，拥有USB、WiFI/BT、以太网、hdmi、mipi csi/dsi等多种设备接口，可用于视频会议一体机、人脸识别考勤门禁、医学成像等AI边缘计算应用场景。
![beaglev](https://gitee.com/thead-android/thead-android/raw/master/resources/beaglev.jpeg)

图 1. BeagleV Ahead

更多信息可以访问beagleboard文档页面了解:

https://beaglev-ahead.beagleboard.io/docs/latest/boards/beaglev/ahead/index.html

### Lichee Pi 4A EVB
Lichee Pi 4A是Sipeed推出的开发板产品，可以支持安卓、Debian、OpenWrt等多种操作系统；开发板集成了TH1520 SoC，包含4核运行于1.85G的玄铁C910处理器和4TOPS算力的NPU，内置GPU支持OpenGL ES、OpenCL和Vulkan，拥有USB、WiFI/BT、以太网、hdmi、mipi csi/dsi等多种设备接口，可用于视频会议一体机、人脸识别考勤门禁、医学成像等AI边缘计算应用场景。
![licheepi4a](https://gitee.com/thead-android/thead-android/raw/master/resources/licheepi4a.png)

图 2. Lichee Pi 4A EVB

更多信息可以访问sipeed官网了解:
https://wiki.sipeed.com/licheepi4a

## 快速上手
在下载安卓开源项目源代码之前，请检查您的工作环境，建议使用具有至少250G磁盘空间、16GB+内存的Linux系统(推荐使用Ubuntu 20.04以上版本)的工作环境， 编译时间和主机的处理器核心数有关，建议使用有较多核心的主机。

将安卓开源项目(主线版本)和开发板支持源代码下载到工作目录,使用固定版本上游代码:
```
mkdir riscv-android-src && cd riscv-android-src
repo init -u https://gitee.com/thead-android/local_manifests.git -b main_2023_7_7
git clone https://gitee.com/thead-android/local_manifests.git .repo/local_manifests -b thead-android-community
repo sync
```
使用最新版本上游代码，可能会由于兼容性导致一些编译问题:
```
mkdir riscv-android-src && cd riscv-android-src
repo init -u https://android.googlesource.com/platform/manifest -b master
git clone https://gitee.com/thead-android/local_manifests.git .repo/local_manifests -b thead-android-community
repo sync
```
若无法连接google源可使用清华源镜像：
```
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
```

### BeagleV Ahead
完成下载后可以通过以下命令对系统进行构建
```
source build/envsetup.sh
lunch beaglev_ahead-userdebug
m -j
```

编译生成文件如下所示，可以将需要的文件拷贝供fastboot使用
```
$ ls out/target/product/beaglev_ahead/*img
out/target/product/beaglev_ahead/boot.img           out/target/product/beaglev_ahead/super_empty.img        out/target/product/beaglev_ahead/vendor_boot-debug.img
out/target/product/beaglev_ahead/cache.img          out/target/product/beaglev_ahead/system.img             out/target/product/beaglev_ahead/vendor_boot-test-harness.img
out/target/product/beaglev_ahead/dtb.img            out/target/product/beaglev_ahead/system_ext.img         out/target/product/beaglev_ahead/vendor_boot.img
out/target/product/beaglev_ahead/dtbo-unsigned.img  out/target/product/beaglev_ahead/userdata.img           out/target/product/beaglev_ahead/vendor_ramdisk-debug.img
out/target/product/beaglev_ahead/dtbo.img           out/target/product/beaglev_ahead/vbmeta.img             out/target/product/beaglev_ahead/vendor_ramdisk-test-harness.img
out/target/product/beaglev_ahead/product.img        out/target/product/beaglev_ahead/vbmeta_system.img      out/target/product/beaglev_ahead/vendor_ramdisk.img
out/target/product/beaglev_ahead/ramdisk.img        out/target/product/beaglev_ahead/vendor-bootconfig.img
out/target/product/beaglev_ahead/super.img          out/target/product/beaglev_ahead/vendor.img

$ mkdir fastboot
$ cd out/target/product/beaglev_ahead/
$ cp u-boot-with-spl.bin bootpart.ext4 boot.img super.img userdata.img vbmeta.img vbmeta_system.img vendor_boot.img ../../../../../fastboot/
```

![beaglev_connect](https://gitee.com/thead-android/thead-android/raw/master/resources/beaglev_connect.png)

图3. BeagleV Ahead 连接

开发板使用主要需要连接电源、串口、usb和显示：
- 串口主要用于U-boot和内核中的命令交互，可通过底板上Debug的RX和TX连接，波特率为115200
- USB Device接口主要用于fastboot和adb工具的连接
- MIPI DSI/HDMI接口可以使用于连接屏幕显示UI界面

对系统进行完整烧写需要按住开发板的USB按键同时按复位键进入boot烧写模式。

之后使用fastboot对系统镜像进行烧写，adb和fastboot工具可以访问安卓开发者网站下载
https://developer.android.com/tools/releases/platform-tools

```
#烧录uboot并初始化boot环境变量
fastboot flash ram u-boot-with-spl.bin
fastboot reboot
fastboot flash uboot u-boot-with-spl.bin

#烧录各个分区
#在非boot烧写模式，可以在uboot的命令行中输入命令fastboot usb 0，单独烧录分区
fastboot flash bootpart bootpart.ext4
fastboot flash boot boot.img
fastboot flash vendor_boot vendor_boot.img
fastboot flash super super.img 
fastboot flash userdata userdata.img
fastboot flash vbmeta vbmeta.img
fastboot flash vbmeta_system vbmeta_system.img
 
#初始化metadata和misc分区
fastboot erase metadata 
fastboot erase misc
```
当完成烧写后重新复位上电进入系统启动模式,可以通过串口/ADB访问系统的命令行，并可通过触屏或外接HDMI显示系统图像界面进行交互。

![beaglev_aosp](https://gitee.com/thead-android/thead-android/raw/master/resources/beaglev_aosp.png)

图4.在BeagleV Ahead上运行AOSP主线

### Lichee Pi 4A EVB
完成下载后可以通过以下命令对系统进行构建
```
source build/envsetup.sh
#若使用Lichee Pi 4A开发板
lunch lichee_pi_4a-userdebug
m -j
```

编译生成文件如下所示，可以将需要的文件拷贝供fastboot使用
```
$ ls out/target/product/lichee_pi_4a/*img
out/target/product/lichee_pi_4a/boot.img           out/target/product/lichee_pi_4a/super_empty.img        out/target/product/lichee_pi_4a/vendor_boot-debug.img
out/target/product/lichee_pi_4a/cache.img          out/target/product/lichee_pi_4a/system.img             out/target/product/lichee_pi_4a/vendor_boot-test-harness.img
out/target/product/lichee_pi_4a/dtb.img            out/target/product/lichee_pi_4a/system_ext.img         out/target/product/lichee_pi_4a/vendor_boot.img
out/target/product/lichee_pi_4a/dtbo-unsigned.img  out/target/product/lichee_pi_4a/userdata.img           out/target/product/lichee_pi_4a/vendor_ramdisk-debug.img
out/target/product/lichee_pi_4a/dtbo.img           out/target/product/lichee_pi_4a/vbmeta.img             out/target/product/lichee_pi_4a/vendor_ramdisk-test-harness.img
out/target/product/lichee_pi_4a/product.img        out/target/product/lichee_pi_4a/vbmeta_system.img      out/target/product/lichee_pi_4a/vendor_ramdisk.img
out/target/product/lichee_pi_4a/ramdisk.img        out/target/product/lichee_pi_4a/vendor-bootconfig.img
out/target/product/lichee_pi_4a/super.img          out/target/product/lichee_pi_4a/vendor.img

$ mkdir fastboot
$ cd out/target/product/lichee_pi_4a/
$ mkdir fastboot
$ cp bootpart.ext4 boot.img super.img userdata.img vbmeta.img vbmeta_system.img vendor_boot.img ../../../../../fastboot/
```

![licheepi4a_connect](https://gitee.com/thead-android/thead-android/raw/master/resources/licheepi4a_connect.png)

图5. Lichee Pi 4A EVB 连接

开发板使用主要需要连接电源、串口、usb和显示：
- 串口主要用于U-boot和内核中的命令交互，可通过底板上 GPIO 的 U0-RX 和 U0-TX连接，波特率为115200
- USB Device接口主要用于fastboot和adb工具的连接
- MIPI DSI/HDMI接口可以使用于连接屏幕显示UI界面

对系统进行完整烧写需要按住开发板的boot按键同时按复位键进入boot烧写模式。

之后使用fastboot对系统镜像进行烧写，adb和fastboot工具可以访问安卓开发者网站下载
https://developer.android.com/tools/releases/platform-tools
```
#烧录uboot并初始化boot环境变量
fastboot flash ram u-boot-with-spl.bin
fastboot reboot
fastboot flash uboot u-boot-with-spl.bin

#烧录各个分区
#在非boot烧写模式，可以在uboot的命令行中输入命令fastboot usb 0，单独烧录分区
fastboot flash bootpart bootpart.ext4
fastboot flash boot boot.img
fastboot flash vendor_boot vendor_boot.img
fastboot flash super super.img 
fastboot flash userdata userdata.img
fastboot flash vbmeta vbmeta.img
fastboot flash vbmeta_system vbmeta_system.img

#初始化metadata和misc分区
fastboot erase metadata 
fastboot erase misc
```
当完成烧写后重新复位上电进入系统启动模式,可以通过串口/ADB访问系统的命令行，并可通过触屏或外接HDMI显示系统图像界面进行交互。

![licheepi4a_aosp](https://gitee.com/thead-android/thead-android/raw/master/resources/licheepi4a_aosp.png)

图6.在Lichee Pi 4A上运行AOSP主线

## 改动列表
2023/07/06

- 发布 BeagleV Ahead 开发板 Alpha版本支持
- 发布 Lichee Pi 4A EVB Alpha版本支持

## 贡献
本项目使用Pull Requests接收外部贡献，可参考以下流程:

1. 在个人账户中Fork需要修改的代码仓库。
2. 创建一个对应于改动的开发分支。
3. 用个人账户下的代码仓库替换原始仓库来源和修订版本：
```
- <project path="device/thead/common" name="device-thead-common" revision="alpha_0_2_0" remote="thead" />
+ <project path="device/thead/common" name="device-thead-common" revision="alpha_0_2_0_xxx_support" remote="your_personal_remote" />
```
4. 所有新工作都应基于相应的开发分支。
5. 创建提交时需要尽量保证改动的独立和完整，并填写适当的提交消息。
6. 创建改动时最好包含相关单元测试结果。
7. 将开发分支推送到你在 Gitee 上的个人存储库 Fork。
8. 创建一个针对相应开发分支的Gitee Pull Request，若该提交为bug修复请将该提交关联至问题跟踪器中的问题。

## 相关链接
本项目问题跟踪器(生态板支持安卓相关问题请提交至该跟踪器):

https://gitee.com/thead-android/thead-android/issues

平头哥其他开源软件项目可以通过以下链接进行访问:

T-HEAD Yocto Linux: https://gitee.com/thead-yocto

YoC Open: https://gitee.com/yocop

若希望了解更多TH1520原形及无剑600平台信息可以访问:

https://xuantie.t-head.cn/product/wujian/4080405462988689408

若希望了解更多RISC-V架构安卓支持的动态，可以订阅RISC-V Android SIG邮件列表，参与社区讨论:

https://lists.riscv.org/g/sig-android

若对RISC-V架构的安卓支持有任何疑问，可以提交问题至Android-riscv64的通用问题跟踪:

https://github.com/google/android-riscv64/issues

## 许可证

我们不需要任何正式的版权转让或贡献者许可协议。任何有意向本仓库提交的贡献都被认为是按照Apache许可证2.0条款提供的。有关详细信息请参见LICENSE文件。

## 关于我们
该仓库由阿里巴巴平头哥维护。

若需要技术支持可以通过OCC提交工单:
https://occ.t-head.cn/people/workorder-submit

也可以通过以下方式联系我们:
邮箱: occ_thead@service.alibaba.com
