这两天弄到了块 Milk-V Duo,他的 SDK 项目管理非常地辣鸡。修改以下部分可以把编译过程变得比较像个正常人(发布在仓库 https://github.com/melonedo/duo-buildroot-sdk):

  • 不需要 Ubuntu 22.04,20.04 也能用,唯一的限制应该是 Ubuntu 20.04 的 CMake 版本比较老, buildroot 不兼容,手动装一个就好。
  • 如果要使用 TUI 修改内核设置,参考Duo-buildroot-sdk的 buildroot配置 和 kernel配置 教程 ,附带一个usb摄像头固件,执行menuconfig_kernel后把 .config 文件复制到 build 目录下,否则 linux 会拒绝编译并让你make mrproper(作用是把 .config 删掉)。下面使用的 SDK 版本是Duo-V1.1.0
    source build/milkvsetup.sh
    defconfig cv1800b_milkv_duo_sd
    # Linux 配置
    menuconfig_kernel
    cp linux_5.10/build/cv1800b_milkv_duo_sd/.config \
     build/boards/cv180x/cv1800b_milkv_duo_sd/linux/cvitek_cv1800b_milkv_duo_sd_defconfig
    # Buildroot 配置
    cd buildroot-2021.05
    make menuconfig
    cp .config configs/milkv-duo_musl_riscv64_defconfig
    
  • Milk-V Duo 的部分文档在 https://github.com/milkv-duo/duo-files/tree/main/duo
  • build.sh 里面的clean_all可以直接注释掉,或者有问题了再运行。
  • build.sh 一开始有找不到*.img*的报错或者找不到_build_opensbi_env是正常的。
  • buildroot-2021.05/fs/common.mk 中, BR2_TARGET_ROOTFS_TAR_XZ=y删除 ,或者把ROOTFS_$(2)_COMPRESS_CMD = xz -9 -C crc32 -c 中的-9改成-1可以大大加快压缩速度。由于后面sd_image目标会硬编码 rootfs.tar.xz,把删除去掉会导致无法更新 overlay。为了避免这个问题,可以在 build.sh 里rm buildroot-2021.05/output/milkv-duo_musl_riscv64/images/rootfs.tar.xz
  • brmake错了不要怕,这个脚本的用处只是把make的输出放到 br.log。看 br.log 修正即可,大概率是缺库导致的(会缺好几个)。
  • 修改 device/milkv-duo/genimage.cfg 中 image rootfs.ext4 下的大小可以减少镜像大小,加速运行。这步可以大大加速编译。400M 似乎不错。
  • device/common/overlay 中可以添加自己的文件,br_overlay 只有贴了闪存才有用。
  • build/Makefile 中,把${Q}find $(ROOTFS_DIR) -name xxx -type f -printf 'striping %p\n' -exec xxxxx \; 中的-printf 'striping %p\n'去掉,可以避免输出一大串striping xxx
  • build/Makefile 中,把sd_image目标下的tar xvf的v参数去掉,不然会把整个根目录都输出到控制台。
  • 编的一大堆 sample 看起来没什么用,而且每次都编,要清除可以把 middleware/v2/sample/ive/Makefile 中的SRCS = xxx改成SRCS =,并且把 build/milkvsetup.sh 中pushd "$MW_PATH"/samplepopd的内容也注释掉。
  • freertos/cvitek/scripts/ParseConfiguration.cmake 中有一句message("${conf_name}=${value}")会把配置项都打印出来,不关心的话可注释掉。
  • linux 和 u-boot 都会用 mkmakefile 生成 Makefile,似乎会导致每次都重新编译一部分代码,不知道如何解决。
  • 烧录代码用 dd 没有进度提示,可以安装 pv 命令后建一个脚本 dd if=$1 | pv -s `du -b $1 | cut -f -1` | sudo dd of=$2,再用 burn.sh out/xx.image /dev/sdX可以提示进度。参考 https://askubuntu.com/questions/215505/how-do-you-monitor-the-progress-of-dd
  • ssh 每次都得删除指纹再加很难受,可以在 .ssh/config 里添加 Host milkv,选项中设置 UserKnownHostsFile NUL(linux 的 /dev/null 在 Windows 里对应 NUL)和StrictHostKeyChecking no ,这样每次只会警告。
    # C:\Users\melonedo\.ssh\config
    Host milkv
      HostName 192.168.42.1
      User root
      StrictHostKeyChecking no
      UpdateHostKeys no
      UserKnownHostsFile NUL