milkv 256duo初品
今天收到了 milkv 256duo,欢喜之下今天就来启动! 试试,
烧录的过程也很简单啦,在官方仓库里有详细的说明
环境
我这里使用的是win11下wsl,ubuntu20.04(由于我之前使用VMware的ubuntu虚拟机玩其他板子的不愉快经历,还是wsl好用,当然可能只是我的环境有问题,但是明明都是docker呢)
根据官方仓库烧录
milkv-duo/duo-buildroot-sdk:Milk-V Duo 官方 buildroot SDK (github.com)
根据仓库就好啦
windows下烧录的小伙伴如果使用的是balenaEtcher记得给予管理员权限,否则可能出现 你的镜像因为压缩受损这种提示
DUO启动!!!!!
只需使用使用ssh
ssh root@192.168.42.1
结果是正常进入啦
但是串口调试因为我没有焊针什么的暂时也没办法尝试
核间通信
Duo 的 CPU 采用双核设计,大核上跑的是 Linux 系统,小核上跑的是实时系统,当前是 FreeRTOS
这一点与我手上的k230是一致的所以我也想了解下如何进行核间通信。
参考milkv-duo/duo-examples:Milk-V Duo 官方 C/C++ 示例 (github.com)即可
当然你也可以自己写一个
运行前记得chmod +x mailbox_test 不然会因为权限不够而卡死(大概)
将开机脚本重命名
mv /mnt/system/blink.sh /mnt/system/blink.sh_backup && sync
蓝色led灯停止闪烁
此时再来运行./mailbox_test
led亮!。。。。怎么没亮
看一下输出结果吧
execve("./mailbox_test", ["./mailbox_test"], 0x3fffee5be0 /* 18 vars */) = 0
set_tid_address(0x3fc433aed8) = 327
brk(NULL) = 0x13000
brk(0x15000) = 0x15000
mmap(0x13000, 4096, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x13000
openat(AT_FDCWD, "/mnt/system/lib/libwiringx.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/mnt/system/usr/lib/libwiringx.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld-musl-riscv64.path", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/libwiringx.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/lib/libwiringx.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/libwiringx.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=268984, ...}) = 0
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\363\0\1\0\0\0@\300\0\0\0\0\0\0"..., 960) = 960
mmap(NULL, 274432, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x3fc4267000
mmap(0x3fc4288000, 139264, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x20000) = 0x3fc4288000
close(3) = 0
mprotect(0x3fc4288000, 4096, PROT_READ) = 0
mprotect(0x11000, 4096, PROT_READ) = 0
openat(AT_FDCWD, "/dev/cvi-rtos-cmdqu", O_RDWR|O_LARGEFILE) = 3
ioctl(3, _IOC(_IOC_WRITE, 0x72, 0x2, 0x8), 0x3fffcdcb80) = 0
nanosleep({tv_sec=1, tv_nsec=0}, 0x3fffcdcb60) = 0
ioctl(1, TIOCGWINSZ, {ws_row=41, ws_col=156, ws_xpixel=7, ws_ypixel=0}) = 0
writev(1, [{iov_base="C906B: cmd.param_ptr = 0x4", iov_len=26}, {iov_base="\n", iov_len=1}], 2C906B: cmd.param_ptr = 0x4
) = 27
nanosleep({tv_sec=3, tv_nsec=0}, 0x3fffcdcb60) = 0
ioctl(3, _IOC(_IOC_WRITE, 0x72, 0x1, 0x8), 0x3fffcdcb80) = 0
nanosleep({tv_sec=1, tv_nsec=0}, 0x3fffcdcb60) = 0
writev(1, [{iov_base="C906B: cmd.param_ptr = 0x3", iov_len=26}, {iov_base="\n", iov_len=1}], 2C906B: cmd.param_ptr = 0x3
) = 27
close(3) = 0
exit_group(0) = ?
+++ exited with 0 +++```
很显然这是缺少了 libwiringx.so
但是很奇怪根据文档wiringx | Milk-V (milkv.io)的描述,duo应该是支持的
本着不科学不严谨的态度 我将源码中的libwiringx.so直接粗暴引入
库的问题确实解决了 但是没有希望输出
期望输出
RT: [507.950049]prvQueueISR
RT: [507.952485]recv cmd(19) from C906B, param_ptr [0x00000002]
RT: [507.958306]recv cmd(19) from C906B...send [0x00000004] to C906B
C906B: cmd.param_ptr = 0x4
RT: [511.965433]prvQueueISR
RT: [511.967867]recv cmd(19) from C906B, param_ptr [0x00000003]
RT: [511.973689]recv cmd(19) from C906B...send [0x00000004] to C906B
C906B: cmd.param_ptr = 0x3```
实际输出
C906B: cmd.param_ptr = 0x4
C906B: cmd.param_ptr = 0x3```
还是没有rtos的相关输出。
可能是docker构建的镜像还不支持mailbox,下来再研究
然而官方的镜像也不行,需要串口,然而毕竟这块板子可是限定的纪念款,我还是小白,可能会弄坏。那我就似了qwq
暂时先告一段落。
总结
很有趣!
参考
Milk-V | 和群芯闪耀科技一起拥抱 RISC-V (milkv.io)
大部分内容都可以直接或间接的从文档中找到
后话
看到了社区MilkV Community里许多帖子,每天都有人在发,感觉相当有活力!!!