I have a personal interest in GSM technology and its derivatives, mainly in security aspects related to such technologies. Due to this particular interest, I end up having to attend discussion forums, mailing list, and IRC channels related to these technologies.
The problem is that lately, in these vehicles of share information and knowledge, there is a significant increase in messages that indicate the dissatisfaction by part of the community regarding the way in which the folks behind the YateBTS are conducting the project.
Complaints from the community are diverse. There are complaints due to the team of the YateBTS removing previously existing and necessary functionalities, by the attempt to conduct the project through obscurity, lack of support and or resolution of doubts, and even allegations that staff behind the project is only interested in making profits by selling the commercial version.
As I know that not all GSM enthusiasts and researchers know how to program and add your own features to YateBTS project, I decided to write this article in an attempt to provide a secound option of GSM study and research to the community. Now, using the OpenBTS v5.0 (a software-based GSM access point), the already known Nuand bladeRF x40 (a relatively accessible and low cost full duplex SDR) and the Ubuntu 12.04.5 LTS Precise Pangolin (a Debian-based Linux operating system).
One more time, I would like to thank all the pioneering hackers and researchers who started the studies related to previously closed GSM technology.
I would like to particular thank Matthew Hickey from MDSec for the “GreedyBTS – Hacking Adventures in GSM” work, to Nuand Team by the article “Minimalistic build and run test for OpenBTS 5” and to Juan Pablo by the article “Should you need OpenBTS on your bladeRF“. All these works served as the basis for my research and gave me inspiration for writing this article.
So, let’s start the “hands on”!

Ubuntu Operating System
The first thing to do is to download and install the Ubuntu 12.04.5 LTS (Precise Pangolin) image on the system.

NOTE: In my environment implementation I used a 32-bit version of Ubuntu 12.04.5 LTS (Precise Pangolin).
After install the Ubuntu operating system it is time to log in to the system and add the necessary Personal Package Archives (PPAs) repositories.
Adding the Required Repositories
You must add the necessary Personal Package Archives (PPAs) repositories to the environment.
openbts@strcpy.info:~$ sudo su
root@strcpy.info:/home/openbts# add-apt-repository -y ppa:git-core/ppa
root@strcpy.info:/home/openbts# add-apt-repository -y ppa:chris-lea/zeromq
root@strcpy.info:/home/openbts# add-apt-repository -y ppa:chris-lea/libsodium
root@strcpy.info:/home/openbts# add-apt-repository -y ppa:bladerf/bladerf
root@strcpy.info:/home/openbts# add-apt-repository -y ppa:ettusresearch/uhd
Installing Dependencies
After install the PPAs repositories you must install the necessary dependencies to the environment.
root@strcpy.info:/home/openbts# apt-get update
root@strcpy.info:/home/openbts# apt-get -y install git autoconf automake libtool debhelper dpkg-dev sqlite3 libsqlite3-dev g++ libusb-1.0-0-dev
root@strcpy.info:/home/openbts# apt-get -y install libortp-dev libortp8 libosip2-dev libreadline-dev libncurses5-dev libgsm1-dev cdbs libsqlite0-dev
root@strcpy.info:/home/openbts# apt-get -y install unixodbc unixodbc-dev libssl-dev libsrtp0-dev libsqliteodbc uuid-dev libjansson-dev libxml2-dev
root@strcpy.info:/home/openbts# apt-get -y install libboost1.48-all-dev libzmq3-dev libzmq3 python-zmq libsodium13 bladerf libbladerf-dev
root@strcpy.info:/home/openbts# apt-get -y install libuhd-dev libuhd003 uhd-host
root@strcpy.info:/home/openbts# apt-get autoremove
NOTE: The libsrtp0, libsrtp0, and libsrtp0-dev are required, however, they are automatically installed as dependencies of the packages described above.
Plugging the Nuand bladeRF x40
Now you will plug the Nuand bladeRF x40 into one of the USB ports of the computer to ensure that it is being properly detected.
root@strcpy.info:/home/openbts# dmesg
[ 2092.437659] usb 1-1.2: New USB device found, idVendor=1d50, idProduct=6066
[ 2092.437679] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2092.437692] usb 1-1.2: Product: bladeRF
[ 2092.437704] usb 1-1.2: Manufacturer: Nuand
[ 2092.437716] usb 1-1.2: SerialNumber: 4c132c8ba43e0c4d922418a29a1ce207
Nuand bladeRF x40 Firmware
After making sure that the Nuan bladeRF x40 is being properly detected, it is time to download and install the Nuand bladeRF x40 firmware v1.9.1.
root@strcpy.info:/home/openbts# wget -c http://www.nuand.com/fx3/bladeRF_fw_v1.9.1.img
root@strcpy.info:/home/openbts# bladeRF-cli -f bladeRF_fw_v1.9.1.img -v verbose
After install firmware v1.9.1, unplug the Nuand bladeRF x40 from USB port and plug it again to start the device with the new firmware.
Nuand bladeRF x40 FPGA
After start the Nuand bladeRF x40 with the firmware v1.9.1, it is time to download the Nuand bladeRF x40 FPGA v0.1.2 and set the device to have its FPGA loaded automatically.
root@strcpy.info:/home/openbts# wget -c http://www.nuand.com/fpga/v0.1.2/hostedx40.rbf
root@strcpy.info:/home/openbts# bladeRF-cli -L hostedx40.rbf -v verbose
After this procedure, unplug the Nuand bladeRF x40 from USB port and plug it again to start the device with the FPGA v0.1.2 auto loaded.
Now is time to check installed versions of bladeRF-cli, libbladeRF, Nuand bladeRF x40 firmware and Nuand bladeRF x40 FPGA.
root@strcpy.info:/home/openbts# bladeRF-cli -i
bladeRF> version
bladeRF-cli version: 1.4.0-2016.06-1-ppaprecise
libbladeRF version: 1.7.2-2016.06-1-ppaprecise
Firmware version: 1.9.1
FPGA version: 0.1.2
bladeRF>
Exit from bladeRF prompt typing ‘quit’.
OpenBTS and the Transceiver
For the OpenBTS to work with the Nuand bladeRF x40 some changes to the OpenBTS source code are required, as well the build and use of a specific transceiver that can be found in older versions of YateBTS.
But don’t worry! To make the implementation easier as possible, I created a repository in GitHub with the already patched source code of OpenBTS v5.0 (with all its required libraries and tools), as well the patched source code of YateBTS v5.0.1 that contains the correct version of the transceiver that should be builded and used.
root@strcpy.info:/home/openbts# git clone https://github.com/strcpyblog/OpenBTS-Nuand-bladeRF.git
Building and Installing the A5/3 Call Encryption Library
After clone the “OpenBTS-Nuand-bladeRF” repository using Git, you now need to build and install the A5/3 Call Encryption Library (liba53).
root@strcpy.info:/home/openbts# cd OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/liba53
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/liba53# make
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/liba53# make install
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/liba53# ldconfig
Building and Installing the Coredumper Library
OpenBTS uses the Coredumper Shared Library to produce meaningful debugging information if OpenBTS crashes.
So, you now need to build and install the Coredumper Library (libcoredumper).
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/liba53# cd ../libcoredumper
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/libcoredumper# ./build.sh
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/libcoredumper# dpkg -i *.deb
Building and Installing the Transceiver
For OpenBTS to work with the Nuand bladeRF x40 you need to build and install the transceiver.
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/libcoredumper# cd ../../YateBTS-v5.0.1/mbts/Peering
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/libcoredumper# make
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/libcoredumper# cd ../TransceiverRAD1
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/YateBTS-v5.0.1/mbts/TransceiverRAD1# make
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/YateBTS-v5.0.1/mbts/TransceiverRAD1# cp -p transceiver-bladerf ../../../OpenBTS-v5.0/openbts/apps
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/YateBTS-v5.0.1/mbts/TransceiverRAD1# cd ../../../OpenBTS-v5.0/openbts/apps
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/openbts/apps# ln -s transceiver-bladerf transceiver
Building OpenBTS Source Code
With transceiver builded and installed it is time to build the OpenBTS v5.0 source code.
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/openbts/apps# cd ..
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/openbts# ./autogen.sh
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/openbts# ./configure --with-uhd
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/openbts# make
Configuring OpenBTS
With OpenBTS built you now need to configure it to run correctly.
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/openbts# mkdir /etc/OpenBTS
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/openbts# sqlite3 -init apps/OpenBTS.example.sql /etc/OpenBTS/OpenBTS.db ".quit"
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/openbts# cp -p apps/rsyslogd.OpenBTS.conf /etc/rsyslog.d/OpenBTS.conf
Building and Installing the Subscriber Registry and Sipauthserve
It’s important to install Subscriber Registry and Sipauthserver (the SIP authorization server for registration traffic) to be able to launch OpenBTS.
Subscriber Registry controls database of subscriber information and works as HLR (Home Location Registry). You will not be able to have a usable system without it.
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/openbts# cd ../subscriberRegistry
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/subscriberRegistry# ./autogen.sh
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/subscriberRegistry# ./configure
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/subscriberRegistry# make
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/subscriberRegistry# sqlite3 -init apps/sipauthserve.example.sql /etc/OpenBTS/sipauthserve.db ".quit"
Building and Installing Smqueue
Smqueue is the store-and-forward message service packaged with OpenBTS.
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/subscriberRegistry# cd ../smqueue
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/smqueue# autoreconf -i
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/smqueue# ./configure
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/smqueue# make
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/smqueue# sqlite3 -init smqueue/smqueue.example.sql /etc/OpenBTS/smqueue.db ".quit"
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/smqueue# mkdir -p /var/lib/OpenBTS
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/smqueue# touch /var/lib/OpenBTS/smq.cdr
Building and Installing Asterisk
Asterisk is a software implementation of a telephone Private Branch Exchange (PBX) and is the “standard” OpenBTS PBX.
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/smqueue# cd ../asterisk
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/asterisk# ./build.sh
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/asterisk# dpkg -i *.deb
Configuring Asterisk
With Asterisk installed you now need to configure it to run correctly.
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/asterisk# cd ../asterisk-config
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/asterisk-config# mkdir -p /var/lib/asterisk/sqlite3dir
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/asterisk-config# mkdir -p /var/lib/asterisk/sounds/en
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/asterisk-config# cp -p en/*.gsm /var/lib/asterisk/sounds/en
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/asterisk-config# cp -p *.conf /etc/asterisk
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/asterisk-config# cp -p *.ini /etc
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/asterisk-config# chown -R asterisk:asterisk /var/lib/asterisk/sqlite3dir
Starting OpenBTS
After this long process it is time to start OpenBTS.
To do this you will need to execute the following commands (each on its own Terminal window) in the following order:
1 – ./smqueue
openbts@strcpy.info:~$ sudo su
root@strcpy.info:/home/openbts# cd OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/smqueue/smqueue
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/smqueue/smqueue# ./smqueue
ALERT 29938:29938 2016-11-16T06:22:07.0 smqueue.cpp:2798:main: smqueue (re)starting
smqueue logs to syslogd facility LOCAL7, so there's not much to see here
2 – ./sipauthserve
openbts@strcpy.info:~$ sudo su
root@strcpy.info:/home/openbts# cd OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/subscriberRegistry/apps
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/subscriberRegistry/apps# ./sipauthserve
ALERT 29948:29948 2016-11-16T06:22:19.5 sipauthserve.cpp:328:main: ./sipauthserve (re)starting
3 – ./asterisk
openbts@strcpy.info:~$ sudo su
root@strcpy.info:/home/openbts# asterisk -vvv
If Asterisk was set up correctly you should see a bunch of messages and the lines:
...
func_channel.so => (Channel information dialplan functions)
== Registered application 'WaitUntil'
app_waituntil.so => (Wait until specified time)
== Registered custom function 'ENUMRESULT'
== Registered custom function 'ENUMQUERY'
== Registered custom function 'ENUMLOOKUP'
== Registered custom function 'TXTCIDNAME'
func_enum.so => (ENUM related dialplan functions)
Asterisk Ready.
4 – ./OpenBTS
openbts@strcpy.info:~$ sudo su
root@strcpy.info:/home/openbts# cd OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/openbts/apps
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/openbts/apps# ./OpenBTS
If OpenBTS was set up correctly you should see a bunch of messages and the lines:
...
1479288481.102512 3072931584:
Starting the system...
ALERT 30274:30281 2016-11-16T06:28:06.1 OpenBTS.cpp:174:startTransceiver: starting transceiver ./transceiver with 1 ARFCNs
1479288491.590588 3072931584:
system ready
1479288491.590639 3072931584:
use the OpenBTSCLI utility to access CLI
1479288491.590796 3072931584: OpenBTSCLI network socket support for tcp:49300
OpenBTS>
5 – ./OpenBTSCLI
openbts@strcpy.info:~$ sudo su
root@strcpy.info:/home/openbts# cd OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/openbts/apps
root@strcpy.info:/home/openbts/OpenBTS-Nuand-bladeRF/OpenBTS-v5.0/openbts/apps# ./OpenBTSCLI
OpenBTS Command Line Interface (CLI) utility
Copyright 2012, 2013, 2014 Range Networks, Inc.
Licensed under GPLv2.
Includes libreadline, GPLv2.
Connecting to 127.0.0.1:49300...
Remote Interface Ready.
Type:
"help" to see commands,
"version" for version information,
"notices" for licensing information,
"quit" to exit console interface.
OpenBTS>
After executing all the commands described above you will have something like this:
Configuring the GSM BTS Operability
Now you can start to configure the BTS using the OpenBTS Command Line Interface (CLI) utility.
For the GSM BTS operability you need to set the following values:
OpenBTS> config GSM.Radio.Band 900
OpenBTS> config GSM.Radio.C0 51
OpenBTS> config GSM.Identity.MCC 001
OpenBTS> config GSM.Identity.MNC 01
OpenBTS> config GSM.Radio.PowerManager.MaxAttenDB 35
OpenBTS> config GSM.Radio.PowerManager.MinAttenDB=35
Allowing Subscribers
You need to allow subscribers phones to connect to the GSM BTS.
OpenBTS> config Control.LUR.OpenRegistration .*
NOTE: Take care with .* regular expression.
Tapping
You can activate GSM and GPRS Tapping. With these options enabled you can capture GSM (signaling) and GPRS (signaling and traffic) in L1/L2 interfaces via GSMTAP.
OpenBTS> config Control.GSMTAP.GSM 1
OpenBTS> config Control.GSMTAP.GPRS 1
At this point the minimal GSM configuration needed is done and you must have a operational GSM BTS.
Now you need to configure the GPRS seetings to provide data connection (Internet).
Configuring the GPRS BTS Operability
First we need to configure the NAT with IPTABLES.
openbts@strcpy.info:~$ sudo su
root@strcpy.info:/home/openbts# sysctl -w net.ipv4.ip_forward=1
root@strcpy.info:/home/openbts# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
NOTE: Replace the eth0 network interface with the environment network interface connected to the Internet.
Now, for the GPRS operability you need to set the following values:
OpenBTS> config GPRS.Enable 1
OpenBTS> config GGSN.Firewall.Enable 0
OpenBTS> config GGSN.MS.IP.Base 192.168.1.20
OpenBTS> config GGSN.MS.IP.MaxCount 5
Connecting Phones
You will manually connect the phones to the GSM BTS selecting the “Test PLMN 1-1” Network ID in the network list.
In the example shown here, the Network ID is “Test PLMN 1-1” due to the values “GSM.Identity.MCC 001” and “GSM.Identity.MNC 01”, previously configured.

NOTE: Valid MCC and MNC values can be found here.
After the phone are successfully authenticated to the GSM network , a welcome message containing the phone IMSI will be received via SMS.

A phone connected to “Test PLMN 1-1” GSM BTS and using the data connection through GPRS (Internet).

Final Notes
I hope after read this article you can successfully run the OpenBTS with the Nuand bladeRF x40.
If you have any questions feel free to contact me.
And remember… Share the knowledge and keep on hacking!
References
- http://openbts.org/w/index.php?title=BuildInstallRun
- http://blog.mdsec.co.uk/2014/11/44con-2014-greedybts-hacking-adventures.html
- https://github.com/Nuand/bladeRF/wiki/Minimalistic-build-and-run-test-for-OpenBTS-5
- https://imjuanpablo.wordpress.com/2015/02/14/should-you-need-openbts-on-your-bladerf
- http://linux.net.pk/blog/poor-mans-gsm-bts-nuands-bladerf-openbts-5-setup-instructions

Hi,
Thanks for the writeup. Yate decided to change the design, so there is no transciver for bladerf as of now (it is built-in, check this : https://github.com/Nuand/bladeRF/wiki/Setting-up-Yate-and-YateBTS-with-the-bladeRF ) Did you happen to build it succesfully? I tried it and all went futile, yatebts is working fine, but phone is not showing the test network.
Any help please??
LikeLike
Try to reproduce all the steps described in the article and all will works fine. If you still have doubts, please contact me by mail. Regards.
LikeLike
Hi.
Everything is working fine but the phone does not show the network. What`s your e-mail address?.
LikeLike
Hi.
You can reach my email navigating at “about” section of the site.
Regards.
LikeLike
Hello, Nice article, however I am having problems building the transceiver. when I “make” it is reporting errors. My setup is exactly like your setup. I saved the output that was generated when trying to make the transceiver. I was hoping you could point me in the right direction? Thanks so much!
root@openbts-ThinkPad-X201:/home/openbts/OpenBTS-Nuand-bladeRF/YateBTS-v5.0.1/mbts/TransceiverRAD1# make
g++ -Wall -I../.. -I../.. -I. -I./../CommonLibs -I./../A53 -I./../Connection -I./../GSM -I./../Globals -I./../sqlite3 -c runTransceiver.cpp
g++ -Wall -I../.. -I../.. -I. -I./../CommonLibs -I./../A53 -I./../Connection -I./../GSM -I./../Globals -I./../sqlite3 -c DummyLoad.cpp
g++ -Wall -I../.. -I../.. -I. -I./../CommonLibs -I./../A53 -I./../Connection -I./../GSM -I./../Globals -I./../sqlite3 -c fusb.cpp
./fusb.h: In constructor ‘fusb_devhandle::fusb_devhandle(libusb_device_handle*, libusb_context*)’:
./fusb.h:61:26: warning: ‘fusb_devhandle::d_udh’ will be initialized after [-Wreorder]
./fusb.h:41:34: warning: ‘libusb_context* fusb_devhandle::d_ctx’ [-Wreorder]
fusb.cpp:113:1: warning: when initialized here [-Wreorder]
fusb.cpp: In member function ‘bool fusb_devhandle::_reap(bool)’:
fusb.cpp:238:39: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
./fusb.h: In constructor ‘fusb_ephandle::fusb_ephandle(fusb_devhandle*, int, bool, int, int)’:
./fusb.h:103:11: warning: ‘fusb_ephandle::d_started’ will be initialized after [-Wreorder]
./fusb.h:81:27: warning: ‘fusb_devhandle* fusb_ephandle::d_devhandle’ [-Wreorder]
fusb.cpp:249:1: warning: when initialized here [-Wreorder]
g++ -Wall -I../.. -I../.. -I. -I./../CommonLibs -I./../A53 -I./../Connection -I./../GSM -I./../Globals -I./../sqlite3 -c radioInterface.cpp
radioInterface.cpp: In member function ‘void RadioInterface::pushBuffer()’:
radioInterface.cpp:164:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
radioInterface.cpp:184:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
g++ -Wall -I../.. -I../.. -I. -I./../CommonLibs -I./../A53 -I./../Connection -I./../GSM -I./../Globals -I./../sqlite3 -c rnrad1Core.cpp
g++ -Wall -I../.. -I../.. -I. -I./../CommonLibs -I./../A53 -I./../Connection -I./../GSM -I./../Globals -I./../sqlite3 -c rnrad1Rx.cpp
rnrad1Rx.cpp: In destructor ‘rnrad1Rx::~rnrad1Rx()’:
rnrad1Rx.cpp:79:8: warning: unused variable ‘result’ [-Wunused-variable]
rnrad1Rx.cpp: In member function ‘bool rnrad1Rx::setPga(int, double)’:
rnrad1Rx.cpp:223:25: warning: suggest parentheses around comparison in operand of ‘&’ [-Wparentheses]
rnrad1Rx.cpp: In member function ‘double rnrad1Rx::pga(int) const’:
rnrad1Rx.cpp:237:25: warning: suggest parentheses around comparison in operand of ‘&’ [-Wparentheses]
g++ -Wall -I../.. -I../.. -I. -I./../CommonLibs -I./../A53 -I./../Connection -I./../GSM -I./../Globals -I./../sqlite3 -c rnrad1Tx.cpp
g++ -Wall -I../.. -I../.. -I. -I./../CommonLibs -I./../A53 -I./../Connection -I./../GSM -I./../Globals -I./../sqlite3 -c sigProcLib.cpp
sigProcLib.cpp: In function ‘signalVector* modulateBurst(const BitVector&, const signalVector&, int, int)’:
sigProcLib.cpp:614:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
sigProcLib.cpp: In function ‘bool analyzeTrafficBurst(signalVector&, unsigned int, float, int, complex*, float*, unsigned int, bool, signalVector**, float*)’:
sigProcLib.cpp:1059:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
sigProcLib.cpp:1061:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
g++ -Wall -I../.. -I../.. -I. -I./../CommonLibs -I./../A53 -I./../Connection -I./../GSM -I./../Globals -I./../sqlite3 -c Transceiver.cpp
Transceiver.cpp: In constructor ‘Transceiver::Transceiver(int, const char*, int, GSM::Time, RadioInterface*, unsigned int, unsigned int, bool)’:
Transceiver.cpp:46:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
Transceiver.cpp:82:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
Transceiver.cpp:96:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
Transceiver.cpp:112:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
Transceiver.cpp: In member function ‘void Transceiver::pushRadioVector(GSM::Time&)’:
Transceiver.cpp:286:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
Transceiver.cpp:295:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
Transceiver.cpp:318:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
Transceiver.cpp: In member function ‘void Transceiver::pullRadioVector()’:
Transceiver.cpp:451:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
Transceiver.cpp:449:7: warning: unused variable ‘timeslot’ [-Wunused-variable]
Transceiver.cpp: In member function ‘void Transceiver::start()’:
Transceiver.cpp:471:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
Transceiver.cpp: In member function ‘void Transceiver::driveControl(unsigned int)’:
Transceiver.cpp:543:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
ar rcs libtransceiver.a DummyLoad.o fusb.o radioInterface.o rnrad1Core.o rnrad1Rx.o rnrad1Tx.o sigProcLib.o Transceiver.o
g++ -Wall -I../.. -I../.. -I. -I./../CommonLibs -I./../A53 -I./../Connection -I./../GSM -I./../Globals -I./../sqlite3 -o transceiver-rad1 RAD1Device.cpp runTransceiver.o libtransceiver.a -L../GSM -lGSM -L../Connection -lConnection -L../Peering -lPeering -L../CommonLibs -lCommonLibs -L../Globals -lGlobals -L../sqlite3 -lsqlite3 -lusb-1.0
In file included from RAD1Device.h:39:0,
from RAD1Device.cpp:37:
bytesex.h:16:2: warning: #warning Using non-portable code (likely wrong other than ILP32). [-Wcpp]
/usr/bin/ld: skipping incompatible ../GSM/libGSM.a when searching for -lGSM
/usr/bin/ld: cannot find -lGSM
/usr/bin/ld: skipping incompatible ../Connection/libConnection.a when searching for -lConnection
/usr/bin/ld: cannot find -lConnection
/usr/bin/ld: skipping incompatible ../CommonLibs/libCommonLibs.a when searching for -lCommonLibs
/usr/bin/ld: cannot find -lCommonLibs
/usr/bin/ld: skipping incompatible ../Globals/libGlobals.a when searching for -lGlobals
/usr/bin/ld: cannot find -lGlobals
/usr/bin/ld: skipping incompatible ../sqlite3/libsqlite3.a when searching for -lsqlite3
collect2: ld returned 1 exit status
make: *** [transceiver-rad1] Error 1
LikeLike
Hi Charon. Please contact me by mail and maybe I can help you.
Regards.
LikeLike
Hi, I have the same problem describe above, do you know what needs to be fixed ?
LikeLike
What problem?
LikeLike
Will this work on Ubuntu 14.04 – or was 12.04 chosen specifically for functionality?
LikeLike
In the article was used the Ubuntu 12.04.5 LTS (Precise Pangolin). But I think you can install the environment in other versions of Ubuntu without much trouble.
LikeLike
Thanks!
LikeLike
You are welcome.
LikeLike
Hi! Thank you for this guide!
What kind of harware do i need for it (7 voice trunks simultaneously, no GPRS)?
Does it work with full payload, for example, on RPI3 with USB2.0?
LikeLike
Hi Alex.
If you want only to test and learn about GSM, the Nuand bladeRF x40 and a machine with USB 3.0 support is sufficient.
About Rasberry Pi, you’ll probably have problems to compile and run OpenBTS on that particular hardware.
Regards.
LikeLike
Thank you for the useful post
i have a problem with asterisk, when i run it for the first time, it works fine, but when i exit and run it again it gives me this error:
Privilege escalation protection disabled!
See https://wiki.asterisk.org/wiki/x/1gKfAQ for more details.
Asterisk already running on /var/run/asterisk/asterisk.ctl. Use ‘asterisk -r’ to connect.
LikeLike
Hi.
As I never had this problem, I suggest that you try to do this question in Asterisk’s forum.
Regards.
LikeLike
When I try to build the transceiver I get this error.
g++ -Wall -I../.. -I../.. -I. -I./../CommonLibs -I./../A53 -I./../Connection -I./../GSM -I./../Globals -I./../sqlite3 -o transceiver-rad1 RAD1Device.cpp runTransceiver.o libtransceiver.a -L../GSM -lGSM -L../Connection -lConnection -L../Peering -lPeering -L../CommonLibs -lCommonLibs -L../Globals -lGlobals -L../sqlite3 -lsqlite3 -lpthread -lusb-1.0
In file included from RAD1Device.h:39:0,
from RAD1Device.cpp:37:
bytesex.h:16:2: warning: #warning Using non-portable code (likely wrong other than ILP32). [-Wcpp]
#warning Using non-portable code (likely wrong other than ILP32).
^
/usr/bin/ld: skipping incompatible ../GSM/libGSM.a when searching for -lGSM
/usr/bin/ld: cannot find -lGSM
/usr/bin/ld: skipping incompatible ../Connection/libConnection.a when searching for -lConnection
/usr/bin/ld: cannot find -lConnection
/usr/bin/ld: skipping incompatible ../CommonLibs/libCommonLibs.a when searching for -lCommonLibs
/usr/bin/ld: cannot find -lCommonLibs
/usr/bin/ld: skipping incompatible ../Globals/libGlobals.a when searching for -lGlobals
/usr/bin/ld: cannot find -lGlobals
/usr/bin/ld: skipping incompatible ../sqlite3/libsqlite3.a when searching for -lsqlite3
collect2: error: ld returned 1 exit status
Makefile:100: recipe for target ‘transceiver-rad1’ failed
make: *** [transceiver-rad1] Error 1
LikeLike
I suspect you are using a 64-bit operating system. If you do all steps described in the article, everything will work.
Regards.
LikeLike
hello
i wanna thank u for ur great effort to gime are those steps..
besides when i run openbts i’ve got this error
Assertion `mDB’ failed
the same error in smqueue and sipauthserve
for asterisk it seems to work correctly (Connected to Asterisk 11.7.0.4 currently running on…)
PS: i had a few prob in this 2 sections
building +installing the tranceiver
configure openbts
please i need help
LikeLike
Hi.
If you follow all the steps in the article exactly as described, everything will works fine.
Any doubt please contact me by mail.
Regards.
LikeLike
dear friend
when i build OpenBTS
sqlite3 -init apps/OpenBTS.example.sql…
cp -p apps/rsyslogd.OpenBTS.conf /etc/rsyslog.d/OpenBTS.conf
it says NO such file or directory
the OpenBTS floder is empty i don’t know why
i’ll try again and i’ll keep u in, touch
regards
LikeLike
hi
thks for sharing this with us
when i treid to run openbts i’ve git this prob
openbts: Configuration.cpp:660: const ConfigurationRecord& ConfigurationTable::lookup(const string&): Assertion `mDB’ failed.
the same prob with sipauthserve and smqueue
for asterisk it seems to be fine (Connected to Asterisk 11.7.0.4 currently running on …)
any help please
ps: i think that i missed up with the section “configure openbts” ,because when i created the folder OpenBTS it was empty!!
LikeLike
You are welcome.
LikeLike
i rebuild theproject with yatebts
it works again (calls+sms) between 2 handsets
but still not able to call david
im not sure if it will work or not if i disconnect yate or the bladrf
questions:
where can i find the sms that i send or the call that i have in my database (sqlite)??
thks 4 ur help
LikeLike
Hi.
I suggest you take a look at the YateBTS Wiki and Yate forum.
YateBTS Wiki: http://wiki.yatebts.com/index.php/Main_Page
Yate Forum: http://forum.yate.ro/
Regards.
LikeLike
also
when i’m trying to install the TransceiverRAD1
error msg:
from RAD1Device.cpp:37:
bytesex.h:16:2: warning: #warning Using non-portable code (likely wrong other than ILP32). [-Wcpp]
#warning Using non-portable code (likely wrong other than ILP32).
^
/usr/bin/ld: ../CommonLibs/libCommonLibs.a(Threads.o): undefined reference to symbol ‘pthread_create@@GLIBC_2.1’
//lib/i386-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
LikeLike
Check if your operating system is 32 or 64 bits. I suspect you are using a 64-bit operating system.
If you still have doubs, please contact me by mail.
Regards.
LikeLike
my skype id is wajdi.bhh
can we set uo a call via skype?
LikeLike
Just mail, sorry.
LikeLiked by 1 person
okay than don’t piss off cause i’ll keep sending u mails until it works. haha
LikeLike
Is there any way to bypass the manual connection part? Can you force devices to connect or spoof? None of the phones I have allow me to manually select the network operator on either Android or iOS.
LikeLike
“Is there any way to bypass the manual connection part? Can you force devices to connect or spoof?”
Yes.
“None of the phones I have allow me to manually select the network operator on either Android or iOS”
Try to manual search for operators around and after phone show the results, just select a operator that you want to connect.
Any doubt please mail me.
LikeLike
Starting the system…
ALERT 11047:11054 2017-09-13T03:30:14.1 OpenBTS.cpp:174:startTransceiver: starting transceiver ./transceiver with 1 ARFCNs
EMERG 11047:11057 2017-09-13T03:30:14.1 OpenBTS.cpp:180:startTransceiver: cannot find ./transceiver
EMERG 11047:11054 2017-09-13T03:30:14.1 OpenBTS.cpp:185:startTransceiver: Transceiver quit with status 256. Exiting.
Hello, please help to solve the error !!
Where and how to fix ….
It is desirable to know more and then there is no experience at all
Thank you
LikeLike
“cannot find ./transceiver”
Please review the article and try to execute all the same steps described.
If you continue to experience problems, please contact me by email.
Regards.
LikeLike