W poniższym materiale opisana została budowa i konfiguracja prostej stacji bazowej sieci telefonii komórkowej. Do konstrukcji BTSa wykorzystano komputer Raspberry Pi 2 i moduły UmTRX i Osmocom. Realizacja podobnego układu możliwa była z wykorzystaniem Raspberry Pi w wersji 1, ale oprogramowanie - OpenBTS - jakie do tego wykorzystano było dosyć skomplikowane, a same obliczenia potrzebne do obsługi radia definiowanego programowo (SDR) były bardzo obciążające dla komputera. Raspberry Pi 2 posiada czterordzeniowy procesor ARM, ale także rozszerzenie NEON SIMD, niezwykle przydatne do cyfrowego przetwarzania sygnałów.
Moduł Osmocom to stos GSM. Uruchomiony zostanie on na Raspberry Pi 2, do którego poprzez Ethernet podpięto UmTRX - dwukanałowy transceiver SDR, który zapewni komunikację radiową dla systemu. UmTRX można potraktować jako baaardzo szybką kartę dźwiękową - zajmuje się on generowanie sygnałów radiowych i ich przetwarzaniem. Jednakże pamiętać trzeba, że zasadnicza część przetwarzania sygnałów radiowych realizowana musi być na Raspberry Pi 2.
Uwaga!
Należy pamiętać, że nadawanie w pasmie GSM wymaga licencji, a nadając bez jej posiadania narażamy się na poważne konsekwencje prawne. Przed uruchomieniem układu należy sprawdzić jakie jest prawo w naszej okolicy (w Polsce licencja jest wymagana) i uzyskać odpowiednie zezwolenia.
Podstawowe zależności
W pierwszej kolejności zainstalować na Raspberry Pi musimy podstawowe narzędzia jakie będą nam potrzebne do pracy - narzędzia i biblioteki do C++, bazę danych, kodeki audiio etc. Pobieramy je poprzez apt-get:
Oprogramowanie będące routerem połączeń telefonicznych - LCR - pobieramy osobno z githuba i ręcznie instalujemy?
Dzięki wykorzystaniu LCR możemy zintegrować naszą sieć komórkową z siecią VoIP, a jeśli zainstalowane i skonfigurowane mamy także mISDN, to integrować możemy także rozmowy z linii kablowych.
Sterowniki transceivera
Do działania system wykorzystuje moduł UmTRX, dlatego też na komputerze zainstalować musimy sterowniki. Oprogramowanie do modułu, jakie musimy zainstalować, składa się z dwóch fragmentów - bazy UHD, czyli driverów, oraz modułu wsparcia dla UmTRX. W pierwszej kolejności klonujemy z repozytorium github UHD i uruchamiamy cmake oraz sudo install. Po zainstalowaniu UHD uruchamiamy umtrx_update, które klonuje oprogramowanie z repozytorium UHD-Fairwaves i je instaluje.
Na tym etapie możemy uruchomić uhd_usrp_probe aby sprawdzić komunikację z transceiverem.
Osmocom
Pełny opis instalacji Osmocom znaleźć możemy tutaj. Poniżej znajduje się jedynie skrócona wersja, wraz z opisem poszczególnych komponentów, jakie musimy zainstalować:
libosmocore
Oprogramowanie libosmocore to bazowa biblioteka, wykorzystywana przez wiele projektów Osmocom. Biblioteka udostępnia różne podstawowe funkcje, takie jak timery, loggery czy funkcje szyfrowania.
libosmo-abis
W sieci GSM interfejs pomiędzy BTSem a kontrolerem stacji bazowej (BSC) nazywa się A-bis. Wsparcie dla tego interfejsu znajduje się właśnie w module libosmo-abis. Instalując ten moduł korzystamy z repozytorium fairwaves.
OsmoNITB
Oprogramowanie OpenBSC skonfigurowane jest do działania w trybie "sieć w pudełku", dzięki czemu nasz moduł BSC pełni także dodatkowe funkcje, które w normalnej sieci GSM realizowane są przez inne modułu: Home Location Register (HLR) oraz Mobile Switching Centre (MSC). Moduł OsmoNITB także pobierany jest z repozytorium fairwaves.
OsmoBTS
Moduł OsmoBTS integruje w sobie warstwy 1, 2 oraz 3 stacji bazowej i komunikuje się poprzez interfejs A-bis z modułem OsmoBITB. Moduł ten jednakże nie zapewnia fizycznej realizacji komunikacji, do której potrzebny jest kolejny moduł.
OsmoTRX
Ten moduł zapewnia kontrolę nad fizycznym modułem SDR. Moduł OsmoTRX znajduje się poniżej OsmoBTS w stosie, komunikuje się on z sprzętem UmTRX poprzez interfejs UHD. Podczas konfiguracji tego modułu istotne jest wykorzystanie wersji dostosowanej do Raspberry Pi 2 z rozszerzeniem NEON SIMD (./configure --with-neon).
Konfiguracja
W instrukcji instalacji sieci zawarto także przykłądowe konfiguracje dla:
* OsmoBTS (osmo-bts.cfg)
* OpenBSC NITB (open-bsc.cfg)
* LCR (options.conf, interface.conf, routing.conf)
Jako że konfiguracje dla modułów OsmoBTS i OsmoBSC dedykowane są do sieci 1800 MHz, to powinniśmy mieć licencję do nadawania właśnie w tym pasmie. W open-bsc.cfg dokonujemy teraz drobnych zmian:
Dzięki ustawieniu polityki autentykacji na zamkniętą do naszej sieci nie zalogują się żadne telefony, które nie zostaną do niej wpisane. To dobra praktyka, jeśli chodzi o testowanie naszego BTSa, dzięki czemu - nawet pomimo tego, że moc nadajnika jest niewielka - nie będziemy zakłócać naszej sieci, a inne telefonu komórkowe, nie będą próbowały przełączać się do naszej sieci.
W opisywanej sieci mamy tylko jeden BTS w którym konfigurujemy pojedynczy kanał transceivera (pomimo tego, że UmTRX jest dwukanałowy). Kanał 5409, jaki został wybrany do transmisji, odpowiada częstotliwościom 1810,8 MHz na downlink i 1715,8 MHz na uplink.
Dokładne ustawienia - kanał, częstotliwość etc - zależny jest od naszej lokalizacji i posiadanych licencji. Jeśli nasza licencja pozwala na nadawanie tylko na innym kanale, musimy dopasować do niej konfigurację naszego BTSa.
Uruchamianie sieci
Uruchamiamy nasze oprogramowanie skonfigurowane jako "sieć w pudełku", potem uruchamiamy stację bazowa i pozwalamy BTSowi komunikować się z BSC/NITB poprzez A-bis.
Następnie uruchamiamy komponent oprogramowania SDR, co powinniśmy móc zaobserwować w sieci, gdzie komputer zacznie komunikować się z UmTRXem, aby skonfigurować częstotliwości nadawania i odbierania a następnie zacząć przesył sygnału.
Finalnie uruchomić możemy Linux-Call-Router.
Jeśli mamy taką możliwość możemy sprawdzić działanie systemu z pomocą analizatora spektralnego, który powinien pokazać nam poprawną częstotliwość nośną.
Jeśli sprawdzimy obciążenie procesora RPi to widzimy, że transceiver OsmoTRX zajmuje nie więcej niż dwa rdzenie, co nie jest zbyt dziwne, z uwagi na konieczność wielu operacji na sygnałach odbieranych i nadawanych przez SDR.
Testowanie sieci
W pakiecie OpenBSC znajduje się linia komend, która pozwala testować system poprzez telnet. Możemy podłączyć się do modułu poprzez połączenie telnetowe na localhost na port 4242.
W logu widzimy, że telefon próbował się zalogować do sieci, ale nie udało mu się to ponieważ nie miał do tego uprawnień. Jednakże HLR zalogował go i nadał mu numer 1, co pozwala nam na autoryzację tego telefonu, co umożliwi mu zalogowanie się do sieci. Wszystko to widoczne będzie w wyjściu debugowania OpenBSC NITB.
Teraz telefon zaloguje się poprawnie do sieci, po tym jak został przez nas autoryzowany. Na telefonie wyświetli się informacja o tym do jakiej sieci został on podłączony - w naszym przypadku jest to GSMPi.
Można teraz wykonać połączenie z telefonu. Pod numerem 995 odtworzona zostaje muzyczka oczekiwania.
Na tym etapie na wyjściu debugowania z LCR widzimy informacje na temat połączeń i ich przełączania.
Po zalogowaniu, tak jak opisano powyżej, drugiego telefonu do sieci, można wykonać pomiędzy nimi połączenie.
A sprawdzając obciążenie CPU 'maliny' podczas rozmowy telefonicznej widzimy, że Raspberry Pi 2 radzi sobie bez problemu z obliczeniami w takiej sytuacji.
Podsumowanie
Z czterema rdzeniami ARM, zamiast jednego i rozszerzeniem NEON SIMD, komputer Raspberry Pi 2 doskonale realizuje aplikacje SDR - coś czego wersja pierwsza RPi nie mogła zrobić. Pomimo uruchomienia wszystkich zasobów potrzebnych do działania sieci GSM na tym komputerze nadal zostaje pewien zapas mocy obliczeniowej, jaki można wykorzystać do innych celów.
Źródło: http://www.rs-online.com/designspark/electronics/eng/blog/running-a-gsm-network-on-the-raspberry-pi-2/?utm_source=newsletter&utm_medium=email&utm_content=90315&utm_campaign=rpi2_gsm
Moduł Osmocom to stos GSM. Uruchomiony zostanie on na Raspberry Pi 2, do którego poprzez Ethernet podpięto UmTRX - dwukanałowy transceiver SDR, który zapewni komunikację radiową dla systemu. UmTRX można potraktować jako baaardzo szybką kartę dźwiękową - zajmuje się on generowanie sygnałów radiowych i ich przetwarzaniem. Jednakże pamiętać trzeba, że zasadnicza część przetwarzania sygnałów radiowych realizowana musi być na Raspberry Pi 2.
Uwaga!
Należy pamiętać, że nadawanie w pasmie GSM wymaga licencji, a nadając bez jej posiadania narażamy się na poważne konsekwencje prawne. Przed uruchomieniem układu należy sprawdzić jakie jest prawo w naszej okolicy (w Polsce licencja jest wymagana) i uzyskać odpowiednie zezwolenia.
Podstawowe zależności
W pierwszej kolejności zainstalować na Raspberry Pi musimy podstawowe narzędzia jakie będą nam potrzebne do pracy - narzędzia i biblioteki do C++, bazę danych, kodeki audiio etc. Pobieramy je poprzez apt-get:
sudo apt-get install libboost1.50-all-dev cmake libusb-1.0-0-dev python-cheetah liborc-0.4-dev sqlite3 libdbd-sqlite3 autoconf libtool libdbi1 libdbi-dev libpcsclite1 libpcsclite-dev libncurses5-dev libopencore-amrnb-dev libsofia-sip-ua-dev libortp-dev telnetOprogramowanie będące routerem połączeń telefonicznych - LCR - pobieramy osobno z githuba i ręcznie instalujemy?
git clone git://git.misdn.org/lcr.git
cd lcr
./autogen.sh
./configure --without-misdn --with-sip –with-gsm-bs
make
sudo make installDzięki wykorzystaniu LCR możemy zintegrować naszą sieć komórkową z siecią VoIP, a jeśli zainstalowane i skonfigurowane mamy także mISDN, to integrować możemy także rozmowy z linii kablowych.
Sterowniki transceivera
Do działania system wykorzystuje moduł UmTRX, dlatego też na komputerze zainstalować musimy sterowniki. Oprogramowanie do modułu, jakie musimy zainstalować, składa się z dwóch fragmentów - bazy UHD, czyli driverów, oraz modułu wsparcia dla UmTRX. W pierwszej kolejności klonujemy z repozytorium github UHD i uruchamiamy cmake oraz sudo install. Po zainstalowaniu UHD uruchamiamy umtrx_update, które klonuje oprogramowanie z repozytorium UHD-Fairwaves i je instaluje.
Na tym etapie możemy uruchomić uhd_usrp_probe aby sprawdzić komunikację z transceiverem.
Osmocom
Pełny opis instalacji Osmocom znaleźć możemy tutaj. Poniżej znajduje się jedynie skrócona wersja, wraz z opisem poszczególnych komponentów, jakie musimy zainstalować:
libosmocore
Oprogramowanie libosmocore to bazowa biblioteka, wykorzystywana przez wiele projektów Osmocom. Biblioteka udostępnia różne podstawowe funkcje, takie jak timery, loggery czy funkcje szyfrowania.
libosmo-abis
W sieci GSM interfejs pomiędzy BTSem a kontrolerem stacji bazowej (BSC) nazywa się A-bis. Wsparcie dla tego interfejsu znajduje się właśnie w module libosmo-abis. Instalując ten moduł korzystamy z repozytorium fairwaves.
OsmoNITB
Oprogramowanie OpenBSC skonfigurowane jest do działania w trybie "sieć w pudełku", dzięki czemu nasz moduł BSC pełni także dodatkowe funkcje, które w normalnej sieci GSM realizowane są przez inne modułu: Home Location Register (HLR) oraz Mobile Switching Centre (MSC). Moduł OsmoNITB także pobierany jest z repozytorium fairwaves.
OsmoBTS
Moduł OsmoBTS integruje w sobie warstwy 1, 2 oraz 3 stacji bazowej i komunikuje się poprzez interfejs A-bis z modułem OsmoBITB. Moduł ten jednakże nie zapewnia fizycznej realizacji komunikacji, do której potrzebny jest kolejny moduł.
OsmoTRX
Ten moduł zapewnia kontrolę nad fizycznym modułem SDR. Moduł OsmoTRX znajduje się poniżej OsmoBTS w stosie, komunikuje się on z sprzętem UmTRX poprzez interfejs UHD. Podczas konfiguracji tego modułu istotne jest wykorzystanie wersji dostosowanej do Raspberry Pi 2 z rozszerzeniem NEON SIMD (./configure --with-neon).
Konfiguracja
W instrukcji instalacji sieci zawarto także przykłądowe konfiguracje dla:
* OsmoBTS (osmo-bts.cfg)
* OpenBSC NITB (open-bsc.cfg)
* LCR (options.conf, interface.conf, routing.conf)
Jako że konfiguracje dla modułów OsmoBTS i OsmoBSC dedykowane są do sieci 1800 MHz, to powinniśmy mieć licencję do nadawania właśnie w tym pasmie. W open-bsc.cfg dokonujemy teraz drobnych zmian:
network
short name (ustawiony na“GSMPi”)
long name (ustawiony na “GSMPi”)
auth policy (zmienione na “closed”)
bts 0
trx 0
arfcn (ustawione na “540”)Dzięki ustawieniu polityki autentykacji na zamkniętą do naszej sieci nie zalogują się żadne telefony, które nie zostaną do niej wpisane. To dobra praktyka, jeśli chodzi o testowanie naszego BTSa, dzięki czemu - nawet pomimo tego, że moc nadajnika jest niewielka - nie będziemy zakłócać naszej sieci, a inne telefonu komórkowe, nie będą próbowały przełączać się do naszej sieci.
W opisywanej sieci mamy tylko jeden BTS w którym konfigurujemy pojedynczy kanał transceivera (pomimo tego, że UmTRX jest dwukanałowy). Kanał 5409, jaki został wybrany do transmisji, odpowiada częstotliwościom 1810,8 MHz na downlink i 1715,8 MHz na uplink.
Dokładne ustawienia - kanał, częstotliwość etc - zależny jest od naszej lokalizacji i posiadanych licencji. Jeśli nasza licencja pozwala na nadawanie tylko na innym kanale, musimy dopasować do niej konfigurację naszego BTSa.
Uruchamianie sieci
Uruchamiamy nasze oprogramowanie skonfigurowane jako "sieć w pudełku", potem uruchamiamy stację bazowa i pozwalamy BTSowi komunikować się z BSC/NITB poprzez A-bis.
Następnie uruchamiamy komponent oprogramowania SDR, co powinniśmy móc zaobserwować w sieci, gdzie komputer zacznie komunikować się z UmTRXem, aby skonfigurować częstotliwości nadawania i odbierania a następnie zacząć przesył sygnału.
Finalnie uruchomić możemy Linux-Call-Router.
Jeśli mamy taką możliwość możemy sprawdzić działanie systemu z pomocą analizatora spektralnego, który powinien pokazać nam poprawną częstotliwość nośną.
Jeśli sprawdzimy obciążenie procesora RPi to widzimy, że transceiver OsmoTRX zajmuje nie więcej niż dwa rdzenie, co nie jest zbyt dziwne, z uwagi na konieczność wielu operacji na sygnałach odbieranych i nadawanych przez SDR.
Testowanie sieci
W pakiecie OpenBSC znajduje się linia komend, która pozwala testować system poprzez telnet. Możemy podłączyć się do modułu poprzez połączenie telnetowe na localhost na port 4242.
W logu widzimy, że telefon próbował się zalogować do sieci, ale nie udało mu się to ponieważ nie miał do tego uprawnień. Jednakże HLR zalogował go i nadał mu numer 1, co pozwala nam na autoryzację tego telefonu, co umożliwi mu zalogowanie się do sieci. Wszystko to widoczne będzie w wyjściu debugowania OpenBSC NITB.
Teraz telefon zaloguje się poprawnie do sieci, po tym jak został przez nas autoryzowany. Na telefonie wyświetli się informacja o tym do jakiej sieci został on podłączony - w naszym przypadku jest to GSMPi.
Można teraz wykonać połączenie z telefonu. Pod numerem 995 odtworzona zostaje muzyczka oczekiwania.
Na tym etapie na wyjściu debugowania z LCR widzimy informacje na temat połączeń i ich przełączania.
Po zalogowaniu, tak jak opisano powyżej, drugiego telefonu do sieci, można wykonać pomiędzy nimi połączenie.
A sprawdzając obciążenie CPU 'maliny' podczas rozmowy telefonicznej widzimy, że Raspberry Pi 2 radzi sobie bez problemu z obliczeniami w takiej sytuacji.
Podsumowanie
Z czterema rdzeniami ARM, zamiast jednego i rozszerzeniem NEON SIMD, komputer Raspberry Pi 2 doskonale realizuje aplikacje SDR - coś czego wersja pierwsza RPi nie mogła zrobić. Pomimo uruchomienia wszystkich zasobów potrzebnych do działania sieci GSM na tym komputerze nadal zostaje pewien zapas mocy obliczeniowej, jaki można wykorzystać do innych celów.
Źródło: http://www.rs-online.com/designspark/electronics/eng/blog/running-a-gsm-network-on-the-raspberry-pi-2/?utm_source=newsletter&utm_medium=email&utm_content=90315&utm_campaign=rpi2_gsm
Fajne? Ranking DIY
