要快速构建一个基于Ubuntu22.04的Duo的开发环境,使用Docker是最方便的了。
Docker环境在Windows、macOS、Linux上都可以运行。要安装Docker,可以参考: Docker 安装 | 菜鸟教程
Duo官方的系统构建教程可查看: milk-v/duo-manifest (github.com)
在以下的步骤中:
- 主机:表示实际的操作系统,也就是你正在使用的电脑的操作系统
- docker环境:表示运行于docker里面的精简操作系统环境
一、建立Ubuntu22.04的基础docker环境:
- 先建立一个本地工作目录duo,方便在docker内外交换文件。
mkdir duo
cd duo
- 再拉取ubuntu22.04的docker官方镜像:
docker pull ubuntu:22.04
- 拉取完成后,就可以一步启动docker环境了:
docker run --name duo -it -v /dev:/dev --privileged -v $(pwd):/root/duo -w /root/duo ubuntu:22.04
注意:如果没有-v /dev:/dev --privileged
,则在后续执行pack_sd_image
打包镜像的时候会出错。
上述具体操作过程如下:
现在,基础的Ubuntu22.04环境,已经建立了,比真机和虚拟机安装Ubuntu,要快100万亿倍!!!
下面,就继续完成Duo开发环境的建立了,后续操作,都在docker环境内执行
- 注意:如退出或者重启过docker服务,可通过如下方式重新进入:
# 进入对应docker的bash环境:
docker exec -it duo bash
# 如上一步执行没有进入,或者提示duo没有启动,那就执行下一步好了:
docker start duo -i
二、部署Duo开发环境
- 先更新系统,安装基础的工具包:
apt update
apt install dialog python3-dev make git bc gcc flex bison ninja-build libssl-dev \
rsync pkg-config device-tree-compiler squashfs-tools parted dosfstools cpio unzip wget \
curl sudo fdisk udev
- 检查cmake版本:
官方安装指导中,需要手动下载cmake3.19版本安装,但上述环境启用后,直接使用apt install cmake即可,安装完检查版本即可,具体命令如下:
apt install cmake
cmake --version
- 安装pip,并设置系统默认python为python3
apt install python-is-python3 python3-pip
python -V
python3 -V
pip --version
注意:上面的1-3的安装软件包的步骤,其实可以一气呵成,一条命令安装:
apt install -y dialog python3-dev make git bc gcc flex bison ninja-build libssl-dev rsync pkg-config device-tree-compiler squashfs-tools parted dosfstools cpio unzip wget curl sudo fdisk udev cmake python-is-python3 python3-pip
- 安装最新版本的repo源码管理工具,并设置git信息:
# 安装repo
mkdir -p ~/.bin
PATH="${HOME}/.bin:${PATH}"
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
chmod a+rx ~/.bin/repo
# 设置git信息:
git config --global user.email "你的github邮箱名"
git config --global user.name "你的github用户名"
- 获取duo的sdk源码:
cd ~/duo
repo init -u https://github.com/milk-v/duo-manifest.git -b main -m milk-v_duo_cv180xb_sdk.xml
repo sync
在使用repo获取源码的时候,最可能遇到的一个问题就是需要使用代理,可以参考下面的命令来使用repo:
env https_proxy=192.168.1.100:8080 repo repo的其他参数
现在Duo的sdk已经拿回来了,可以进行编译了。
三、编译Duo系统
编译的详细指令如下:
source build/cvisetup.sh
defconfig cv1800b_sophpi_duo_sd
clean_all
build_all
pack_sd_image
然而,在build_all的过程中,我们会遇到著名的问题:error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
要解决这个问题,我们需要安装对应版本的lisbssl就可以了,参考 How install libssl1.1 on ubuntu 22.04 和 Ubuntu 22.04 源码安装 openssl 1.1 ,具体指令如下:
# 回到主机环境,执行下面的命令,进入duo的docker环境,相当于开了一个新的黑窗口
docker exec -it duo bash
# 在进入的docker环境执行
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4_amd64.deb
dpkg -i libssl1.1_1.1.0g-2ubuntu4_amd64.deb
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz
tar xzvf openssl-1.1.1q.tar.gz
cd openssl-1.1.1q
make
make install
echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/local/lib" >> /etc/profile
exit
安装openssl完成后,回到之前的docker环境,再次进行编译:【一定要clean_all一次】
source /etc/profile
clean_all
build_all
最终结果如下,表示编译成功:
此时,再执行打包镜像命令即可:
pack_sd_image
打包成功后,输出如下:
具体的文件路径位于:~/duo/install/soc_cv1800b_sophpi_duo_sd/sophpi-duo-20230523-0723.img
四、获取编译后的镜像文件
上述最后一步,得到了打包后的镜像文件;此时,我们可以回到主机,查看对应的文件:
没有压缩的img文件很大,压缩后的img.tar.gz则很小。
这个镜像文件,就可以拿出来使用命令行的dd或者图形界面的balenaEtcher烧录到SD卡说用了。