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)
scp -O ./main root@192.168.42.1:/root/
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.68echo "nameserver 8.8.8.8" >> /etc/resolv.conf