个人比较习惯使用 schroot 来管理 chroot 容器,所以这次也用同样的方式来建立 Milkv Duo 的开发环境
请对照官方文档 GitHub - milkv-duo/duo-buildroot-sdk: Milk-V Duo Official buildroot SDK 食用
debootstrap
官方文档推荐使用 Ubuntu 20.04 LTS ,所以首先建立一个可用的 ubuntu focal chroot 环境。把它放在哪里是随意的,只要 schroot 的配置文件写对就行。
sudo mkdir milkv-duo-dev
cd milkv-duo-dev
sudo debootstrap focal . https://mirrors.bfsu.edu.cn/ubuntu/
编辑 hosts ,否则运行一些命令如 sudo
会出现 unknow host
的报错,这里假设 hostname 为 youmu7590
。
sudo vim etc/hosts
# 添加
127.0.0.1 youmu7590
按照 bfsu 帮助(或者你喜欢的镜像站)编辑完整的镜像源配置
vim etc/apt/sources.list
deb http://mirrors.bfsu.edu.cn/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.bfsu.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.bfsu.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
这样 chroot 环境就搭建完成了
配置 schroot
schroot 的配置注意类型一定要指定 type=directory
, profile=focal
指定了 /etc/schroot/focal
目录下的配置文件。另外还假设了一个叫 youmu
的普通用户,请改成你自己
cat /etc/schroot/chroot.d/milkv-duo-dev
[milkv-duo-dev]
type=directory
description=ubuntu focal for milkv duo build
directory=/YOUR/PATH/TO/milkv-duo-dev
users=youmu,root
root-users=youmu,root
groups=youmu
root-groups=root
profile=focal
preserve-environment=true
复制宿主机的 resolv.conf 保证 chroot 后网络是正常的
cat /etc/schroot/focal/copyfiles
# Files to copy into the chroot from the host system.
#
# <source and destination>
/etc/resolv.conf
fstab 是从默认配置复制过来的,但是注释掉了 /home
目录
cat /etc/schroot/focal/fstab
# fstab: static file system information for chroots.
# Note that the mount point will be prefixed by the chroot path
# (CHROOT_PATH)
#
# <file system> <mount point> <type> <options> <dump> <pass>
/proc /proc none rw,bind 0 0
/sys /sys none rw,bind 0 0
/dev /dev none rw,bind 0 0
/dev/pts /dev/pts none rw,bind 0 0
#/home /home none rw,bind 0 0
/tmp /tmp none rw,bind 0 0
# It may be desirable to have access to /run, especially if you wish
# to run additional services in the chroot. However, note that this
# may potentially cause undesirable behaviour on upgrades, such as
# killing services on the host.
/run /run none rw,bind 0 0
/run/lock /run/lock none rw,bind 0 0
/dev/shm /dev/shm none rw,bind 0 0
/run/shm /run/shm none rw,bind 0 0
这个没啥需要的,直接空就行
cat /etc/schroot/focal/nssdatabases
# empty
最后检查一下配置已经生效
schroot -l
chroot:milkv-duo-dev
配置 chroot 环境
直接进入
schroot -c milkv-duo-dev -u root
此时你应该成功进入 ubuntu focal 了,首先添加普通用户,还是以 youmu
为例
useradd -m -G sudo youmu
passwd youmu
chsh youmu -s /bin/bash
配置 locale
dpkg-reconfigure locales
按自己习惯配置。我打开了 en_SG.UTF-8 UTF-8
、 en_US.UTF-8 UTF-8
和 zh_CN.UTF-8 UTF-8
,默认选择了 en_SG.UTF-8 UTF-8
安装 vim ,或者你自己喜欢的文本编辑器,否则就只能用 vi
啦
apt-get install vim
安装编译依赖的工具,这部分是从官方文档抄过来的,如果有更新请依照官方文档
apt-get install pkg-config build-essential ninja-build automake autoconf libtool wget curl git gcc libssl-dev bc slib squashfs-tools android-sdk-libsparse-utils jq python3-distutils scons parallel tree python3-dev python3-pip device-tree-compiler ssh cpio fakeroot libncurses5 flex bison libncurses5-dev genext2fs rsync unzip dosfstools mtools tclsh ssh-client android-sdk-ext4-utils
官方文档说软件源中的 cmake 版本过低,那么我瞅瞅软件源中的 cmake 版本
apt-cache show cmake
版本为 3.16.3 ,低于所需最低版本要求 3.16.5 ,那么继续按照官方文档所说安装 cmake
mkdir cmake && cd cmake
wget https://github.com/Kitware/CMake/releases/download/v3.26.4/cmake-3.26.4-linux-x86_64.sh
chmod +x cmake-3.26.4-linux-x86_64.sh
sh cmake-3.26.4-linux-x86_64.sh --skip-license --prefix=/usr/local/
cmake --version
版本输出应为 cmake version 3.26.4
安装 sdk 并生成镜像
克隆工程并进入目录
git clone https://github.com/milkv-duo/duo-buildroot-sdk.git
cd duo-buildroot-sdk/
由于我不使用摄像头,故修改 ION_SIZE
为 0 ,否则能用的 RAM 只有 28M
vim build/boards/cv180x/cv1800b_milkv_duo_sd/memmap.py
# line 43
ION_SIZE = 0
开始一键编译
./build_milkv.sh
最后可以看到编译成功的 log
Gen image successful: out/milkv-duo-20230815-1332.img
启动 Milkv Duo
烧录镜像,直接 dd
,镜像名和设备名改成你自己的
镜像很小,所以整个过程很快,烧录完记得 sync 再拔出
dd if=out/milkv-duo-20230815-1332.img of=/dev/sdX bs=4M status=progress
sync
插入板子后上电,首先红色电源灯亮,几秒钟后蓝色灯开始闪烁。此时 lsusb
可以看到 RNDIS 网络设备 ID 3346:1009 Cvitek RNDIS
,也可以使用 ip addr
查看 IP 地址
注意 ip addr
查看的 IP 地址为本机地址而不是 Milkv Duo 的地址,示例如下
4: enp0s20f0u2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
link/ether fa:4e:06:3b:e4:d9 brd ff:ff:ff:ff:ff:ff
inet 192.168.42.82/24 brd 192.168.42.255 scope global dynamic noprefixroute enp0s20f0u2
valid_lft 1995sec preferred_lft 1995sec
inet6 fe80::79a8:59c8:efb8:26a8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
在这个示例中,本机地址为 192.168.42.82
, milkv 地址应为 192.168.42.1
, ssh root@192.168.42.1
即可登陆,密码为 milkv
查看 RAM 一共是 55M 可用
[root@milkv]~# free -m
total used free shared buff/cache available
Mem: 55 12 37 0 5 38
Swap: 0 0 0