DSView, compilare il programma da sorgenti

DSView, compilare il programma da sorgenti

Un software open source basato sul progetto Sigrok che permette di collegare periferiche della cinese DreamSourceLab nata in seguito ad un progetto presentato sulla piattaforma KICKSTARTER. Al momento non tutte le distribuzioni GNU/Linux implementano tale software nei propri repository pertanto nel seguito verrà illustrata la procedura di compilazione da sorgenti specificatamente per la distribuzione GNU/Linux Mageia 8. Ovvio come operando da sorgenti la procedura potrà essere (e)seguita su qualsiasi distribuzione GNU/Linux a patto di adattare i nome dei pacchetti che verranno riportati alla distribuzione in uso.

Un po’ più di una introduzione

DSView è un software di acquisizione, analisi e misura del segnale logico, decodifica protocolli digitali nonché acquisizione e misura in tempo reale di un segnale analogico con annessa analisi spettrale il tutto condito con un numero di funzioni tali da poter essere utilizzato in un ampio ventaglio di misure.

Basato sul progetto Sigrok, sviluppato e manutenuto dalla stessa DreamSourceLab, al momento di scrivere è arrivato alla versione 1.1.2 supportando tre modalità di funzionamento: analizzatore logico, oscilloscopio e acquisizione dati. Questo è permesso grazie al supporto hardware che vede:

  • Analizzatori logici della serie DSLogic;
  • Oscilloscopi della serie DSCope.

I sorgenti di DSView sono ospitati, a questo indirizzo, su GitHub e come è possibile vedere in basso a destra parliamo di un software scritto in tre linguaggi di programmazione; Python per un 44% del codice, C per circa il 21% e la rimanente parte del 33% in C++. Questo implica, prima di partire a caso sulla compilazione di DSView, la verifica che siano installati almeno quattro elementi;

  1. Il compilatore C, pacchetto gcc;
  2. Il compilatore C++ ovvero il pacchetto gcc-c++;
  3. L’interprete Python in versione 3, pacchetto python3.
  4. Infine, essendo i sorgenti ospitati su GitHub, per la loro clonazione occorre aver installato il pacchetto git.

Va da se che si dovranno accettare (leggasi installare) anche tutte le dipendenze che verranno selezionate dal gestore software in uso.

Generalmente, ma non esclusivamente, quando si è in presenza di un programma scritto in C/C++ ci si deve aspettare che esso faccia uso degli GNU AutoTools un insieme di strumenti di programmazione principalmente lato sviluppatori, ma poi utilizzati per il lancio anche dall’utente, e progettati per aiutare a rendere il codice sorgente del software portabile su molti sistemi Unix/Unix-like, e GNU/Linux è uno di questi (l’immagine in alto a sinistra è un tipico principio di funzionamento degli autotools a partire da codice C/C++, click per ingrandirla).

In alcuni casi viene utilizzato lo script autogen.sh (generalmente è un guscio, un involucro, un “wrapper”, per il comando autoreconf -i) per generare lo script configure (partendo da un file configure.ac utilizzando il pacchetto autoconf) compresi tutti i file ad esso necessari come Makefile.in e Makefile.am secondo il workflow riportato in basso.

 

Questo comporta l’installazione, qualora non lo fossero, di ulteriori pacchetti aggiuntivi prima di cimentarsi nella compilazione da sorgenti e di preciso:

libtool-base
autoconf
automake

con annesse dipendenze che dovessero tirarsi dietro in funzione dello stato di installazione della distribuzione in uso. Un possibile libro di testo di riferimento potrebbe essere Autotools, 2nd Edition: A Practitioner’s Guide to GNU Autoconf, Automake, and Libtool di John Calcote (immagine a lato, click per ingrandirla). Espletata questa prima fase occorre verificare le dipendenze di DSView affinché, se desiderato, possa supportare tutte le funzioni e tutto l’hardware.

Compilare e installare libserialport

Poiché DSView basa il suo funzionamento sul progetto Sigrok, il primo passo è l’installazione delle librerie libserialport i cui sorgenti sono ospitati, a questo indirizzo, su GitWeb. Da precisare che sebbene libserialport sia utilizzato da Sigrok, trattasi di una libreria completamente indipendente che può essere utilizzata anche in altri ambiti/progetti. La libreria libserialport non dipende da nessuna libreria o progetto relativo a Sigrok.

Dopo queste dovute precisazioni si può clonare il repositorio dei sorgenti libserialport utilizzando, in una shell, il comando:

git clone git://sigrok.org/libserialport

Non dovrebbe risultare alcun problema poiché il client git è stato già installato in un passaggio precedente. Nel percorso dove è stato lanciato il suddetto comando verrà così creata una cartella di nome libserialport con tutti i sorgenti. A questo punto è sufficiente entrare in essa con cd libserialport quindi impartire nell’ordine i comandi:

./autogen.sh
./configure
make

Se per ogni comando non è stato restituito alcun errore (al netto di eventuali warning che agli utenti non interessano) è possibile procedere all’installazione dapprima diventando amministratore, comando su seguito dalla password (o utilizzando sudo per quelle distribuzioni che lo abilitano in maniera predefinita), quindi impartendo il comando make install che installerà le librerie in /usr/local/lib, i file header (.h) in /usr/local/include e così via per tutti gli altri file costituenti il pacchetto. In basso la sequenza dei comandi, dalla parte finale di ./configure a seguire.

NOTA: se si effettua l’installazione utilizzando il comando su per diventare amministratore, si ricordi di impartire il comando exit una volta terminata la procedura di installazione con il comando make install al fine di ritornare un “utente normale”. Questo accorgimento nel seguito non verrà più ripetuto, lo si considererà implicito dopo ogni make install.

Scaricare i sorgenti DSView

Sistemata la prima dipendenza, ora è possibile recuperare i sorgenti del visualizzatore/analizzatore DSView e questa fase la si può portare a termine secondo due modalità; la versione stabile DSView 1.1.2 rilasciata a maggio 2020 nel sito della società sviluppatrice oppure via GitHub la versione che comprende alcune correzioni della versione stabile e ancora non rilasciate in una versione ufficiale. In questa ottica, poiché i sorgenti sono recuperabili via GitHub, volendo operare via CLI (Command Line Interface), faremo di nuovo uso del client git. Pertanto aprire una shell e impartire il comando:

git clone https://github.com/DreamSourceLab/DSView.git DSView

affinché i sorgenti presenti su GitHub possano essere clonati in locale nella cartella di nome DSView nel percorso dove viene lanciato il comando nella shell.

Nella cartella DSView, ma nel comando git riportato poco sopra gli si può dare qualsiasi nome, sono presenti 3 cartelle di tre distinti software da compilare e installare; libsigrok4DSL, libsigrokdecode4DSL e il software di visualizzazione DSView. Essendo presenti tre programmi distinti la procedura corretta vede dapprima compilazione e installazione di libsigrok4DSL, poi compilazione e installazione di libsigrokdecode4DSL e infine DSView.

Compilare e installare libsigrok4DSL – Parte 1

Per questa operazione occorre dapprima assicurarsi di installare/aver installato i pacchetti riportati di seguito. Infatti, poiché si sta compilando da sorgenti, ci si deve sempre assicurare di aver installato anche i pacchetti contenenti i file header, in genere pacchetti con suffisso -devel per Red-Hat e derivate oppure -dev per Debian e derivate. Naturalmente si dovranno accettare anche l’installazione delle dipendenze segnalate dal gestore dei pacchetti.e dipende

lib64alsa2-devel
lib64check-devel
lib64usb1.0-devel
lib64zip-devel

Ora, senza chiudere la shell, dopo aver scaricato i sorgenti DSView, occorrerà entrare nella cartella:

cd DSView/libsigrok4DSL/

ed impartire di nuovo nell’ordine i comandi

./autogen.sh
./configure
make

Ma un momento! C’è qualcosa che non torna nell’output del comando ./configure; perché, se libserialport è stato installato in un passo precedente, la configurazione di libsigrok4DSl non la vede? Notare nell’immagine l’eloquente riga libserialport >= 0.1.0: no. Stesso discorso per le librerie libftdi.

I percorsi delle librerie software

Quando si opera da sorgenti, poiché si vanno generalmente ad installare i programmi nel percorso /usr/local/* , occorre verificare che il sistema operativo riesca a trovare, nel suddetto percorso, le librerie installate, qualunque esse siano.

Quando un tool (script) come configure vuole recuperare informazioni sulle versioni delle librerie installate che dovranno essere utilizzate per il programma che si sta compilando, si affida generalmente al programma pkg-config il quale viene installato automaticamente in tutte le distribuzioni. Ad esempio per elencare tutte le librerie correntemente viste da pkg-config è sufficiente eseguire il comando pkg-config --list-all. Tale programma normalmente è presente di default in tutte le distribuzioni, non occorre far nulla. Se si provasse a dare un’occhiata al manuale si potrebbe leggere chiaramente:

pkg-config recupera le informazioni sui pacchetti da specifici file di metadati, dei normali file di testo. Questi file hanno il nome del pacchetto o della libreria che rappresentano e una estensione .pc. Per impostazione predefinita, pkg-config cerca questi file nella directory prefix/lib/pkgconfig. È possibile aggiungere percorsi di ricerca utilizzando la variabile d’ambiente PKG_CONFIG_PATH.

La ricerca dei file .pc viene effettuata in percorsi impostati in maniera predefinita ma che, al netto dei percorsi di base fondamentali, possono variare da distribuzione a distribuzione. I percorsi impostati potranno essere visualizzati con il comando:

pkg-config --variable pc_path pkg-config

che nel caso di una Mageia 8 fornisce un eloquente:

/usr/lib64/pkgconfig:/usr/share/pkgconfig

Questo implica che il percorso /usr/local/lib/* non viene proprio preso in considerazione, per tale motivo la libreria libserialport non potrà essere mai vista! Come istruire il sistema operativo al fine di poter “curiosare” anche nel percorso /usr/local/* tipico dell’installazione da sorgenti? La risposta è arrivata dalle righe di manuale sopra riportate; occorre agire sulla variabile d’ambiente PKG_CONFIG_PATH che identifica l’elenco delle directory secondarie in cui vengono cercati ulteriori file .pc.

Ma come impostarla? In realtà la risposta dovrebbe essere abbastanza immediata se si pensa all’articolo Shell bash: i file di configurazione; è sufficiente aggiungere i percorsi nel file .bashrc e di preciso la riga (più percorsi devono essere separati dal carattere due punti “:“):

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig

la quale ordina a pkg-config di andare a vedere la presenza di file .pc anche nei due percorsi riportati oltre a quelli predefiniti. Per rendere attiva la modifica o si riavvia la sessione utente oppure si lancia il file con il comando (notare il punto iniziale seguito da uno spazio, non è un errore!).

. ~/.bashrc

Come è chiaramente visibile sono stati aggiunti due percorsi; il primo è per la libreria libserialport, il secondo per l’ultima versione delle librerie libftdi (qualora le si volessero attivare); infatti dall’immagine precedente, sebbene non evidenziate, anche le libftdi non vengono viste dal sistema poiché installate da sorgenti come da procedura di seguito riportata.

Installare le libftdi? Sono opzionali, però…

Pur essendo una libreria software opzionale potrebbe essere necessaria installarla qualora si voglia il supporto ai prodotti FTDI (Future Technology Devices International Ltd.) in genere bridge USB-UART, ma non solo. È una libreria open source necessaria per “colloquiare” con diversi chip della famiglia FTDI, e.g. FT230X, FT4232H/FT2232H, FT232R/FT245R, FT2232L/FT2232D/FT2232C, FT232BM/FT245BM (comprese varianti BL/BQ) e FT8U232AM/FT8U245AM. La libreria è collegata al programma che ne fa uso e che gira in user space, pertanto non è richiesto alcun modulo del kernel.

La procedura per la compilazione da sorgenti rimane la medesima vista per la libserialport. Come prima cosa, al solito, ci si deve assicurare che le dipendenze necessarie siano installate verificando la presenza dei pacchetti:- nel qual caso procedere alla loro installazione tramite il gestore software della distribuzione in uso – verificando la presenza dei pacchetti:

cmake
doxygen

lib64boost-devel
lib64confuse-devel
lib64python-devel
libusb1.0-devel
swig

In caso negativo occorrerà provvedere all’installazione dei pacchetti mancanti tramite il gestore software della distribuzione in uso il quale, come noto, indicherà ulteriori dipendenze da dover installare.

Le librerie libftdi sono sviluppate dalla teutonica Intra2net e rilasciate come software open source. È possibile la clonazione del repositorio via git con il comando:

git clone git://developer.intra2net.com/libftdi libftdi

che creerà una cartella di nome libftdi nella quale si dovrà entrare con cd libftdi. A questo punto il primo passo vede una modifica, con un qualsiasi editor di testi, al file CMakeOptions.txt portando su ON tutte le voci presenti che hanno OFF come valore. Salvare il file così modificato quindi creare una nuova directory con mkdir build, entrare nella directory appena creata con cd build e lanciare il comando:

cmake -DCMAKE_INSTALL_PREFIX=”/usr/local” ../

seguito, se non ci sono errori, dal comando per la compilazione make e, in assenza di errori, dal comando make install con i permessi dell’amministratore (o utilizzando sudo) che installerà le librerie nel percorso /usr/local/lib64/*, percorso nel quale, lo si vuole ricordare, “l’utente normale” non ha i diritti di scrittura.

Compilare e installare libsigrok4DSL – Parte 2

A questo punto si può ritornare nuovamente nei sorgenti DSView e di preciso nella cartella libsigrok4DSL per lanciare nuovamente il comando ./configure il cui output evidenzia (immagina al lato, un click per ingrandirla) il riconoscimento delle librerie libserialport, ma non delle librerie libftdi eppure, come visibile nell’immagine in basso, le librerie sono presenti nel percorso indicato a pkg-config. Allora dov’è/qual è il problema?

Provando con la query --modversion ovvero con il comando pkg-config --modversion libftdi viene restituito un laconico:

Package libftdi was not found in the pkg-config search path.
Perhaps you should add the directory containing `libftdi.pc’
to the PKG_CONFIG_PATH environment variable
Package ‘libftdi’, required by ‘virtual:world’, not found

quindi la libreria libftdi non esiste! E il programma ha ragione, perché l’esatto nome della libreria, nelle sue nuove versioni, è libftdi1 e non libftdi e infatti impartendo il comando pkg-config --modversion libftdi1 viene restituita la versione 1.5 installata da sorgenti!

A sinistra le librerie libftdi1 in /usr/local/lib64/, a destra il file .pc in /usr/local/lib64/pkgconfig

 

Osservando l’immagine in alto a sinistra si nota come la configurazione per libsigrok4DSL vada alla ricerca della libreria libftdi che, non esistendo, ovviamente non riesce a trovare. Pertanto c’è un problema al livello di configurazione dei sorgenti, problema riscontrato nel file configure.ac nel quale l’analisi delle librerie necessarie è ottenuto in un ciclo for-do-done di script shell, esattamente quello che segue nel quale la presenza o meno della libreria è valutata all’interno dell’if-then-else-fi, nelle righe dalla 3 alla 8.

# Note: This only works for libs with pkg-config integration.
for lib in "glib-2.0 >= 2.32.0" "libzip >= 0.10" "libserialport >= 0.1.0" "libusb-1.0 >= 1.0.9" "libftdi >= 0.16" "libudev >= 151" "alsa >= 1.0" "check >= 0.9.4"; do
   if `$PKG_CONFIG --exists $lib`; then
      ver=`$PKG_CONFIG --modversion $lib`
      answer="yes ($ver)"
   else
      answer="no"
   fi
   echo "  - $lib: $answer"
done

 

Notare come venga utilizzata la query --modversion per pkg-config. La correzione è semplice, è sufficiente scrivere libftdi1, ovvero aggiungere un 1 a libftdi, e salvare il file così modificato (visibile nell’immagine in basso).

 

A questo punto prima di rilanciare il comando ./configure è opportuno cancellare eventuali file creati nella configurazione precedente e questo è possibile tramite il comando make clean (non sempre disponibile nei sorgenti dei programmi). Solo a questo punto rilanciando di nuovo il ./configure finalmente la libreria viene vista (immagine in basso) e si può così procedere alla compilazione con make e, in assenza di errori, alla successiva installazione con le credenziali da amministratore (o tramite sudo) impartendo make install.

Ora tocca a libsigrokdecode4DSL

Ora che le prime librerie e associate dipendenze sono state sistemate il passo successivo vede la compilazione e installazione delle librerie deputate alla decodifica dei vari protocolli (ne sono supportati 139 al momento della compilazione), le libsigrokdecode4DSL.

Il punto di partenza è la posizione, nella shell, nella cartella libsigrok4DSL pertanto un cd ../libsigrokdecode4DSL ci porterà nella nuova destinazione nella quale si dovrà impartire nell’ordine indicato i seguenti comandi (le dipendenze necessarie sono già state installate nei passi precedenti):

./autogen.sh
./configure
make
make install

di cui l’ultimo con i permessi dell’amministratore o, al solito, utilizzando sudo.

Finalmente DSView!

Dalla posizione precedente (dopo essere usciti con exit da utente amministratore) impartire cd ../DSView per entrare nella cartella che conterrà tutto il necessario per compilare e installare il front-end grafico omonimo DSView.

Prima di lanciare le classiche operazioni di configurazione e compilazione occorrerà verificare la presenza dei pacchetti riportati subito in basso ed eventualmente installare – comprese ulteriori dipendenze segnalate dal gestore software – quelli mancanti.

lib64boost-devel
lib64fftw-devel
lib64qt5base5-devel
lib64qt5widgets-devel

Solo a questo punto è possibile impartire il comando cmake . (notare il punto, non è un refuso!) seguito, in assenza di errori, da make e, se non ci sono errori, dal solito make install impartito da utente amministratore per avere in /usr/local/bin l’eseguibile DSView da poter lanciare da una shell oppure previa creazione sul desktop di un lanciatore con associata icona.

Si fa presente che tale eseguibile è visibile nella shell grazie al percorso indicato dalla variabile d’ambiente PATH la quale, generalmente in tutte le distribuzioni, contempla tra gli altri anche il percorso predefinito /usr/local/bin come è facile verificare con echo $PATH. In caso contrario il suddetto percorso dovrebbe esser aggiunto per l’utente attuale al file .bashrc esattamente come fatto per la variabile PKG_CONFIG_PATH.

Osservare, in alto a sinistra, come sia stato riconosciuto l’analizzatore logico DreamSourceLab DSLogic Plus collegato alla porta USB e per il quale ne è prevista una recensione nei prossimi giorni.

mikiadmin

Un pensiero su “DSView, compilare il programma da sorgenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *