Visualizzazione post con etichetta Buildroot. Mostra tutti i post
Visualizzazione post con etichetta Buildroot. Mostra tutti i post

martedì 5 novembre 2019

Buildroot e Raspberry Pi

Con BuildRoot e' possibile compilare un firmware completo per un dispositivo embedded...per fare le cose semplici ho provato con Raspberry Pi

Si clona il repository di Buildroot e si lancia

make raspberrypi_defconfig
che preimposta i valori di default per il target Raspberry. Si possono aggiungere sia pacchetti che librerie per personalizzare la configurazione base cosi' come la password di root (System Configuration/Enable root login with password)

Si lancia make e si aspetta un paio di ore...alla fine nella directory output/images si trovera' file sdcard.img 

si puo' quindi copiare il file su una Sd Card con dd ed usare una Raspberry reale oppure si puo' emulare tramite QEmu
Per fare cio' si deve scaricare il kernel per QEmu da

git clone https://github.com/dhruvvyas90/qemu-rpi-kernel.git

e si lancia

qemu-system-arm -kernel ./qemu-rpi-kernel/kernel-qemu-3.10.25-wheezy -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda sdcard.img


ci si trova quindi in una shell Busybox

lunedì 4 novembre 2019

Librerie con buildroot

per continuare il post precedente volevo provare a cross compilare  linkando delle librerie dinamiche.
Il progetto Buildroot rende disponibile un plugin per Eclipse ma e' disponibile solo per Eclipse Luna mentre attualmente e' disponibile la versione 2019 (dove il plugin non funziona)



Se si prova  scaricare Eclipse Luna e si cerca di esesguirlo su una Debian 11 non fuzionera' perche' necessita di JDK 11 (su Debian Java 8 e' stato rimosso e di default e' disponibile Java 11).
Non e' possibile usare i repository ufficiali per fare il downgrade per cui' ci si deve appoggiare ad un repository esterno con in comandi


sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9 
echo "deb http://repos.azulsystems.com/debian stable main" | sudo tee /etc/apt/sources.list.d/zulu.list
apt-get install zulu-8

fatto cio' In Help/Install New Software di Eclipse di aggiunge il link

http://buildroot.org/downloads/eclipse/luna

e si installa il plugin Buildroot

Come esempio si puo' provare a linkare in modo dinamico la libreria ZLib
Da make menuconfig di BuildRoot si spunta Register Toolchain within Eclipse dal menu Toolchain


dopo di cio' Target packages/Libraries/Compression/ si seleziona Zlib

si esce si effettua il make

Si ritorna ad Eclipse File/New/Project/Empty Project/Buildroot MIPS e si crea un nuovo file incollando questo esempio https://github.com/madler/zlib/blob/master/test/example.c

Per abilitare la libreria si va in Project Settings/C C++ Build/Settings e si scorre verso destra dal tab Tool Settings fino a trova Pkg-config e si seleziona zlib



L'eseguibile compilato (con il comando file) dovra' contenere la seguente stringa
h5: ELF 32-bit MSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, with debug_info, not stripped

Si fa quindi Build e si sposta il progetto sulla Arduino Yun in scp, si cambiano i permessi per l'esecuzione

warning: different zlib version
zlib version 1.2.11 = 0x12b0, compile flags = 0x55
uncompress(): hello, hello!
gzread(): hello, hello!
gzgets() after gzseek:  hello!
inflate(): hello, hello!
large_inflate(): OK
after inflateSync(): hello, hello!
inflate with dictionary: hello, hello!
root@Yun2:~# ldd ./h5
libz.so.1 => /usr/lib/libz.so.1 (0x77124000)
libc.so.0 => /lib/libc.so.0 (0x770b8000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x77095000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x77146000)

una volta in esecuzione il programma gira anche se si lamenta di una differenza di librerie tra quella linkata da buildroot e quella effettivamente presente sulla Yun

Se si prova a compilare con ncurses la cosa diventa piu' seria perche' buildroot linka contro ncurses 6 mentre su Yun opkg rende disponibili libncurses 5.7.5 ed il programma non si avvia 

venerdì 1 novembre 2019

Cross compilare da Debian per Arduino Yun

Seguendo il precedente post su come poter continuare ad usare Yun nonostante il supporto end-of-life sono riuscito a settate la possiblita' di effettuare la cross compilazione da Debian verso Yun

Per prima cosa si scarica Buildroot  e lo si  configura (make menuconfig) con target MIPS big endian, ELF MIPS32 con toolchain uCLIb abilitando con Gdb per futuri sviluppi. Fatto cio' si lancia make e si aspetta

A questo punto per rendere piu' semplice la cross compilazione si usa Eclipse CDT
Si crea un nuovo progetto C con Cross GCC e si lasciano in bianco GCC Cross Command che saranno compilati in seguito

Si aprono quindi le proprieta' del progetto Eclipse selezionando Cross GCC in ToolChain Editor


Si setta come Prefix (attenzione al meno finale che deve essere incluso) e Path

mips-buildroot-linux-uclibc-
/home/luca/Downloads/buildroot-2019.02.6/output/host/usr/bin



A questo punto C Build Settings/Includes si include la directory

/home/luca/Downloads/buildroot-2019.02.6/output/host/usr/include  

tutti i file necessari si trovano nella sottodirectory /output/host/ di Buildroot



Si aggiungono due pathe per le librerie

/home/luca/Downloads/buildroot-2019.02.6/output/host/usr/lib
/home/luca/Downloads/buildroot-2019.02.6/output/host/mips-buildroot-linux-uclibc/lib



Arrivati fino a qui si puo' compilare il file e copiarlo in scp sulla Yun

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...