Visualizzazione post con etichetta Milk V. Mostra tutti i post
Visualizzazione post con etichetta Milk V. Mostra tutti i post

martedì 21 novembre 2023

MilkV camera




per mandare in auto esecuzione lo script di streaming si edita il file /mnt/system/auto.sh aggiungendo

/mnt/data/install/CviIspTool.sh 64M

Non riesco a vedere lo stream con VLC su Linux ma usando mpv non ci sono problemi

mpv --no-cache --untimed --no-demuxer-thread --video-sync=audio --vd-lavc-threads=1 rtsp://192.168.42.1:8554/stream0

lunedì 6 novembre 2023

Programmazione Milk-V Duo

Per programmare la Milk-V Duo tramite cross compiling su desktop si puo' usare l'SDK 

https://github.com/milkv-duo/duo-examples

una volta decompilato il pacchetto si lancia envsetup.sh che automaticamente scarica il compilatore

Altrimenti si puo' cross compilare tramite Go


Come compilatori sulla scheda si possono usare python (e' presente 3.9.5) oppure tinyGcc 

Per interagire con l'hardware si puo' usare

1) in Python la libreria pinpong  Ci sono una tonnellata di esempi

2) in C la libreria WiringX https://wiringx.org/ 

3) in Go con la libreria gpiod https://github.com/pavelanni/milkv-duo-experiments 

Per creare l'avvio automatico al boot di uno script si deve creare il file auto.sh in /mnt/data/ e si inseriscono i comandi che si vuole mandare in autoesecuzione

mkdir /mnt/data 

vi /mnt/data/auto.shsh

venerdì 3 novembre 2023

Golang Milk-V Duo RiscV64

Sto provando la scheda Milk-D Duo con processore RiscV64

La scheda un processore dual core. Sul core primario puo' girare un sistema operativo Linux multi task mentre sul secondo FreeRtos. I due sistema comunicano tramite una porta seriale un po' come funzionava la scheda Intel Galileo

Come immagine disco sto usando quella della ditta ma si pu' montare anche Arch (Debian non ha ancora il supporto di rete e si deve accedere tramite connessione seriale)

Su Linux e' piuttosto facile interagire con la scheda perche' se si collega la porta USB C viene montata in automatico un porta di rete tramite RNDIS all'indirizzo 192.168.42.1 (la scheda rilascia in DHCP un indirizzo della classe 192.168.42.x)

enxf611f7e3617d: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.42.18  netmask 255.255.255.0  broadcast 192.168.42.255
        inet6 fe80::f411:f7ff:fee3:617d  prefixlen 64  scopeid 0x20<link>
        ether f6:11:f7:e3:61:7d  txqueuelen 1000  (Ethernet)
        RX packets 242  bytes 29688 (28.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 311  bytes 43373 (42.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisi


ssh root@192.168.42.1


https://xyzdims.com/3d-printers/misc-hardware-notes/iot-milk-v-duo-risc-v-esbc-running-linux/#References 


La scheda ha 64 Mb di memoria ma con il disco immagine la RAM e' di soli 32 Mb perche' gli altri sono destinati alla connessione della video camera

Mem: 20732K used, 8504K free, 80K shrd, 668K buff, 3260K cached
CPU:   0% usr   1% sys   0% nic  98% idle   0% io   0% irq   0% sirq
Load average: 1.90 0.55 0.19 1/64 385
  PID  PPID USER     STAT   VSZ %VSZ %CPU COMMAND
  374   368 root     R     1200   4%   0% top
  155     1 root     S     4740  16%   0% /usr/sbin/ntpd -g -p /var/run/ntpd.pid
  193     1 root     S     1200   4%   0% {S99user} /bin/sh /etc/init.d/S99user start
  361   163 root     S     1008   3%   0% /usr/sbin/dropbear -R
   10     2 root     IW       0   0%   0% [rcu_preempt]
  204     1 root     S     1204   4%   0% -sh

Per usare Go pero' tale memoria non e' sufficiente e si deve attivare la partizione di swap tramite per avere 256 Mb

mkswap /dev/mmcblk0p3
swapon /dev/mmcblk0p3

la dimensione della partizione di swap puo' essere ridimensionata tramite lo script (in questo caso e' 1 Giga)
 
fdisk /dev/mmcblk0 <<EOF
p
d
3
n
p
3

+1G

w
EOF

fdisk -l /dev/mmcblk0

echo "----- resize /dev/mmcblk0p3 for swap completed -----"


a questo punto si puo' fare la build del programma sul desktop facendo cross compilazione
export GOOS=linux 
export GOARCH=riscv64 
export CGO_ENABLED=1 
export CC=riscv64-linux-gnu-gcc
go build programma.go

e si copia sul dispositivo tramite (attenzione allo switch -O)

Ho fatto qualche prova e non sembrano funzionare le goroutines

Nel caso il cui si voglia esporre la scheda verso Internet si puo' usare o la scheda di espansione che monta una scheda Ethernet



oppure se il PC Desktop assume un IP del tipo 192.168.42.68 si lancia sul desktop

sysctl net.ipv4.ip_forward=1 
iptables -P FORWARD ACCEPT 
iptables -t nat -A POSTROUTING -o outgoing_if -j MASQUERADE

mentre sulla scheda

ip r add default via 192.168.42.68

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...