# Riscv Yocto 仓库构建说明

## 仓库下载

1. 为了加速软件下载，所有用到的软件仓库都放在 `https://gitee.com/thead-yocto` 下。

2. 因为要使用 repo 管理，下载软件仓库，需要在 PC 上预先安装好 git，repo 等工具。

   repo 建议使用清华源加速，安装设置参考：`https://mirrors.tuna.tsinghua.edu.cn/help/git-repo/`

3. Yocto 编译过程中需要下载软件进行编译、安装等，可以设置一个公共目录存放。当遇到下载速度慢的时候，可以使用手动下载，更改下载源等手段加速。

4. 软件仓库下载：

   ```bash
   mkdir riscv_yocto
   cd riscv_yocto
   repo init -u git@gitee.com:thead-yocto/manifests.git -m riscv-yocto.xml
   repo sync -c -d -j16
   ```



## 工具链安装

1. 下载工具链 + sysroot 软件：host.gcc-8.1.0.tar.gz

2. 安装工具链

   ```bash
   mkdir ~/.thead
   
   # 将下载的 host.gcc-8.1.0.tar.gz 解压到 ~/.thead
   tar zxf host.gcc-8.1.0.tar.gz -C ~/.thead
   
   # 也可以将工具链放到其他位置，同时修改 meta-riscv/conf/machine/include/thead-base.inc 即可
   ```



## 安装编译环境

1. 推荐使用 ubuntu18.04 或 ubuntu20.04 的环境进行编译。

2. 安装依赖

   > TODO

3. 使用 docker 环境

   > TODO



## 编译

1. 代码目录

   ```bash
   riscv_yocto
   ├── meta-external-toolchain
   ├── meta-openembedded
   ├── meta-riscv
   ├── openembedded-core
   └── thead-build
       ├── downloads -> MY/YOCTO/DOWNLOADS   # 可以手动创建链接指向共享下载目录
       ├── ice-base           # 默认编译 MACHINE=ice 的镜像
       │   ├── conf
       │   └── README.md
       ├── ice-xfce           # 默认编译 MACHINE=ice 的xfce镜像
       │   ├── conf
       │   └── README.md
       ├── qemuriscv64        # 默认编译 MACHINE=qemuriscv64 的镜像
       └── sstate-cache       # 编译时自动生成
   ```

2. 编译

   ```bash
   # 在 yocto 工程根目录 riscv_yocto/ 下执行：
   source openembedded-core/oe-init-build-env thead-build/ice-base  # 将 build 目录指定为 thead-build/ice-base
   
   # 确认 downloads 文件夹：设置一个存放 yocto 下载文件的共享目录 SHARE_YOCTO_DOWNLOAD_FILE_FOLDER
   ln -s SHARE_YOCTO_DOWNLOAD_FILE_FOLDER/ ../downloads
   
   # 编译：thead-build/ice-base/conf/auto.conf 中默认设置为 MACHINE ?= "ice"
   bitbake core-image-minimal
   
   # 如果要编译其他target MACHINE，可加入 MACHINE=xxx 进行指定
   MACHINE=qemuriscv64 bitbake core-image-minimal
   
   # sstate-cache/ 会放在 thead-build/ 下，不同配置可以共享使用
   ```

3. 输出

   ```bash
   # 镜像文件
   ./build/tmp-glibc/deploy/images/ice
   ```

   