【Milk-V Duo 开发板1积分体验】在 Archlinux 使用 schroot 建立 Milkv Duo 开发环境

个人比较习惯使用 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=directoryprofile=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-8en_US.UTF-8 UTF-8zh_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.1ssh 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
1 Like