- Build System: Ubuntu 22.04.3 LTS x86_64
- System Version: Duo-V1.0.9
- Download Link: Duo-Buildroot-SDK Releases
- Reference Installation Document: Duo-Buildroot-SDK
- FreeRTOS: FreeRTOS Core
- Milk-V Duo 64M
- A USB Power Adapter
- A USB-A to C or USB C to C Cable
- A microSD Card
- A USB to UART Debugger (e.g., CH340, CH341, FT2232, etc.)
- Three Jumper Wires
- Milk-V Duo pre-soldered with necessary pins for debugging
- Optional: Milk-V Duo IOB (Baseboard)
Clone the duo-examples repository locally and build the binary.
sudo apt install -y wget git make
git clone https://github.com/milkv-duo/duo-examples --depth=1
cd duo-examples
source envsetup.sh
cd mailbox-test
make
First, check available loop devices:
sudo losetup -f
Sample Output:
$ sudo losetup -f
/dev/loop16
Next, mount the downloaded image and copy the recently compiled binary into it:
sudo losetup /dev/loop16 milkv-duo-v1.0.9-2024-0226.img
sudo kpartx -av /dev/loop16
sudo mount /dev/mapper/loop16p2 /mnt
cp ~/duo-examples/mailbox-test/mailbox_test /mnt/root/
sudo umount /mnt
sudo kpartx -d /dev/loop1
sudo losetup -d /dev/loop16
Then, flash the modified image:
sudo dd if=milkv-duo-v1.0.9-2024-0226.img of=/dev/sdc bs=4M status=progress oflag=direct
At this stage, the storage card is prepared. Insert it into the development board and get ready to boot.
Logging into the system via the serial port.
The system should boot normally. After logging in through the onboard serial port, the mailbox_test
binary should run, causing the onboard blue LED to turn on and then off.
(In standby mode, the blue LED should blink)
The system booted successfully, logging in through the onboard serial port was successful, and the mailbox_test
ran correctly with the onboard LED turning on and then off.
[ 7.841103] sync_task_init:177(): sync_task_init vi_pipe 1
[ 7.847065] sync_task_init:177(): sync_task_init vi_pipe 2
[ 7.853504] vi_core_probe:252(): isp registered as cvi-vi
[ 7.907831] cvi_dwa_probe:487(): done with rc(0).
[ 7.937525] cv180x-cooling cv180x_cooling: elems of dev-freqs=6
[ 7.943796] cv180x-cooling cv180x_cooling: dev_freqs[0]: 850000000 500000000
[ 7.951586] cv180x-cooling cv180x_cooling: dev_freqs[1]: 425000000 375000000
[ 7.959250] cv180x-cooling cv180x_cooling: dev_freqs[2]: 425000000 300000000
[ 7.966985] cv180x-cooling cv180x_cooling: Cooling device registered: cv180x_cooling
[ 8.002672] jpu ctrl reg pa = 0xb030000, va = (____ptrval____), size = 256
[ 8.010370] end jpu_init result = 0x0
[ 8.132269] cvi_vc_drv_init result = 0x0
[ 8.147188] sh (166): drop_caches: 3
Starting app...
[root@milkv-duo]~# ls
mailbox_test
[root@milkv-duo]~# ./mailbox_test
RT: [30.619843]prvQueueISR
RT: [30.622192]recv cmd(19) from C906B, param_ptr [0x00000002]
RT: [30.627922]recv cmd(19) from C906B...send [0x00000004] to C906B
C906B: cmd.param_ptr = 0x4
RT: [34.634965]prvQueueISR
RT: [34.637311]recv cmd(19) from C906B, param_ptr [0x00000003]
RT: [34.643042]recv cmd(19) from C906B...send [0x00000004] to C906B
C906B: cmd.param_ptr = 0x3
[root@milkv-duo]~#
Screen recording:
Successful: The actual result matches the expected result.
Failed: The actual result does not match the expected result.
Test successful.