Ham Radio Control (Hamlib) - ze źródeł

Spis treści

Biblioteka HamlibBiblioteka (a w zasadzie ich zbiór) Ham Radio Control, w skrócie Hamlib zostały opracowane przez Stéphane Fillod (F8CFE), Franka Singleton (VK3FCS) oraz Hamlib Group by udostępnić programistom (tworzącym aplikacje sterujące urządzeniami radiowymi i/lub antenami) spójny interfejs.

Wystarczy wspomnieć o tak użytecznych jej funkcjach jak: set/get_freq, set/get_mode czy set/get_vfo, itd. :D

Hamlib nie jest aplikacją końcową, stanowi raczej warstwę oprogramowania pozwalającą na proste sterowanie urządzeniami radiokomunikacyjnymi (odbiorniki, nadajniki, transceiwery, rotory, itd.) w oparciu o określone protokoły komunikacji.

W dokumentacji projektu (p.7) Autorzy biblioteki na pytanie: "Where are the GUI's? odpowiadają: "Build it and they will come ..." Co w wolnym przekładzie oznacza: Gdzie jest GUI /Graficzny Interfejs Użytkownika/?" - "Stwórz go, a znajdziesz..." Nic dodać, nic ująć! :D

Szerokiemu wykorzystaniu biblioteki sprzyja również fakt, iż jest ona niezależna od platformy sprzętowo-programowej, a Autorzy udostępnili jej kod na zasadach GNU Lesser General Public License (LGPL). Wykorzystam bibliotekę do kompilacji ze źródeł programu CubicSDR, który "obsłuży" radio SDR.

 Aplikacja i biblioteka z pakietu starsze niż te ze źródełWarto sięgnąć do udostępnionych źródeł. Często nie tylko aplikacja (dostępna w źródłach) jest "świeższa", ale i podłączone do niej biblioteki - również.

Np. możesz tak skompilować źródła popularnego programu CubicSDR by mógł sterować niemałą liczbą urządzeń radiowych.

Biblioteka Hamlib ze źródeł....

Jak wspomniałem już biblioteka Hamlib wymaga "obecności" szeregu komponentów podczas procesu kompilacji. Istotne w tym przypadku są nie tylko same pakiety, ale również ich wersje!

Jednak zanim przystąpisz do dalszych działań (o ile nie zrobiłeś tego wcześniej) zapoznaj się z artykułem: Automake, build-essential, cmake... na dobry start, gdzie opisałem czynności związane z przygotowaniem samodzielnej kompilacji kodów źródłowych.

Jeśli masz to już za sobą to zaczniemy nietypowo, bo od napotkanego (mojego)... błędu.


Każdemu może się zdarzyć...

Brak wymaganej biblioteki może spowodować, że zamiast poczucia sukcesu na ekranie terminala pojawi się komunikat:

.../skrót/
Makefile:475: recipe for target 'hamlib.info' failed
make[1]: *** [hamlib.info] Error 127
make[1]: Opuszczenie katalogu '/katalog/SDR/Hamlib/doc'
Makefile:602: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1
~/SDR/Hamlib $

Przyczyną tego błędu był brak w (moim) systemie pakietu realizującego polecenie makeinfo. By usunąć przyczynę błędu należy zainstalować pakiet texinfo. Tradycyjnie ;) wywołujemy w oknie terminala polecenie:

~ $ sudo apt install texinfo
[sudo] hasło użytkownika user: ******
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności
... /skrót/
Konfigurowanie pakietu texinfo (6.5.0.dfsg.1-2) ...
~ $

a następnie sprawdzamy, czy wszystko "jest na miejscu":

~ $ whereis texinfo
texinfo: /usr/lib/texinfo /usr/share/texinfo /usr/share/man/man5/texinfo.5.gz

Ponowna próba kompilacji zakończy się bez błędu, czyli sukces! :)

.../skrót/
make[1]: Wejście do katalogu '/katalog/SDR/Hamlib/doc'
Updating ./version.texi
  MAKEINFO hamlib.info
  MAKEINFO hamlib.html
make[1]: Opuszczenie katalogu '/katalog/SDR/Hamlib/doc'
make[1]: Wejście do katalogu '/katalog/SDR/Hamlib'
make[1]: Nie ma nic do zrobienia w 'all-am'.
make[1]: Opuszczenie katalogu '/katalog/SDR/Hamlib'
~/SDR/Hamlib $

Jak widać kwestia obecności w systemie lub nie określonych pakietów decyduje o tym jak zakończy się proces kompilacji. Dlatego też warto poświęcić chwilę uwagi na wymagania jakie musimy spełnić.


Wymagania

Hamlib opracowano dla różnych systemów Linux w oparciu o narzędzia GNU. Przed kompilacją należy upewnić się, że mamy wersje co najmniej takie jak  wymagane. W innym przypadku proces kompilacji (źródeł pobranych z GitHuba)  zakończy się błędem.

W Debianie i pokrewnych dystrybucjach (Ubuntu, Mint, itd.) instalując pakiet "build-essential" zainstalujemy wiele niezbędnych narzędzi. Zminimalizuje to liczbę pakietów, które należy zainstalować ręcznie (nazwy pakietów Debiana są wymienione poniżej, w innych dystrybucjach mogą one być inne).

Pakiet Wersja Weryfikacja Git do połączenia z hamlib.git.sourceforge.net,

*libtool >= 2.2.6b zgodne z CVE-2009-3736
 kompilator Gnu C,
ew. inny zgodny z C99
   gcc --version
 GNU make  lub inny współczesny, BSD również  make --version
 autoconf  2.59  autoconf --version
 automake  1.7  automake --version
 libtool*  2.2.6b  libtool --version
 libltdl-dev  2.2.6b  

Uwaga: jeśli w systemie zainstalowane są pakiety autoconf, automake sprawdź czy mają one wersję co najmniej wskazaną w tabeli powyżej.

Pakiet Wersja Weryfikacja
 kompilator Gnu C++    g++ --version
 swig  1.3.14  swig --version
 perl devel    h2xs
 tcl devel    tcltk-depends
 python devel    python-config
 libxml2 devel    xml2-config --version
 libgd2 devel    gdlib-config --version
 libusb devel wersja 1.0.0 wykluczona!  libusb-config
 RPC devel (libc-dev)    rpcgen --version

Niektórzy mają problemy z automake v. 1.5. Jeśli należych do nich Autorzy rekomendują jego aktualizację do wersji 1.7 jako bardziej stabilnej.

Autorzy Hamlib wskazują też, że jkkolwiek wymóg instalacji bibliotek (wskazanych w tabeli obok) ma charakter opcjonalny, to jednak (w dokumentacji projektu) gorąco zalecają ich instalację:

Spełniając powyższe wymagania będziesz mógł nie tylko poprawnie skompilować bibliotekę w oparciu o źródła pobrane z GitHuba, ale przy odpowiedniej wiedzy i doświadczeniu aktywnie uczestniczyć w rozwoju projektu.

Tym, którzy chcą dokładniej zapoznać się z możliwościami "zindywidualizowania" procesu kompilowania sugeruję uważne przeczytanie dokumentacji projektu.

Zaczynamy jednak od tego od czego zaczęliśmy, czyli chęci skompilowania Hamlib, by mogła zostać wykorzystana przy późniejszej kompilacji innych programów. Zakładam, że w swym systemie (w katalogu domowym) masz podkatalog o nazwie: SDR.

Jeśli nie to dobra chwila by utworzyć i wejść do niego:

~ $ mkdir SDR
~ $ cd SDR
~/SDR $

Pobranie źródeł

Kolejną czynnością będzie utworzenie (w automatycznie utworzonym podczas klonowania katalogu Hamlib) lokalnej kopii zasobu źródeł pobranych z GitHuba. Następnie wejdż do stworzonego katalogu Hamlib:

~/SDR $ git clone https://github.com/Hamlib/Hamlib.git
Cloning into 'Hamlib'...
remote: Counting objects: 24159, done.
remote: Total 24159 (delta 0), reused 0 (delta 0), pack-reused 24159
Receiving objects: 100% (24159/24159), 7.26 MiB | 2.17 MiB/s, done.
Resolving deltas: 100% (19528/19528), done.
~/SDR $ cd Hamlib/
~/SDR/Hamlib $

Warto pamiętać, że jest to (jeśli tylko zechcesz) proces jednorazowy.

Chcąc zaktualizować lokalny zasób nie musisz go ponownie klonować. Wystarczy, że będąc w głównym katalogu projektu, tu: ~/SDR/Hamlib) wydać w oknie terminala następujące polecenie:

~/SDR/Hamlib $ git pull

Kompilacja

Źródła zostały skopiowane. Zanim przystąpisz do ich kompilacji należy wydać polecenie przygotowujące (konfigurujące) jej "lokalne" parametry (niezbędne dla .configure):

~/SDR/Hamlib ./bootstrap
Running 'autoreconf -i' to process configure.ac
and generate the configure script.
aclocal: installing 'macros/libtool.m4' from... /skrót/
----------------------------------------------------------------------
Hamlib Version 3.3~git configuration:
Prefix /usr/local
Preprocessor   gcc -E
C Compiler     gcc -g -O2
C++ Compiler   g++ -g -O2
Package features:... /skrót/
-----------------------------------------------------------------------
~/SDR/Hamlib $

Przystępujemy do komplilacji żródeł:

~/SDR/Hamlib $ .configure
~/SDR/Hamlib $ make
Making all in macros
make[1]: Wejście do katalogu '/katalog/SDR/Hamlib/macros'
make[1]: Nie ma nic do zrobienia w 'all'.
make[1]: Opuszczenie katalogu '/katalog/SDR/Hamlib/macros'
Making all in include.../skrót/
Updating ./version.texi
  MAKEINFO hamlib.info
  MAKEINFO hamlib.html
make[1]: Opuszczenie katalogu '/katalog/SDR/Hamlib/doc'
make[1]: Wejście do katalogu '/katalog/SDR/Hamlib'
make[1]: Nie ma nic do zrobienia w 'all-am'.
make[1]: Opuszczenie katalogu '/katalog/SDR/Hamlib'
~/SDR/Hamlib $

Ostatni komunikat wskazuje, że proces zakończył się sukcesem. Możemy przystąpić do instalacji, która wymaga uprawnień superuser'a:

~/SDR/Hamlib$ sudo make install
[sudo] hasło użytkownika user: ******
Making install in macros
make[1]: Wejście do katalogu '/katalog/SDR/Hamlib/macros'
make[2]: Wejście do katalogu '/katalog/SDR/Hamlib/macros'
.../skrót/
/usr/bin/install -c -m 644 hamlib.pc '/usr/local/lib/pkgconfig'
make[2]: Opuszczenie katalogu '/katalog/SDR/Hamlib'
make[1]: Opuszczenie katalogu '/katalog/SDR/Hamlib'
~/SDR/Hamlib $

Oczywiście proces kompilacji oraz instalacji nie musi przebiegać w oparciu o ustawienia domyślne. Możesz go na wiele sposobów (świadomie!) konfigurować. Jak? - zostało to opisane między innymi w dokumentacji projektu.

Należy jednak mieć świadomość, że wprowadzanie zmian w konfiguracji wymaga przede wszystkim wiedzy i doświadczenia. W tej dziedzinie metoda "prób i błędów" nie zawsze dobrze się sprawdza. ;)


Odinstalowanie Hamlib

Kończąc artykuł nie można pominąć faktu, że oczywiście tak zainstalowaną biblitekę można równie łatwo odinstalować. O ile zajdzie taka potrzeba.

W tym celu będąc w głównym katalogu projektu, tu: ~/SDR/Hamlib) należy wydać w oknie terminala następujące polecenie (które również wykonywane jest z uprawnieniami superuser'a):

~/SDR/Hamlib/ $ sudo make uninstall
[sudo] hasło użytkownika user: ******
.../skrót/
Making uninstall in macros
make[1]: Wejście do katalogu '/katalog/SDR/Hamlib/macros'
make[1]: Nie ma nic do zrobienia w 'uninstall'.
make[1]: Opuszczenie katalogu '/katalog/SDR/Hamlib/macros'
Making uninstall in include
make[1]: Wejście do katalogu '/katalog/SDR/Hamlib/include'
 ( cd '/usr/local/include' && rm -f hamlib/rig.h hamlib/riglist.h.../skrót/
 ( cd '/usr/local/lib/pkgconfig' && rm -f hamlib.pc )
make[1]: Opuszczenie katalogu '/katalog/SDR/Hamlib'
~/SDR/Hamlib$

Po raz kolejny przećwiczyłem proces kompilacji ze źródeł. Okazało się, że nie jest tak trudne. A w myśl zasady: "trening czyni mistrzem" ;) wiem, że... jeszcze wiele pracy i ćwiczeń przede mną.

Podczas opracowania tego dokumentu wykorzystano sugestie Autorów zawarte w dokumentacji projektu oraz własne doświadczenia.