Install a virtual GSM relay (BTS) on Android
With minimal work it’s possible to get gnuradio andOpenBTS working on the ARMEL architecture used on the Droid, allowing my Droid to act as a base station to which handsets can connect; the Droid then connects calls using an on-board Asterisk server and routes them to the PSTN via SIP over Verizon’s 3G network.
The quick version: I can provide voice and SMS connectivity to local GSM handsets using nothing but a Droid and a USRP.
A quick log of what you’ll need to replicate this. This is from memory so I may have missed something; fortunately there’s an easier way that I’ll come back to.
– Root the Droid and install Sholes Mod.
– Mount your SD card in a desktop machine and create an EXT3 partition. I shrank the FAT32 partition but left it otherwise intact, this is probably a good idea if you want to still take pictures.
– debootstrap into the new ext3 partition, bearing in mind the new architecture (use the two-stage debootstrap with –foreign)
– Put the SD card back in the Droid, and mount the EXT3 partition (you’ll probably need to manually insmod the ext3 and jbd modules)
– “mount -o bind” all of the system filesystems into the mounted EXT3 environment (including /dev, /dev/pts, and /sys)
– Mount usbfs in the mounted filesystem at /proc/bus/usb (if you don’t it won’t find the USRP)
– chroot into the new Debian environment, and debootstrap –second-stage
– Go get dinner – it’ll be a while
– Install all the usual dependancies for building gnuradio (if you can’t figure this out on your own you’re in the wrong place!)
– Configure gnuradio with ./configure –disable-all-components –enable-usrp –enable-omnithread –enable-mblock –enable-pmt
– Patch for 52MHz clock (I highly doubt that Droid can handle the stock 64MHz clock)
– Patch the gnuradio makefiles for ARMEL
– Build gnuradio (again, it’ll be a while)
– Install libosip2-3.3.0 from source (the Debian package is out of date)
– Download and ./configure the openbts source, but don’t build it
– Apply the same makefile patch in Transceiver/ and Transceiver52M/ (or you’ll get the same build error)
– Build OpenBTS
– Install Asterisk (from the debian packages is fine)
– Configure as you wish, then connect the USRP (via a powered hub) in Host mode and have fun!
The easier way that I mentioned before would be for me to just zip up an image of my SD card and slap it on a fileserver somewhere public – I’ll also include some scripts to mount it and start everything up correctly. Give me a few days to clean it up and watch on Twitter for the link, it should be as simple as dropping 2 files on the SD card and then running one of them as root.
I’ll also post video of the Droid connecting a call (that sounds far less cool than it should) at some point, I’m also considering running a workshop on all of this if there’s any interest…?
credit: Chris Paget
November 19th, 2010 at 8:20 am
This looks awesome
It really makes me want to go out and get a droid right nwo
Any way you know if this could work on a nexus one?
December 1st, 2010 at 3:05 pm
OS dependent not plateform, tested on Nexus one.