Milk-V SDK折腾笔记
这两天弄到了块 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"/sample
到popd
的内容也注释掉。 - 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