I got one Jetson AGX Xavier unused for quite long. There are a couple of reasons prohibiting me from using it.

0. My Working Environment

1
2
3
4
5
6
7
8
9
$ lsb_release -a             
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04 LTS
Release: 24.04
Codename: noble

$ uname -r
6.8.0-36-generic

1. Jetson Embedded Products

1.1 GPU Compute Capability

Jetson Model Compute Capability
Jetson Orin Series including: Jetson AGX Orin, Jetson Orin NX, Jetson Orin Nano 8.7
Jetson Xavier Series including: Jetson AGX Xavier, Jetson Xavier NX 7.2
Jetson TX2 6.2
Jetson Nano including: default Jetson Nano 4GB, Jetson Nano 2GB 5.3

1.2 JetPack Version Compatability

1.2.1 Jetson Nano Series

Specification Jetson Nano 4GB Jetson Nano 2GB
JetPack Versions 4.2 ~ 4.6.5 4.4 ~ 4.6.5
CUDA Cores 128 128
Compute Capability 5.3 5.3
GPU Architecture Maxwell Maxwell
Memory 4GB LPDDR4 2GB LPDDR4
AI Performance 472 GFLOPs 472 GFLOPs

1.2.2 Jetson Xavier Series

Specification Jetson AGX Xavier 32GB Jetson AGX Xavier 8GB
JetPack Versions 4.2 ~ 5.1.3 4.4 ~ 5.1.3
CUDA Cores 512 512
Compute Capability 7.2 7.2
GPU Architecture Volta Volta
Memory 32GB LPDDR4x 8GB LPDDR4x
AI Performance 11 TFLOPs (FP16) 11 TFLOPs (FP16)

1.2.3 Jetson Orin Series

Specification Jetson AGX Orin 64GB Jetson AGX Orin 32GB Jetson Orin NX 16GB Jetson Orin NX 8GB Jetson Orin Nano 8GB Jetson Orin Nano 4GB
JetPack Versions 5.0 Developer Preview - 6.0 5.0 Developer Preview - 6.0 5.0 Developer Preview - 6.0 5.0 Developer Preview - 6.0 5.0 Developer Preview - 6.0 5.0 Developer Preview - 6.0
CUDA Cores 2048 2048 1024 1024 512 512
Compute Capability 8.7 8.7 8.7 8.7 8.7 8.7
GPU Architecture Ampere Ampere Ampere Ampere Ampere Ampere
Memory 64GB LPDDR5 32GB LPDDR5 16GB LPDDR5 8GB LPDDR5 8GB LPDDR5 4GB LPDDR5
AI Performance up to 200 TOPs up to 200 TOPs up to 70 TOPs up to 70 TOPs up to 40 TOPs up to 40 TOPs

1.3 Jetson Download Center

A variety of software can be download from Jetson Download Center.

2. My Jetson Embedded Boards

I actually have 4 Jetson embedded boards:

I don’t have an embedded board of Jetson Orin Series at all, for it was FIRSTLY on the market in August 2022 (Please refer to: NVIDIA® Jetson Orin™: A Breakthrough in Industrial Edge AI). I mean: it’s a kind of toooo new and toooo expensive to be purchased. For ever since that time, a variety of single board computers with made-in-China NPUs are much much much cheaper than Jetson Orin Series. Yeah, 10 times cheaper guaranteed.

2.1 Jetson Nano 2GB for JetBot

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
➜  ~ cat /proc/cpuinfo
processor : 0
model name : ARMv8 Processor rev 1 (v8l)
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x1
CPU part : 0xd07
CPU revision : 1

processor : 1
model name : ARMv8 Processor rev 1 (v8l)
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x1
CPU part : 0xd07
CPU revision : 1

processor : 2
model name : ARMv8 Processor rev 1 (v8l)
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x1
CPU part : 0xd07
CPU revision : 1

processor : 3
model name : ARMv8 Processor rev 1 (v8l)
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x1
CPU part : 0xd07
CPU revision : 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
➜  ~ cat /proc/meminfo
MemTotal: 2027240 kB
MemFree: 304868 kB
MemAvailable: 1619252 kB
Buffers: 301640 kB
Cached: 978212 kB
SwapCached: 0 kB
Active: 591384 kB
Inactive: 838300 kB
Active(anon): 77428 kB
Inactive(anon): 112776 kB
Active(file): 513956 kB
Inactive(file): 725524 kB
Unevictable: 828 kB
Mlocked: 0 kB
SwapTotal: 5207916 kB
SwapFree: 5207796 kB
Dirty: 272 kB
Writeback: 0 kB
AnonPages: 143560 kB
Mapped: 168900 kB
Shmem: 39548 kB
Slab: 217244 kB
SReclaimable: 162968 kB
SUnreclaim: 54276 kB
KernelStack: 4384 kB
PageTables: 3520 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 6221536 kB
Committed_AS: 1029676 kB
VmallocTotal: 263061440 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
AnonHugePages: 40960 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
NvMapMemFree: 2048 kB
NvMapMemUsed: 21324 kB
CmaTotal: 65536 kB
CmaFree: 13236 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
1
2
3
4
5
6
7
8
9
10
➜  ~ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk0p1 58G 29G 28G 51% /
none 951M 0 951M 0% /dev
tmpfs 990M 4.0K 990M 1% /dev/shm
tmpfs 990M 38M 953M 4% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 990M 0 990M 0% /sys/fs/cgroup
tmpfs 198M 4.0K 198M 1% /run/user/121
tmpfs 198M 0 198M 0% /run/user/1000

2.2 Jetson Nano from ShenZhen Longer Vision Technology

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
➜  ~ cat /proc/cpuinfo
processor : 0
model name : ARMv8 Processor rev 1 (v8l)
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x1
CPU part : 0xd07
CPU revision : 1

processor : 1
model name : ARMv8 Processor rev 1 (v8l)
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x1
CPU part : 0xd07
CPU revision : 1

processor : 2
model name : ARMv8 Processor rev 1 (v8l)
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x1
CPU part : 0xd07
CPU revision : 1

processor : 3
model name : ARMv8 Processor rev 1 (v8l)
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x1
CPU part : 0xd07
CPU revision : 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
➜  ~ cat /proc/meminfo
MemTotal: 4059260 kB
MemFree: 1409344 kB
MemAvailable: 2538768 kB
Buffers: 30120 kB
Cached: 1254004 kB
SwapCached: 0 kB
Active: 1017736 kB
Inactive: 1170840 kB
Active(anon): 905764 kB
Inactive(anon): 45076 kB
Active(file): 111972 kB
Inactive(file): 1125764 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2029616 kB
SwapFree: 2029616 kB
Dirty: 152 kB
Writeback: 0 kB
AnonPages: 898652 kB
Mapped: 560276 kB
Shmem: 46388 kB
Slab: 102792 kB
SReclaimable: 46832 kB
SUnreclaim: 55960 kB
KernelStack: 6160 kB
PageTables: 7752 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 4059244 kB
Committed_AS: 2500320 kB
VmallocTotal: 263061440 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
AnonHugePages: 131072 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
NvMapMemFree: 0 kB
NvMapMemUsed: 258692 kB
CmaTotal: 475136 kB
CmaFree: 441280 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
1
2
3
4
5
6
7
8
9
10
➜  ~ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk0p1 14G 12G 1.2G 92% /
none 1.8G 0 1.8G 0% /dev
tmpfs 2.0G 19M 2.0G 1% /dev/shm
tmpfs 2.0G 28M 2.0G 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
tmpfs 397M 12K 397M 1% /run/user/120
tmpfs 397M 0 397M 0% /run/user/1000

2.3 Jetson Xavier NX from ShenZhen Longer Vision Technology

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
➜  ~ cat /proc/cpuinfo
processor : 0
model name : ARMv8 Processor rev 0 (v8l)
BogoMIPS : 62.50
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x4e
CPU architecture: 8
CPU variant : 0x0
CPU part : 0x004
CPU revision : 0
MTS version : 50168445

processor : 1
model name : ARMv8 Processor rev 0 (v8l)
BogoMIPS : 62.50
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x4e
CPU architecture: 8
CPU variant : 0x0
CPU part : 0x004
CPU revision : 0
MTS version : 50168445

processor : 2
model name : ARMv8 Processor rev 0 (v8l)
BogoMIPS : 62.50
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x4e
CPU architecture: 8
CPU variant : 0x0
CPU part : 0x004
CPU revision : 0
MTS version : 50168445

processor : 3
model name : ARMv8 Processor rev 0 (v8l)
BogoMIPS : 62.50
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x4e
CPU architecture: 8
CPU variant : 0x0
CPU part : 0x004
CPU revision : 0
MTS version : 50168445

processor : 4
model name : ARMv8 Processor rev 0 (v8l)
BogoMIPS : 62.50
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x4e
CPU architecture: 8
CPU variant : 0x0
CPU part : 0x004
CPU revision : 0
MTS version : 50168445

processor : 5
model name : ARMv8 Processor rev 0 (v8l)
BogoMIPS : 62.50
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x4e
CPU architecture: 8
CPU variant : 0x0
CPU part : 0x004
CPU revision : 0
MTS version : 50168445
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
➜  ~ cat /proc/meminfo
MemTotal: 7958064 kB
MemFree: 6376676 kB
MemAvailable: 6968608 kB
Buffers: 31648 kB
Cached: 706620 kB
SwapCached: 0 kB
Active: 422156 kB
Inactive: 581804 kB
Active(anon): 267236 kB
Inactive(anon): 27908 kB
Active(file): 154920 kB
Inactive(file): 553896 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 3979008 kB
SwapFree: 3979008 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 254048 kB
Mapped: 187980 kB
Shmem: 29456 kB
Slab: 132884 kB
SReclaimable: 60592 kB
SUnreclaim: 72292 kB
KernelStack: 6640 kB
PageTables: 5892 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 7958040 kB
Committed_AS: 1977692 kB
VmallocTotal: 263061440 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
AnonHugePages: 90112 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
NvMapMemFree: 704 kB
NvMapMemUsed: 27852 kB
CmaTotal: 753664 kB
CmaFree: 704152 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
1
2
3
4
5
6
7
8
9
10
➜  ~ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk0p1 14G 13G 253M 99% /
none 3.5G 0 3.5G 0% /dev
tmpfs 3.8G 4.0K 3.8G 1% /dev/shm
tmpfs 3.8G 29M 3.8G 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
tmpfs 778M 12K 778M 1% /run/user/120
tmpfs 778M 0 778M 0% /run/user/1000

2.4 Jetson AGX Xavier

2.4.1 Failed to Flash via NVidia SDK Manager

2.4.1.1 lsusb

1
2
3
4
$ lsusb
......
Bus 009 Device 042: ID 0955:7019 NVIDIA Corp. APX
......

2.4.1.2 No available releases for host OS: [Ubuntu 24.04]

Select Jetson AGX Xavier No available releases for host OS: Ubuntu 24.04
NVidia SDK Manager Jetson AGX Xavier NVidia SDK Manager No Available Release for Host

2.4.2 Try SD Car Image

Download JP513-xnx-sd-card-image_b29.zip.

1
2
3
4
5
6
7
$ sudo dd if=./sd-blob.img of=/dev/sdb bs=1M status=progress conv=fsync 
[sudo] password for lvision:
17746100224 bytes (18 GB, 17 GiB) copied, 26 s, 683 MB/s18153996288 bytes (18 GB, 17 GiB) copied, 26.5595 s, 684 MB/s

17313+0 records in
17313+0 records out
18153996288 bytes (18 GB, 17 GiB) copied, 1617.17 s, 11.2 MB/s

However, Jetson AGX Xavier is NOT booting, but ONLY black screen.

The answer is at NVidia Forum Issue 189348 - Black Screen: Do you know that you are talking about AGX Xavier but not NX? Only NX and Nano have and support sdcard image. Other platforms do not. It’s also clearly clarified in the table on NVidia’s official page: NVidia SDK Manager.

2.4.3 Finally, Negotiated to Use Ubuntu 20.04

2.4.3.1 Installation Using NVidia SDK Manager on Ubuntu 20.04

NVidia SDK Manager Installation Step 1 NVidia SDK Manager Installation Step 2
NVidia SDK Manager Step 1 NVidia SDK Manager Step 2
NVidia SDK Manager Installation Step 3-1 NVidia SDK Manager Installation Step 3-2
:----------: :----------:
NVidia SDK Manager Step 3-1 NVidia SDK Manager Step 3-2
NVidia SDK Manager Installation Step 4
NVidia SDK Manager Step 4

2.4.3.2 ssh Into Jetson AGX Xavier

Jetson AGX Xavier 32G

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
lvision@ubuntu:~$ cat /proc/cpuinfo
processor : 0
model name : ARMv8 Processor rev 0 (v8l)
BogoMIPS : 62.50
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm dcpop
CPU implementer : 0x4e
CPU architecture: 8
CPU variant : 0x0
CPU part : 0x004
CPU revision : 0
MTS version : 72064061

processor : 1
model name : ARMv8 Processor rev 0 (v8l)
BogoMIPS : 62.50
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm dcpop
CPU implementer : 0x4e
CPU architecture: 8
CPU variant : 0x0
CPU part : 0x004
CPU revision : 0
MTS version : 72064061

processor : 2
model name : ARMv8 Processor rev 0 (v8l)
BogoMIPS : 62.50
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm dcpop
CPU implementer : 0x4e
CPU architecture: 8
CPU variant : 0x0
CPU part : 0x004
CPU revision : 0
MTS version : 72064061

processor : 3
model name : ARMv8 Processor rev 0 (v8l)
BogoMIPS : 62.50
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm dcpop
CPU implementer : 0x4e
CPU architecture: 8
CPU variant : 0x0
CPU part : 0x004
CPU revision : 0
MTS version : 72064061
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
lvision@ubuntu:~$ cat /proc/meminfo
MemTotal: 31734344 kB
MemFree: 29595460 kB
MemAvailable: 30582508 kB
Buffers: 32896 kB
Cached: 1265972 kB
SwapCached: 0 kB
Active: 410632 kB
Inactive: 1243424 kB
Active(anon): 2380 kB
Inactive(anon): 395220 kB
Active(file): 408252 kB
Inactive(file): 848204 kB
Unevictable: 21408 kB
Mlocked: 0 kB
SwapTotal: 15867168 kB
SwapFree: 15867168 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 371788 kB
Mapped: 232932 kB
Shmem: 21004 kB
KReclaimable: 72332 kB
Slab: 156660 kB
SReclaimable: 72332 kB
SUnreclaim: 84328 kB
KernelStack: 8128 kB
PageTables: 11020 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 31734340 kB
Committed_AS: 2774872 kB
VmallocTotal: 135290159040 kB
VmallocUsed: 90948 kB
VmallocChunk: 0 kB
Percpu: 4384 kB
HardwareCorrupted: 0 kB
AnonHugePages: 137216 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
FileHugePages: 0 kB
FilePmdMapped: 0 kB
CmaTotal: 65536 kB
CmaFree: 16172 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
1
2
3
4
5
6
7
8
9
10
lvision@ubuntu:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk0p1 28G 19G 7.1G 73% /
none 16G 0 16G 0% /dev
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 3.1G 19M 3.1G 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 16G 0 16G 0% /sys/fs/cgroup
tmpfs 3.1G 16K 3.1G 1% /run/user/124
tmpfs 3.1G 8.0K 3.1G 1% /run/user/1000

Today, we’re playing Intel RealSense Depth Camera D435 and Intel RealSense Depth Modules and Processors.

0. My Working Environment

1
2
3
4
5
6
7
8
9
$ lsb_release -a             
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04 LTS
Release: 24.04
Codename: noble

$ uname -r
6.8.0-36-generic

1. Intel RealSense

1.1 Overview

Intel RealSense D435 Frontal

1.2 Hardware Specification

Refer to Tech Specs pdf.

2. lsusb and Demonstration

2.1 lsusb

Respectively, I got:

1
2
$ lsusb | grep -i RealSense
Bus 010 Device 012: ID 8086:0b07 Intel Corp. RealSense D435
1
2
$ lsusb | grep -i RealSense
Bus 010 Device 004: ID 8086:0ad4 Intel Corp. Intel(R) RealSense(TM) Depth Camera 430

2.2 realsense-viewer

2.2.1 Intel RealSense Depth Camera D435

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ realsense-viewer
05/07 15:16:42,021 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video0 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-4/10-4:1.0/video4linux/video0
05/07 15:16:42,099 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video1 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-4/10-4:1.0/video4linux/video1
05/07 15:16:42,101 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video2 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-4/10-4:1.0/video4linux/video2
05/07 15:16:42,103 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video3 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-4/10-4:1.0/video4linux/video3
05/07 15:16:42,104 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video4 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-4/10-4:1.3/video4linux/video4
05/07 15:16:42,106 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video5 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-4/10-4:1.3/video4linux/video5
05/07 15:16:42,108 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video6 realpath=/sys/devices/pci0000:00/0000:00:08.1/0000:05:00.3/usb1/1-2/1-2:1.0/video4linux/video6
05/07 15:16:42,211 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video7 realpath=/sys/devices/pci0000:00/0000:00:08.1/0000:05:00.3/usb1/1-2/1-2:1.0/video4linux/video7
05/07 15:16:42,498 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video0 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-4/10-4:1.0/video4linux/video0
05/07 15:16:42,499 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video1 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-4/10-4:1.0/video4linux/video1
05/07 15:16:42,500 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video2 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-4/10-4:1.0/video4linux/video2
05/07 15:16:42,501 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video3 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-4/10-4:1.0/video4linux/video3
05/07 15:16:42,502 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video4 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-4/10-4:1.3/video4linux/video4
05/07 15:16:42,503 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video5 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-4/10-4:1.3/video4linux/video5
05/07 15:16:42,504 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video6 realpath=/sys/devices/pci0000:00/0000:00:08.1/0000:05:00.3/usb1/1-2/1-2:1.0/video4linux/video6
05/07 15:16:42,505 INFO [135660990636032] (backend-v4l2.cpp:753) Enumerating UVC video7 realpath=/sys/devices/pci0000:00/0000:00:08.1/0000:05:00.3/usb1/1-2/1-2:1.0/video4linux/video7
05/07 15:16:42,506 INFO [135660990636032] (context.cpp:116) ... /sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-4/10-4:1.0/video4linux/video0
05/07 15:16:42,506 INFO [135660990636032] (context.cpp:116) ... /sys/devices/pci0000:00/0000:00:08.1/0000:05:00.3/usb1/1-2/1-2:1.0/video4linux/video6
05/07 15:16:42,506 INFO [135660990636032] (context.cpp:128) Found 2 RealSense devices (0xff requested & 0xff from device-mask in settings)
...
realsense-viewer GUI Firmware Upgrading from within realsense-viewer GUI
D435 RealSense Viewer D435 Firmware Upgrading
Viewing Depth Image in 2D Viewing Depth Image in 3D
D435 Depth 2D D435 Depth 3D

2.2.2 Intel RealSense Depth Modules and Processors D430

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ realsense-viewer  
05/07 17:00:55,958 INFO [133348205735936] (backend-v4l2.cpp:753) Enumerating UVC video0 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-3/10-3:1.0/video4linux/video0
05/07 17:00:56,036 INFO [133348205735936] (backend-v4l2.cpp:753) Enumerating UVC video1 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-3/10-3:1.0/video4linux/video1
05/07 17:00:56,039 INFO [133348205735936] (backend-v4l2.cpp:753) Enumerating UVC video2 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-3/10-3:1.0/video4linux/video2
05/07 17:00:56,041 INFO [133348205735936] (backend-v4l2.cpp:753) Enumerating UVC video3 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-3/10-3:1.0/video4linux/video3
05/07 17:00:56,043 INFO [133348205735936] (backend-v4l2.cpp:753) Enumerating UVC video6 realpath=/sys/devices/pci0000:00/0000:00:08.1/0000:05:00.3/usb1/1-2/1-2:1.0/video4linux/video6
05/07 17:00:56,146 INFO [133348205735936] (backend-v4l2.cpp:753) Enumerating UVC video7 realpath=/sys/devices/pci0000:00/0000:00:08.1/0000:05:00.3/usb1/1-2/1-2:1.0/video4linux/video7
05/07 17:00:56,387 INFO [133348205735936] (backend-v4l2.cpp:753) Enumerating UVC video0 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-3/10-3:1.0/video4linux/video0
05/07 17:00:56,389 INFO [133348205735936] (backend-v4l2.cpp:753) Enumerating UVC video1 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-3/10-3:1.0/video4linux/video1
05/07 17:00:56,390 INFO [133348205735936] (backend-v4l2.cpp:753) Enumerating UVC video2 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-3/10-3:1.0/video4linux/video2
05/07 17:00:56,391 INFO [133348205735936] (backend-v4l2.cpp:753) Enumerating UVC video3 realpath=/sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-3/10-3:1.0/video4linux/video3
05/07 17:00:56,392 INFO [133348205735936] (backend-v4l2.cpp:753) Enumerating UVC video6 realpath=/sys/devices/pci0000:00/0000:00:08.1/0000:05:00.3/usb1/1-2/1-2:1.0/video4linux/video6
05/07 17:00:56,393 INFO [133348205735936] (backend-v4l2.cpp:753) Enumerating UVC video7 realpath=/sys/devices/pci0000:00/0000:00:08.1/0000:05:00.3/usb1/1-2/1-2:1.0/video4linux/video7
05/07 17:00:56,394 INFO [133348205735936] (context.cpp:116) ... /sys/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:46:00.3/usb10/10-3/10-3:1.0/video4linux/video0
05/07 17:00:56,394 INFO [133348205735936] (context.cpp:116) ... /sys/devices/pci0000:00/0000:00:08.1/0000:05:00.3/usb1/1-2/1-2:1.0/video4linux/video6
05/07 17:00:56,394 INFO [133348205735936] (context.cpp:128) Found 2 RealSense devices (0xff requested & 0xff from device-mask in settings)
D430 Depth Camera 1 - 2D IR Sparse Pattern D430 Depth Camera 1 - 3D
D430 Depth 2D Sparse Pattern D430 Depth 3D
D430 Depth Camera 2 - 2D IR Sparse Pattern D430 Depth Camera 2 - 3D
D430 Depth 2D Sparse Pattern D430 Depth 3D
Firmware To Upgrade Firmware Upgraded Successfully
D430 Firmware To Upgrade D430 Firmware Upgraded Successfully

2.3 rs-hello-realsense

I tried Azure Kinect DK 2 years ago, and rencently I’d love to some fun with it again.

0. My Working Environment

1
2
3
4
5
6
7
8
9
$ lsb_release -a             
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04 LTS
Release: 24.04
Codename: noble

$ uname -r
6.8.0-36-generic

1. Azure Kinect DK

1.1 Overview

Azure Kinect Sensor

1.2 Hardware Specification

Refer to Azure Kinect DK hardware specifications.

2. lsusb and Demonstration

[!NOTE:]
Azure Kinect DK is quite picky at USB cables.

2.1 Nothing Detected

For some USB cables, lsusb shows nothing related to Azure Kinect DK.

1
$ lsusb | grep Azure

Please also refer to: cannot connect via Thunderbolt 3.

2.2 Detected

For other USB cables, both lsusb and AzureKinectFirmwareTool are able to detect Azure Kinect DK.

1
2
3
4
5
6
7
8
9
10
$ AzureKinectFirmwareTool -q
== Azure Kinect DK Firmware Tool ==
Device Serial Number: 000593414512
Current Firmware Versions:
RGB camera firmware: 1.6.110
Depth camera firmware: 1.6.80
Depth config file: 6109.7
Audio firmware: 1.6.14
Build Config: Production
Certificate Type: Microsoft

2.2.1 k4aviewer No Available Devices

However, when we run k4aviewer, it still shows No Available Devices.

1
2
3
4
5
$ lsusb | grep Azure
Bus 009 Device 007: ID 045e:097b Microsoft Corp. Generic Hub [Azure Kinect]
Bus 009 Device 008: ID 045e:097d Microsoft Corp. Azure Kinect 4K Camera
Bus 009 Device 009: ID 045e:097c Microsoft Corp. Azure Kinect Depth Camera
Bus 009 Device 010: ID 045e:097e Microsoft Corp. Azure Kinect Microphone Array
No Available Devices No Available Devices, Errors
K4A Viewer No Available Devices K4A Viewer No Available Devices, Errors

2.2.2 Detect Okay And Run Successfully

Fortunately, I got one cable working partially perperly, but lsusb failed to detect Azure Kinect DK's Microphone Array.

1
2
3
4
$ lsusb | grep -i Azure 
Bus 010 Device 002: ID 045e:097a Microsoft Corp. Generic Superspeed Hub [Azure Kinect]
Bus 010 Device 003: ID 045e:097c Microsoft Corp. Azure Kinect Depth Camera
Bus 010 Device 004: ID 045e:097d Microsoft Corp. Azure Kinect 4K Camera

K4A Viewer

2.3 I Believe and I Found It

Luckily, I found a cable, which is able to detect ALL of the following:

1
2
3
4
5
6
$ lsusb | grep Azure   
Bus 001 Device 010: ID 045e:097b Microsoft Corp. Generic Hub [Azure Kinect]
Bus 001 Device 011: ID 045e:097e Microsoft Corp. Azure Kinect Microphone Array
Bus 002 Device 014: ID 045e:097a Microsoft Corp. Generic Superspeed Hub [Azure Kinect]
Bus 002 Device 015: ID 045e:097c Microsoft Corp. Azure Kinect Depth Camera
Bus 002 Device 016: ID 045e:097d Microsoft Corp. Azure Kinect 4K Camera

2.4 4K Camera Is Working Fine Like An Independent UVC Camera

1
2
3
4
5
6
7
8
$ v4l2-ctl --list-devices

Azure Kinect 4K Camera (usb-0000:05:00.3-2.1):
/dev/video1
/dev/video2
/dev/media0

Cannot open device /dev/video0, exiting.

It can be simpilied decmonstrated that GUVCView is able to successfully detect Bus 002 Device 016: ID 045e:097d Microsoft Corp. Azure Kinect 4K Camera as a UVC Camera and carry out the real-time streaming.

3. libdepthengine.so

Currently, Azure Kinect DK supports Ubuntu 18.04 ONLY. However, the libdepthengine.so.2.0 is working fine under my Ubuntu 24.04, which can be extracted directly from the package libk4a1.4_1.4.2_amd64.deb. Save libdepthengine.so.2.0 under any $PATH, and create a symbolic link if you want to.

4. Build Azure-Kinect-Sensor-SDK Longer Vision From Source

Don’t use the original Azure-Kinect-Sensor-SDK. Use Azure-Kinect-Sensor-SDK Longer Vision instead.

5. Python Wrappers for Azure-Kinect-Sensor-SDK

Wrappers Description
k4a Python wrapper the official Python Wrapper with Azure-Kinect-Sensor-SDK
pyk4a a third-party Python Wrapper

6. The Bug: replace_sample(). capturesync_drop, releasing capture early due to full queue TS

Please refer to the following 2 Github issues:

Again, amazing China. This time, Nanjing. What a city!!!!!

Ancient Qinhuai @ Qinhuai River, Nanjing Ancient Qinhuai @ Qinhuai River, Nanjing
GuQinHuai 01 GuQinHuai 02
WanQingLou LiXiangJun
Lights 01 Lights 02
Lights BaiLuZhou QinHuaiRenJia 01
QinHuaiRenJia 02 QinHuaiRenJia 03
NanjingSouth High Speed Train Railway Station Exterior NanjingSouth High Speed Train Railway Station Inside
Nanjing Old Station Renovated ChangYu Noodle

Raspberry Pi has already well-established a comprehensive community support world wide. Among ALL the operating systems supporting Raspberry Pi, Home Assistant stands out, shining brightly as an open-source home automation operating system in the field of IoT.

1. Overview

1.1 What is Home Assistant?

Home Assistant is the ``open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.'' (cited from first page of the official website of Home Assistant.)

Home Assistant OS is a minimal operating system optimized for running Home Assistant, and it does not use traditional package management systems like apt. Instead, it relies on Docker containers to manage and run services, including Home Assistant and its add-ons.

1.2 Web UI

After simply flashed Home Assistant OS 12.3 onto a 16GB TF card and insert it into my old Raspberry Pi 3B V1.2, we can now take a brief look at Home Assistant web UI at http://homeassistant.local:8123/.

Home Assistant Overview Home Assistant Dashboard
Home Assistant Overview Home Assistant Dashboard
Home Assistant Terminal SSH Home Assistant Run Terminal SSH

2. ssh Into Home Assistant OS

2.1 Configuration

2.1.1 Installation of Home Assistant Add-on Terminal & SSH

Please have the add-on Home Assistant Add-on Terminal & SSH installed from Home Assistant -> Settings -> Add-ons.

2.1.2 Edit in YAML

Please do remember to add these 2 lines:

1
2
3
ssh:
enable: true
port: 22

at the end of the YAML configuration:

1
2
3
4
5
6
7
8
authorized_keys: []
password: []
apks: []
server:
tcp_forwarding: false
ssh:
enable: true
port: 22

2.2 ssh Into Home Assistant OS From Remote Desktop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
➜  ~ ssh root@192.168.1.83
The authenticity of host '192.168.1.83 (192.168.1.83)' can't be established.
ED25519 key fingerprint is SHA256:MZDkXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXJmxE.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.83' (ED25519) to the list of known hosts.

▄██▄ _ _
▄██████▄ | | | | ___ _ __ ___ ___
▄████▀▀████▄ | |_| |/ _ \| '_ ` _ \ / _ \
▄█████ █████▄ | _ | (_) | | | | | | __/
▄██████▄ ▄██████▄ |_| |_|\___/|_| |_| |_|\___| _
████████ ██▀ ▀██ / \ ___ ___(_)___| |_ __ _ _ __ | |_
███▀▀███ ██ ▄██ / _ \ / __/ __| / __| __/ _` | '_ \| __|
██ ██ ▀ ▄█████ / ___ \\__ \__ \ \__ \ || (_| | | | | |_
███▄▄ ▀█ ▄███████ /_/ \_\___/___/_|___/\__\__,_|_| |_|\__|
▀█████▄ ███████▀

Welcome to the Home Assistant command line.

System information
IPv4 addresses for enu1u1: 192.168.1.83/24
IPv6 addresses for enu1u1: 2001:569:5993:5900:1b4a:e1e6:140c:aac0/64, fe80::ab1f:8f98:b81:a479/64
IPv4 addresses for wlan0:
IPv4 addresses for wlu1u4:

OS Version: Home Assistant OS 12.3
Home Assistant Core: 2024.5.5

Home Assistant URL: http://homeassistant.local:8123
Observer URL: http://homeassistant.local:4357
[core-ssh ~]$

3. ESPHome with Home Assistant

One of my very old blogs LVT ESP32-Cam has talked about ESP32 Camera. Today, I found that blog posted 4 years ago before COVID-19, and I’m trying to integrate some of my [ESP32 Cameras] into Home Assistant. Namely, use Home Assistant running on the Raspberry Pi to manage a couple of my ESP32 Cameras.

3.1 ESP32 Boards Management

Please ensure the following 2 boards support have been installed successfully.

Arduino IDE Esp32

3.2 CameraWebServer

Current ESP32 Examples provide an webcam server example: ESP32 Example CameraWebServer. Or, we can simply open up the example from within Arduino IDE: File->Examples->ESP32->Camera->CameraWebServer.

3.2.1 Four ESP32 Cameras

Both are compatible with the configuration CAMERA_MODEL_AI_THINKER in ESP32 Example CameraWebServer. Therefore, three places are to be correctly setup:

  • #define CAMERA_MODEL_AI_THINKER // Has PSRAM
  • const char *ssid = "XXXXXXXXX";
  • const char *password = "YYYYYYYYY";

3.2.2 Verify and Upload

Verify

Upload

3.2.3 Demonstration

CameraWebServer

However, as you can see, the captured image is not quite stable. And, I did find the WiFi connection is easy to get disconnected. What to do???

[!NOTE:] What to do??? Please continue reading.

3.3 RTSP with MJPEG

As of today, June 4, 2024, there is NO H.264 or H.265 streaming server support. Therefore, I’m going to follow the following 2 blogs and build up RTSP server with MJPEG video streams.

3.4 Integrate ESPHome Into Home Assistant

Getting Started with ESPHome and Home Assistant

3.5 Demonstration

ESPHome ESPHome
ESPHome Build Failed ESPHome Compile
ESPHome Device Discovered ESPHome Device Info
ESPHome Devices ESPHome Flash
ESPHome Installation ESPHome Install Connecting Hang
ESPHome Installed 3232 Connection Refused ESPHome Visit
Home Assistant Overview Home Assistant Media Live
ESPHome ESP32Cam Configured ESPHome ESP32Cam Integrated

I got a LicheeRV Nano before I left China for Canada a couple of weeks ago. Nowadays China is amazing. Let’s take a look at my hometown Wuhan of year 2024.

Sunset @ Yangtze River 2nd Bridge Sunset @ Yangtze River TianXingZhou Bridge
Yangtze River 2nd Bridge Sunset Yangtze River TianXingZhou Bridge Sunset
Yangtze River Grove Sunset Yangtze River Embankment Grassland Constructions
YuChiYuZui 01 YuChiYuZui 02

Now, let’s start our today’s topic: LicheeRV Nano.

1. Introduction

1.1 First Look

LicheeRV Nano LicheeRV Nano with N2425D
LicheeRV Nano 01 LicheeRV Nano 01

1.2 Official Documentation

Actually, ALL you need can be found at:

1.3 LicheeRV-Nano-WE

According to the LicheeRV Nano Version Comparison, there are 4 versions totally.

  • LicheeRV-Nano-B
  • LicheeRV-Nano-E
  • LicheeRV-Nano-W
  • LicheeRV-Nano-WE

Clearly, the one I purchased is a LicheeRV-Nano-WE.

2. lsusb

1
2
3
4
➜  ~ lsusb
......
Bus 009 Device 010: ID 3346:1009 sipeed licheervnano
......

3. WiFi Setup

After LicheeRV Nano is connected to your host computer via USB Type-C, enter the mounted rootfs and add the following new file:

1
2
3
4
5
➜  rootfs sudo vim ./etc/network/wpa_supplicant.conf
network={
ssid="XXXXX"
psk="YYYYY"
}

Then, reboot. Now, you should be able to find out your LicheeRV Nano by sudo nmap -sN 192.168.1.254/24.

4. LicheeRV Nano Overview

4.1 ssh Into LicheeRV Nano

Both the default username and password of LicheeRV Nano are root.

1
2
3
4
5
6
7
8
➜  ~ ssh root@192.168.1.78
root@192.168.1.78's password:

# uname -a
Linux licheervnano-8c93 5.10.4-tag- #1 PREEMPT Mon Apr 22 11:13:44 HKT 2024 riscv64 GNU/Linux

# hostname
licheervnano-8c93

4.2 CPU and Memory

Clearly, LicheeRV Nano is armed with only 1 single Risc-V 64bit CPU, and about 160M flash memory.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# cat /proc/cpuinfo
processor : 0
hart : 0
isa : rv64imafdvcsu
mmu : sv39

# cat /proc/meminfo
MemTotal: 162672 kB
MemFree: 98276 kB
MemAvailable: 128976 kB
Buffers: 3416 kB
Cached: 28776 kB
SwapCached: 0 kB
Active: 11792 kB
Inactive: 26892 kB
Active(anon): 144 kB
Inactive(anon): 6592 kB
Active(file): 11648 kB
Inactive(file): 20300 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 6508 kB
Mapped: 10092 kB
Shmem: 248 kB
KReclaimable: 5164 kB
Slab: 13988 kB
SReclaimable: 5164 kB
SUnreclaim: 8824 kB
KernelStack: 1248 kB
PageTables: 524 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 81336 kB
Committed_AS: 9868 kB
VmallocTotal: 67108863 kB
VmallocUsed: 5468 kB
VmallocChunk: 0 kB
Percpu: 64 kB
CmaTotal: 0 kB
CmaFree: 0 kB

4.3 Python

By default, Python 3.11.6 has been installed on LicheeRV Nano.

1
2
# python --version
Python 3.11.6

5. LicheeRV-Nano-Build

The default LicheeRV-Nano-Build README.md seems to be problematic. I did it in my way:

5.1 Clone LicheeRV-Nano-Build

1
2
3
➜  git clone https://github.com/sipeed/LicheeRV-Nano-Build --depth=1
➜ cd LicheeRV-Nano-Build
➜ LicheeRV-Nano-Build git:(main)

5.2 Setup

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
➜  LicheeRV-Nano-Build git:(main) ✗ source build/cvisetup.sh
/proc/self/fd/19:7: cv1800b_board_sel: assignment to invalid subscript range
-------------------------------------------------------------------------------------------------------
Usage:
(1) menuconfig - Use menu to configure your board.
ex: $ menuconfig

(2) defconfig $CHIP_ARCH - List EVB boards($BOARD) by CHIP_ARCH.
** sg200x ** -> ['sg2000', 'sg2002']
** cv181x ** -> ['cv1812cp', 'cv1812h', 'cv1813h']
** cv180x ** -> ['cv1800b']
ex: $ defconfig cv181x

(3) defconfig $BOARD - Choose EVB board settings.
ex: $ defconfig cv1813h_wevb_0007a_spinor
ex: $ defconfig cv1812cp_wevb_0006a_spinor
-------------------------------------------------------------------------------------------------------

5.3 GUI-based menuconfig

I personally prefer the GUI-based configuration.

5.3.1 Copy menuconfig.py

1
2
3
➜  LicheeRV-Nano-Build git:(main) ✗ cd build/scripts 
➜ scripts git:(main) ✗ cp menuconfig.py .py
➜ scripts git:(main) ✗

5.3.2 Modify ./build/boards/sg200x/sg2002_licheervnano_sd/sg2002_licheervnano_sd_defconfig

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
diff --git a/build/boards/sg200x/sg2002_licheervnano_sd/sg2002_licheervnano_sd_defconfig b/build/boards/sg200x/sg2002_licheervnano_sd/sg2002_licheervnano_sd_defconfig
index 4138f665b..58a5ea02d 100644
--- a/build/boards/sg200x/sg2002_licheervnano_sd/sg2002_licheervnano_sd_defconfig
+++ b/build/boards/sg200x/sg2002_licheervnano_sd/sg2002_licheervnano_sd_defconfig
@@ -2,12 +2,12 @@ CONFIG_CHIP_sg2002=y
CONFIG_BOARD_licheervnano_sd=y
CONFIG_DDR_CFG_ddr3_1866_x16=y
CONFIG_ARCH="riscv"
-CONFIG_CROSS_COMPILE="riscv64-unknown-linux-musl-"
+CONFIG_CROSS_COMPILE="riscv64-linux-gnu-"
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_KERNEL_ENTRY_HACK=y
CONFIG_KERNEL_ENTRY_HACK_ADDR="0x80200000"
CONFIG_TOOLCHAIN_MUSL_RISCV64=y
-CONFIG_FLASH_SIZE_SHRINK=y
+# CONFIG_FLASH_SIZE_SHRINK=y
CONFIG_BOOT_IMAGE_SINGLE_DTB=y
# CONFIG_FLASH_SIZE_SHRINK is not set
CONFIG_CP_EXT_WIRELESS=y
@@ -16,7 +16,7 @@ CONFIG_MIPI_PANEL_ZCT2133V1=y
CONFIG_SENSOR_GCORE_GC4653=y
CONFIG_SENSOR_OV_OS04A10=y
CONFIG_UBOOT_2021_10=y
-CONFIG_KERNEL_SRC_5.10=y
+CONFIG_KERNEL_SRC="linux_5.10"
CONFIG_KERNEL_UNCOMPRESSED=y
# CONFIG_SKIP_RAMDISK is not set
CONFIG_SENSOR_TUNING_PARAM_cv181x_src_gcore_gc4653=y

By the way, even until now, I’ve got NO idea what the MIPI_PANEL should be?

5.3.3 Run menuconfig

1
➜  LicheeRV-Nano-Build git:(main) ✗ menuconfig

LicheeRV Nano Build menuconfig

5.4 Build

5.4.1 Exports

1
2
3
➜  LicheeRV-Nano-Build git:(main) ✗ export IMGTOOL_PATH=tools/common/image_tool                      
➜ LicheeRV-Nano-Build git:(main) ✗ export COMMON_TOOLS_PATH=tools/common
➜ LicheeRV-Nano-Build git:(main) ✗ export FLASH_PARTITION_XML=boards/default/partition/partition_none.xml

Happy Chinese Dragon Year !!! Today, let's continue this SBC: Milk-V Duo 256M.

1. Some Suggestions

  • Auto resizing in order to use the full TF card). So far, I'll have to do it manually. Anyway, now I can use my full TF card as:
    1
    2
    3
    4
    5
    6
    7
    [root@milkv-duo]~# df -h
    Filesystem Size Used Available Use% Mounted on
    /dev/root 28.5G 146.0M 27.2G 1% /
    devtmpfs 83.1M 0 83.1M 0% /dev
    tmpfs 83.1M 0 83.1M 0% /dev/shm
    tmpfs 83.1M 48.0K 83.1M 0% /tmp
    tmpfs 83.1M 32.0K 83.1M 0% /run
    Without resizing, as in my previous blog Milk-V Duo 256M - 01
    1
    2
    3
    4
    5
    6
    7
    [root@milkv-duo]~# df -h
    Filesystem Size Used Available Use% Mounted on
    /dev/root 752.0M 152.6M 557.0M 22% /
    devtmpfs 83.1M 0 83.1M 0% /dev
    tmpfs 83.1M 0 83.1M 0% /dev/shm
    tmpfs 83.1M 48.0K 83.1M 0% /tmp
    tmpfs 83.1M 32.0K 83.1M 0% /run
  • Fix eth0's MAC address. For the wired connection on this particular small SBC Milk-V Duo 256M, I'd strongly recommend to use the physical MAC address for eth0, rather than a dynamic one. Whenever rebooting, Milk-V Duo 256M will change its MAC address, as well as the IP address, which is seriously NOT what I expected. Therefore, what we need to do is to modify file /etc/network/interfaces as suggested by StackExchange issue Change Mac Address permanently inside /etc/network/interfaces:
    1
    2
    3
    4
    5
    6
    auto eth0
    iface eth0 inet static
    address 192.168.1.51
    netmask 255.255.255.0
    gateway 192.168.1.1
    hwaddress ether 00:11:22:33:44:55

2. Yolo5 Example Based on TPU

Finally, I got duo-buildroot-sdk built today. So, yes, happy Chinese new year of Dragon, 2024. Let's have some fun of Milk-V Duo 256M.

1. Introduction

From Milk-V Duo 256M's official website, the following picture clearly shows it has

MilkV Duo 256M Core chips

The detailed specifications are also highlighted in the table on the official website of Milk-V Duo 256M.

2. Build duo-buildroot-sdk

2.1 Failed to build duo-buildroot-sdk using Ubuntu 22.04

Even if I strictly followed the manual on duo-buildroot-sdk's official documentation Compiled using Ubuntu 22.04, I still failed to build an image out for flashing, with the following error messages inside the log file build/br.log:

1
2
3
4
5
6
7
8
......
2024-02-08T13:34:11 tic: symbol lookup error: tic: undefined symbol: _nc_disable_period
2024-02-08T13:34:11 ? tic could not build ....../duo-buildroot-sdk-Duo-V1.0.8/buildroot-2021.05/output/milkv-duo256m_musl_riscv64/per-package/ncurses/host/riscv64-buildroot-linux-musl/sysroot/usr/share/terminfo
2024-02-08T13:34:11 make[4]: *** [Makefile:92: install.data] Error 1
2024-02-08T13:34:12 make[3]: *** [Makefile:122: install] Error 2
2024-02-08T13:34:12 make[2]: *** [package/pkg-generic.mk:289: ....../duo-buildroot-sdk-Duo-V1.0.8/buildroot-2021.05/output/milkv-duo256m_musl_riscv64/build/ncurses-6.1/.stamp_staging_installed] Error 2
2024-02-08T13:34:12 make[2]: *** Waiting for unfinished jobs....
......

A possible solution is found at: https://lore.kernel.org/buildroot/bug-15685-163-ecW1EgIyRW@https.bugs.busybox.net%2F/T/.

2.2 Successfully build duo-buildroot-sdk using Docker

By strictly following the manual on duo-buildroot-sdk's official documentation Compiled using Docker, I now am able to build an image out as:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
......
mkfs.fat: Warning: lowercase labels might not work properly on some systems
INFO: vfat(boot.vfat): adding file 'fip.bin' as 'fip.bin' ...
INFO: vfat(boot.vfat): cmd: "MTOOLS_SKIP_CHECK=1 mcopy -sp -i '~/install/soc_cv1812cp_milkv_duo256m_sd/boot.vfat' '~/install/soc_cv1812cp_milkv_duo256m_sd/fip.bin' '::'" (stderr):
INFO: vfat(boot.vfat): adding file 'rawimages/boot.sd' as 'rawimages/boot.sd' ...
INFO: vfat(boot.vfat): cmd: "MTOOLS_SKIP_CHECK=1 mcopy -sp -i '~/install/soc_cv1812cp_milkv_duo256m_sd/boot.vfat' '~/install/soc_cv1812cp_milkv_duo256m_sd/rawimages/boot.sd' '::'" (stderr):
INFO: ext4(rootfs.ext4): cmd: "genext2fs -d '~/install/soc_cv1812cp_milkv_duo256m_sd/tmp/root' --size-in-blocks=786432 -i 16384 '~/install/soc_cv1812cp_milkv_duo256m_sd/rootfs.ext4' " (stderr):
copying from directory ~/install/soc_cv1812cp_milkv_duo256m_sd/tmp/root
INFO: ext4(rootfs.ext4): cmd: "tune2fs -O 'extents,uninit_bg,dir_index,has_journal' '~/install/soc_cv1812cp_milkv_duo256m_sd/rootfs.ext4'" (stderr):
INFO: ext4(rootfs.ext4): cmd: "tune2fs -L 'rootfs' '~/install/soc_cv1812cp_milkv_duo256m_sd/rootfs.ext4'" (stderr):
INFO: ext4(rootfs.ext4): cmd: "e2fsck -pvfD '~/install/soc_cv1812cp_milkv_duo256m_sd/rootfs.ext4'" (stderr):
INFO: hdimage(milkv-duo256m.img): adding partition 'boot' (in MBR) from 'boot.vfat' ...
INFO: hdimage(milkv-duo256m.img): adding partition 'rootfs' (in MBR) from 'rootfs.ext4' ...
INFO: hdimage(milkv-duo256m.img): writing MBR
gnimage for milkv-duo256m success!
~/build
~
Create SD image successful: out/milkv-duo256m-20240208-1949.img

And, the last couple of lines in the log file build/br.log are:

1
2
3
4
5
6
7
8
9
10
11
......
2024-02-08T19:48:15
2024-02-08T19:48:15 Allocating group tables: 0/25 done
2024-02-08T19:48:15 Writing inode tables: 0/25 done
2024-02-08T19:48:15 Creating journal (4096 blocks): done
2024-02-08T19:48:15 Copying files into the device: PATH="~/buildroot-2021.05/output/milkv-duo256m_musl_riscv64/host/bin:~/buildroot-2021.05/output/milkv-duo256m_musl_riscv64/host/sbin:~/host-tools/gcc/riscv64-linux-musl-x86_64/bin:~/host-tools/gcc/riscv64-linux-x86_64/bin:~/host-tools/gcc/riscv64-elf-x86_64/bin:~/host-tools/gcc/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-elf/bin:~/host-tools/gcc/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin:~/host-tools/gcc/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:~/host-tools/gcc/arm-cvitek-linux-uclibcgnueabihf/bin" xz -9 -C crc32 -c -T 9 ~/buildroot-2021.05/output/milkv-duo256m_musl_riscv64/images/rootfs.tar > ~/buildroot-2021.05/output/milkv-duo256m_musl_riscv64/images/rootfs.tar.xz
2024-02-08T19:48:16 done
2024-02-08T19:48:16 Writing superblocks and filesystem accounting information: 0/25 done
2024-02-08T19:48:16
2024-02-08T19:48:16 ln -sf rootfs.ext2 ~/buildroot-2021.05/output/milkv-duo256m_musl_riscv64/images/rootfs.ext4
2024-02-08T19:49:28 make[1]: Leaving directory '~/buildroot-2021.05'

3. Boot after Flashing

After flashing the generated out/milkv-duo256m-20240208-1949.img into the SD card, we can now boot up Milk-V Duo 256M by connecting it with my laptop via a USB cable.

3.1 lsusb

1
2
3
......
Bus 001 Device 009: ID 3346:1009 Cvitek RNDIS
......

3.2 SSH into Milk-V Duo 256M via USB Connection

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
➜  ~ ssh root@192.168.42.1
The authenticity of host '192.168.42.1 (192.168.42.1)' can't be established.
ED25519 key fingerprint is SHA256:NyuhOwhRh9sfzW+C2D5OIaTIbGCuVI1v1jrJv4DaM+U.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.42.1' (ED25519) to the list of known hosts.
root@192.168.42.1's password:
[root@milkv-duo]~# ls
[root@milkv-duo]~# pwd
/root
[root@milkv-duo]~# uname -a
Linux milkv-duo 5.10.4-tag- #1 PREEMPT Thu Feb 8 19:28:21 CST 2024 riscv64 GNU/Linux
[root@milkv-duo]~# lsb_release -a
-sh: lsb_release: not found
[root@milkv-duo]~# neofetch
-sh: neofetch: not found
[root@milkv-duo]~# ll /
total 33
drwxr-xr-x 18 root root 1024 Feb 8 2024 ./
drwxr-xr-x 18 root root 1024 Feb 8 2024 ../
drwxr-xr-x 2 root root 3072 Feb 8 2024 bin/
drwxr-xr-x 7 root root 1540 Jan 1 00:00 dev/
drwxr-xr-x 8 root root 1024 Jan 1 00:00 etc/
drwxr-xr-x 3 root root 1024 Jan 30 2024 lib/
lrwxrwxrwx 1 root root 3 Feb 8 2024 lib64 -> lib/
lrwxrwxrwx 1 root root 11 Feb 8 2024 linuxrc -> bin/busybox*
drwx------ 2 root root 16384 Feb 8 2024 lost+found/
drwxr-xr-x 2 root root 1024 Jan 30 2024 media/
drwxr-xr-x 6 root root 1024 Jan 30 2024 mnt/
drwxr-xr-x 2 root root 1024 Jan 30 2024 opt/
dr-xr-xr-x 122 root root 0 Jan 1 00:00 proc/
drwx------ 2 root root 1024 Jan 1 00:03 root/
drwxr-xr-x 4 root root 200 Jan 1 00:00 run/
drwxr-xr-x 2 root root 3072 Feb 8 2024 sbin/
dr-xr-xr-x 11 root root 0 Jan 1 00:00 sys/
drwxrwxrwt 3 root root 160 Jan 1 00:00 tmp/
drwxr-xr-x 8 root root 1024 Feb 8 2024 usr/
drwxr-xr-x 5 root root 1024 Feb 8 2024 var/
[root@milkv-duo]~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 752.0M 152.6M 557.0M 22% /
devtmpfs 83.1M 0 83.1M 0% /dev
tmpfs 83.1M 0 83.1M 0% /dev/shm
tmpfs 83.1M 48.0K 83.1M 0% /tmp
tmpfs 83.1M 32.0K 83.1M 0% /run
[root@milkv-duo]~# cat /proc/cpuinfo
processor : 0
hart : 0
isa : rv64imafdvcsu
mmu : sv39

[root@milkv-duo]~# cat /proc/meminfo
MemTotal: 170288 kB
MemFree: 147812 kB
MemAvailable: 148580 kB
Buffers: 872 kB
Cached: 3024 kB
SwapCached: 0 kB
Active: 2520 kB
Inactive: 2808 kB
Active(anon): 72 kB
Inactive(anon): 1440 kB
Active(file): 2448 kB
Inactive(file): 1368 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 44 kB
Writeback: 0 kB
AnonPages: 1444 kB
Mapped: 2532 kB
Shmem: 80 kB
KReclaimable: 2664 kB
Slab: 7220 kB
SReclaimable: 2664 kB
SUnreclaim: 4556 kB
KernelStack: 1024 kB
PageTables: 404 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 85144 kB
Committed_AS: 5004 kB
VmallocTotal: 67108863 kB
VmallocUsed: 4408 kB
VmallocChunk: 0 kB
Percpu: 32 kB
CmaTotal: 0 kB
CmaFree: 0 kB
[root@milkv-duo]~#

3.3 SSH into Milk-V Duo 256M via Wired Connection

After my clumsy soldering, Milk-V Duo 256M is now able to be connected via my home Intranet. Now, let's ssh into Milk-V Duo 256M via its IP address.

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@milkv-duo]~# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 0a:95:ef:1e:ec:c2 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.51/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
valid_lft 259082sec preferred_lft 226682sec
3: usb0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 5e:59:d4:f7:99:f7 brd ff:ff:ff:ff:ff:ff
inet 192.168.42.1/24 brd 192.168.42.255 scope global usb0
valid_lft forever preferred_lft forever

4. Camera Test - Face Detection

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
[root@milkv-duo]~# cd /bin
[root@milkv-duo]/bin# ls
arch chattr cpio dumpkmap getopt link lsattr mount nuke pwd setarch su uname
ash chgrp date echo grep linux32 mk_cmds mountpoint pidof resume setpriv sync usleep
base32 chmod dd egrep gunzip linux64 mkdir mt ping rm setserial tar vi
base64 chown df false gzip ln mknod mv pipe_progress rmdir sh touch watch
busybox compile_et dmesg fdflush hostname login mktemp netstat printenv run-parts sleep true zcat
cat cp dnsdomainname fgrep kill ls more nice ps sed stty umount
[root@milkv-duo]/bin# camera-test.sh
[SAMPLE_COMM_SNS_ParseIni]-1950: Parse /mnt/data/sensor_cfg.ini
[parse_source_devnum]-1605: devNum = 1
[parse_sensor_name]-1686: sensor = GCORE_GC2083_MIPI_2M_30FPS_10BIT
[parse_sensor_busid]-1714: bus_id = 2
[parse_sensor_i2caddr]-1725: sns_i2c_addr = 37
[parse_sensor_mipidev]-1736: mipi_dev = 0
[parse_sensor_laneid]-1747: Lane_id = 1, 0, 2, -1, -1
[parse_sensor_pnswap]-1758: pn_swap = 0, 0, 0, 0, 0
MMF Version:7e0cc6a08-musl_riscv64
Create VBPool[0], size: (3110400 * 3) = 9331200 bytes
Create VBPool[1], size: (3110400 * 3) = 9331200 bytes
Create VBPool[2], size: (2764800 * 1) = 2764800 bytes
Total memory of VB pool: 21427200 bytes
Initialize SYS and VB
Initialize VI
ISP Vipipe(0) Allocate pa(0x8c771000) va(0x0x3fbed36000) size(291120)
stSnsrMode.u16Width 1920 stSnsrMode.u16Height 1080 25.000000 wdrMode 0 pstSnsObj 0x3fbf86b400
[SAMPLE_COMM_VI_StartMIPI]-483: sensor 0 stDevAttr.devno 0
awbInit ver 6.8@2021500
0 R:1400 B:3100 CT:2850
1 R:1500 B:2500 CT:3900
2 R:2300 B:1600 CT:6500
Golden 1024 1024 1024
WB Quadratic:0
isWdr:0
ViPipe:0,===GC2083 1080P 30fps 10bit LINE Init OK!===
********************************************************************************
cvi_bin_isp message
gerritId: 36403 commitId: c69c5863e
md5: cab880835a2ad5184de5ed7762404b84
sensorNum 1
sensorName0 2083

PQBIN message
gerritId: 80171 commitId: 5c9d8fc5d
md5: ba5a510e093ad42db6788e6c2d13169e
sensorNum 3
sensorName0 2053

author: wanqiang.he desc: 思博慧CV1812H_GC2083_RGB_mode_V1.0.0
createTime: 2023-08-04 16:48:08version: V1.1
tool Version: v3.0.5.24 mode:
********************************************************************************
sensorName(0) mismatch, mwSns:2083 != pqBinSns:2053
[SAMPLE_COMM_ISP_Thread]-95: ISP Dev 0 running!
Initialize VPSS
---------VPSS[0]---------
Input size: (1920x1080)
Input format: (19)
VPSS physical device number: 1
Src Frame Rate: -1
Dst Frame Rate: -1
--------CHN[0]-------
Output size: (1920x1080)
Depth: 1
Do normalization: 0
Src Frame Rate: -1
Dst Frame Rate: -1
----------------------
--------CHN[1]-------
Output size: (1920x1080)
Depth: 1
Do normalization: 0
Src Frame Rate: -1
Dst Frame Rate: -1
----------------------
------------------------
Bind VI with VPSS Grp(0), Chn(0)
Attach VBPool(0) to VPSS Grp(0) Chn(0)
Attach VBPool(1) to VPSS Grp(0) Chn(1)
Initialize VENC
venc codec: h264
venc frame size: 1920x1080
Initialize RTSP
rtsp://192.168.1.51/h264
prio:0
version: 1.4.0
scrfd768432 Build at 2023-12-25 01:21:44 For platform cv181x
Max SharedMem size:1658880
anchor:-8,-8,8,8
anchor:-16,-16,16,16
bbox:bbox_8_Conv_dequant
landmark:kps_8_Conv_dequant
score:score_8_Sigmoid_dequant
anchor:-32,-32,32,32
anchor:-64,-64,64,64
bbox:bbox_16_Conv_dequant
landmark:kps_16_Conv_dequant
score:score_16_Sigmoid_dequant
anchor:-128,-128,128,128
anchor:-256,-256,256,256
bbox:bbox_32_Conv_dequant
landmark:kps_32_Conv_dequant
score:score_32_Sigmoid_dequant
Enter TDL thread
Enter encoder thread
0 R:1165 B:3087 CT:2688
1 R:1464 B:2327 CT:3937
2 R:1974 B:1613 CT:7225
Golden 1464 1024 2327
wdrLEOnly:1
face count: 0
face count: 0
face count: 0
face count: 0
face count: 0
face count: 0
face count: 0
......

One captured image over rtsp://ipaddress/h264 is shown as follows:

MilkV Duo Streaming

Now, it's the time to go to bed. Happy Chinese new year's Eve. The new year's day of 2024 is February 10, 2024.

Finally, in China, I setup my old laptop.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
➜  ~ neofetch
.-/+oossssoo+/-. lvision@lvision-GT72-6QE
`:+ssssssssssssssssss+:` ------------------------
-+ssssssssssssssssssyyssss+- OS: Ubuntu 22.04.3 LTS x86_64
.ossssssssssssssssssdMMMNysssso. Host: GT72 6QE REV:1.0
/ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 6.5.0-15-generic
+ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 26 mins
/sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 3057 (dpkg), 13 (snap)
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: zsh 5.8.1
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ Resolution: 1920x1080
ossyNMMMNyMMhsssssssssssssshmmmhssssssso DE: GNOME 42.9
ossyNMMMNyMMhsssssssssssssshmmmhssssssso WM: Mutter
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ WM Theme: Adwaita
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Theme: Yaru [GTK2/3]
/sssssssshNMMMyhhyyyyhdNMMMNhssssssss/ Icons: Yaru [GTK2/3]
+sssssssssdmydMMMMMMMMddddyssssssss+ Terminal: gnome-terminal
/ssssssssssshdmNNNNmyNMMMMhssssss/ CPU: Intel i7-6700HQ (8) @ 3.500GHz
.ossssssssssssssssssdMMMNysssso. GPU: NVIDIA GeForce GTX 980M
-+sssssssssssssssssyyyssss+- Memory: 3075MiB / 64254MiB
`:+ssssssssssssssssss+:`
.-/+oossssoo+/-.



➜ ~

1. Introduction

ESP32-S3 is a dual-core XTensa LX7 MCU, capable of running at 240 MHz. Apart from its 512 KB of internal SRAM, it also comes with integrated 2.4 GHz, 802.11 b/g/n Wi-Fi and Bluetooth 5 (LE) connectivity that provides long-range support. (Cite from Espressif's official online doc ESP32-S3).

1.1 lsusb

1
Bus 001 Device 007: ID 303a:1001 Espressif USB JTAG/serial debug unit

1. Symptom

When I tried to build qt 5.15, I always obtain the following ERROR message:

1
2
3
4
5
6
7
8
9
10
Project ERROR: Library 'assimp' is not defined.
make[4]: *** [Makefile:85: sub-assimp-install_subtargets] Error 3
make[4]: Leaving directory '/opt/qt/qt-everywhere-src-5.15.12/qtquick3d/src/plugins/assetimporters'
make[3]: *** [Makefile:59: sub-assetimporters-install_subtargets] Error 2
make[3]: Leaving directory '/opt/qt/qt-everywhere-src-5.15.12/qtquick3d/src/plugins'
make[2]: *** [Makefile:206: sub-plugins-install_subtargets-ordered] Error 2
make[2]: Leaving directory '/opt/qt/qt-everywhere-src-5.15.12/qtquick3d/src'
make[1]: *** [Makefile:62: sub-src-install_subtargets] Error 2
make[1]: Leaving directory '/opt/qt/qt-everywhere-src-5.15.12/qtquick3d'
make: *** [Makefile:378: module-qtquick3d-install_subtargets] Error 2

2. Reason

Why? Please refer to QT5.15在Ubuntu22.04上编译流程.

3. Solution

  • Modify line 13 of /opt/qt/qt-everywhere-src-5.15.12/qtquick3d/src/plugins/assetimporters/assimp/assimp.pro from QMAKE_USE_PRIVATE += assimp to QMAKE_USE_PRIVATE += quick3d-assimp.
  • Don't use assimp-5.2.2 from Ubuntu default repo, but build and install assimp (5.2.3 or above) from source.

China indeed is becoming better and better. Let me show you some pictures in SuZhou before my flight back to Vancouver.

Temple @ Lingyanshan, MUdu, Suzhou Stone Turtle @ Lingyanshan, Mudu, Suzhou
Linyanshan Temple Linyanshan Turtle
ShanTang Road XiangXi Bridge
XiangXi XiangXi Unknown Bridge
XuanGuan Temple PingJiangRoad Starbucks
PingJiang Road PingJiangRoad Side Road

0. My Working Environment

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
➜  ~ neofetch                                                              
.-/+oossssoo+/-. lvision@lvision-MS-7C60
`:+ssssssssssssssssss+:` -----------------------
-+ssssssssssssssssssyyssss+- OS: Ubuntu 24.04 LTS x86_64
.ossssssssssssssssssdMMMNysssso. Host: MS-7C60 1.0
/ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 6.8.0-39-generic
+ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 18 hours, 3 mins
/sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 5669 (dpkg), 25 (brew), 18 (snap)
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: zsh 5.9
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ Resolution: 2560x1440
ossyNMMMNyMMhsssssssssssssshmmmhssssssso DE: GNOME 46.0
ossyNMMMNyMMhsssssssssssssshmmmhssssssso WM: Mutter
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ WM Theme: Adwaita
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Theme: Adwaita [GTK2/3]
/sssssssshNMMMyhhyyyyhdNMMMNhssssssss/ Icons: Adwaita [GTK2/3]
+sssssssssdmydMMMMMMMMddddyssssssss+ Terminal: gnome-terminal
/ssssssssssshdmNNNNmyNMMMMhssssss/ CPU: AMD Ryzen Threadripper 3960X (48) @ 3.800GHz
.ossssssssssssssssssdMMMNysssso. GPU: NVIDIA GeForce RTX 3090
-+sssssssssssssssssyyyssss+- Memory: 9520MiB / 257591MiB
`:+ssssssssssssssssss+:`
.-/+oossssoo+/-.

1. Introduction

1.1 First Look

Luckfox Pico Max Top View Luckfox Pico Max Bottom View Luckfox Pico Max Top View with Camera
Luckfox Pico Max Top View Luckfox Pico Max Bottom View Luckfox Pico Max Top View with Camera

1.2 Official Documentation

Actually, ALL you need can be found at:

1.3 Luckfox Pico Max

According to the Luckfox Pico Product Parameters, two streams of the products can be categorized into 2 classes by their chips:

  • RV1103:
    • Luckfox Pico
    • Luckfox Pico Mini A
    • Luckfox Pico Mini B
    • Luckfox Pico Plus
  • RV1106:
    • Luckfox Pico Pro
    • Luckfox Pico Max

[!NOTE]
From Taobao, the one I purchased is a Luckfox Pico Max.

2. Have Some Fun

2.1 lsusb For Direct USB Plug-In

1
2
➜  ~ lsusb | grep -i Fuzhou
Bus 009 Device 013: ID 2207:0019 Fuzhou Rockchip Electronics Company rk3xxx

A little weird: Why rk3xxx but not rv1106 ???

2.2 ssh Into Luckfox Pico

I personally prefer ssh into LuckFox Pico over Intranet and talk a look.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
➜  ~ ssh root@192.168.1.66
# pwd
/root
# cd /
# ls -la
total 0
drwxr-xr-x 20 1002 1002 1584 Nov 14 2023 .
drwxr-xr-x 20 1002 1002 1584 Nov 14 2023 ..
drwxrwxr-x 2 1002 1002 5704 Nov 16 2023 bin
lrwxrwxrwx 1 1002 1002 8 Sep 1 09:04 data -> userdata
drwxr-xr-x 12 root root 2020 Jan 1 12:00 dev
drwxrwxr-x 11 1002 1002 2184 Jan 1 12:00 etc
drwxrwxr-x 3 1002 1002 2168 Nov 16 2023 lib
lrwxrwxrwx 1 1002 1002 3 Nov 14 2023 lib32 -> lib
lrwxrwxrwx 1 1002 1002 3 Nov 30 2021 lib64 -> lib
lrwxrwxrwx 1 1002 1002 11 Nov 14 2023 linuxrc -> bin/busybox
drwxr-xr-x 2 1002 1002 160 Oct 16 2023 media
drwxr-xr-x 3 1002 1002 224 Oct 16 2023 mnt
drwxrwxr-x 3 1002 1002 296 Jan 1 13:10 oem
drwxr-xr-x 2 1002 1002 160 Oct 16 2023 opt
dr-xr-xr-x 126 root root 0 Jan 1 12:00 proc
drwxrwxr-x 6 1002 1002 664 Nov 16 2023 rockchip_test
drwx------ 2 1002 1002 160 Oct 16 2023 root
drwxr-xr-x 6 root root 220 Jan 1 12:00 run
drwxrwxr-x 2 1002 1002 5120 Nov 16 2023 sbin
dr-xr-xr-x 13 root root 0 Jan 1 12:00 sys
drwxrwxrwt 3 root root 100 Jan 1 13:06 tmp
drwxrwxr-x 2 1002 1002 312 Jan 1 12:00 userdata
drwxrwxr-x 7 1002 1002 608 Nov 14 2023 usr
drwxr-xr-x 5 1002 1002 736 Nov 16 2023 var
1
2
3
4
# uname -a
Linux luckfox 5.10.110 #1 Tue Nov 14 18:06:04 CST 2023 armv7l GNU/Linux
# python --version
Python 3.11.6
1
2
3
4
5
6
7
8
9
# df -h
Filesystem Size Used Available Use% Mounted on
ubi0:rootfs 181.3M 60.0M 121.3M 33% /
devtmpfs 90.9M 0 90.9M 0% /dev
tmpfs 91.0M 0 91.0M 0% /dev/shm
tmpfs 91.0M 64.0K 90.9M 0% /tmp
tmpfs 91.0M 488.0K 90.5M 1% /run
/dev/ubi4_0 20.2M 17.1M 3.0M 85% /oem
/dev/ubi5_0 2.2M 28.0K 2.2M 1% /userdata
1
2
3
4
5
6
7
8
9
10
11
12
13
# cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 61.13
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 5
Hardware : Generic DT based system
Revision : 0000
Serial : eb8d68468b29abe9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# cat /proc/meminfo
MemTotal: 186388 kB
MemFree: 156648 kB
MemAvailable: 164500 kB
Buffers: 0 kB
Cached: 11224 kB
SwapCached: 0 kB
Active: 6112 kB
Inactive: 10000 kB
Active(anon): 200 kB
Inactive(anon): 5248 kB
Active(file): 5912 kB
Inactive(file): 4752 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 4908 kB
Mapped: 7520 kB
Shmem: 560 kB
KReclaimable: 3840 kB
Slab: 8156 kB
SReclaimable: 3840 kB
SUnreclaim: 4316 kB
KernelStack: 576 kB
PageTables: 428 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 93192 kB
Committed_AS: 19308 kB
VmallocTotal: 1032192 kB
VmallocUsed: 3580 kB
VmallocChunk: 0 kB
Percpu: 32 kB
CmaTotal: 67584 kB
CmaAllocated: 12 kB
CmaReleased: 67572 kB
CmaFree: 0 kB

From what I can see after SSH into my Luckfox Pico, the one I purchased is a Luckfox Pico Pro.

3. Reflash

3.1 Hold Boot Before USB Plug-In, After USB Plug-In Release Boot

1
2
➜  ~ lsusb | grep -i Fuzhou
Bus 009 Device 015: ID 2207:110c Fuzhou Rockchip Electronics Company

3.2 Re-Flash

Please just strictly follow :

0%