在ARM 7A平台上编译OpenBTS

来源:互联网 发布:网络基础知识视频 编辑:程序博客网 时间:2024/06/05 21:54

OpenBTS是开源的2G/2.5G无线通信系统的SDR实现的项目,可以用于实现一个建议的GSM基站,在应急通信、徒步等方面可能有应用前景。
OpenBTS的官网上要求OpenBTS运行的基础操作系统时UbuntuServer12.04,32bit版本。在前面的《OpenBTS编译指南》的博客中,已经描述了如何在x64 Ubunt14.04的系统下编译OpenBTS。
随着ARM体系架构的普及,越来越多的嵌入式设备使用ARM体系架构的CPU。所以,我大概花了4天的时间完成了OpenBTS在ARM 7A体系架构下的编译。遇到的一些问题和相应的解决方法总结如下:

1.操作系统

在ARM 7A下安装了Ubuntu 14.04的操作系统,在此基础上完成编译工作。

2.需要安装的库/软件

  • uhd驱动库

用于驱动USRP射频前端。可以按照官网的方法去安装。http://files.ettus.com/manual/page_install.html
当然,后面再这个库上回遇到一些问题,在本博客稍后会提出。

  • boost库

在openbts中在编译的时候会有依赖关系的需求。使用

apt-get install libboost-dev

来安装。

3.隔离coredumper

在ARM 7A 体系架构下编译openbts遇到的最大的问题是coredumper。在openbts中,使用google-coredumper的库来执行一些调试相关的工作。但是,这个库在2008年的时候就停止维护了,通过查看相关源码,这个库只能支持x86, x64,ARM 3等体系架构,而ARM 7A是不支持的。如果想使用这个库,必须对google-coredumper进行相关的移植工作。这个工作的性价比并不高。

// in ./coredumper-1.2.1/src/linux_syscall_support.h/* We currently only support x86-32, x86-64, ARM, MIPS, and PPC on Linux. * Porting to other related platforms should not be difficult. */#if (defined(__i386__) || defined(__x86_64__) || defined(__ARM_ARCH_3__) ||   \     defined(__mips__) || defined(__PPC__)) && defined(__linux)

可以使用

gcc -E -dM - </dev/null

来查看系统预定义的宏。

所以,在这里我们想办法来将coredumper从openbts的代码中剔除出去。需要经过一下几个步骤的操作:

3.1 将OpenBTS中调用coredumper的代码注释掉。

很幸运,这部分代码不多。通过查找openbts的源码,可以发现在以下几个地方会有coredumper的调用:
~/dev/CommonLibs/UnixSignal.cpp
~/dev/openbts/CommonLibs/UnixSignal.cpp
~/dev/smqueue/CommonLibs/UnixSignal.cpp
~/dev/smqueue/SR/CommonLibs/UnixSignal.cpp
~/dev/subscriberRegistry/CommonLibs/UnixSignal.cpp
这几个文件都是一样的,需要注释的是:

...#include <google/coredumper.h>...WriteCoreDump(buf);...

这两行

3.2修改~/dev/build.sh,把coredumper相关的编译命令去掉。

把有关coredumper的那一段注释掉。

#we cannot build libcoredumper because we donnot have a code in ARM7 ARCH.#TODO: write the coredumper code that can be build in ARM7#if [ "$COMPONENT" == "all" ] || [ "$COMPONENT" == "libcoredumper" ]; then#   echo "# libcoredumper - building Debian package and installing as dependency"#   sayAndDo cd libcoredumper#   sayAndDo ./build.sh#   sayAndDo mv libcoredumper* ../$BUILDNAME#   sayAndDo cd ..#   sayAndDo sudo dpkg -i $BUILDNAME/libcoredumper*.deb#   echo "# - done"#   echo#fi

3.3 修改与coredumper相关的链接命令

修改与coredumper相关的链接指令。这些指令存在于以下几个文件中:
~dev/smqueue/CommonLibs/Makefile.am
~dev/smqueue/SR/CommonLibs/Makefile.am
~dev/subscriberRegistry/CommonLibs/Makefile.am
~dev/CommonLibs/Makefile.am
~dev/openbts/CommonLibs/Makefile.am

修改如下:

...InterthreadTest_SOURCES = InterthreadTest.cppInterthreadTest_LDADD = libcommon.la $(SQLITE_LA)#InterthreadTest_LDFLAGS = -lpthread -lcoredumper SocketsTest_SOURCES = SocketsTest.cppSocketsTest_LDADD = libcommon.la $(SQLITE_LA)#SocketsTest_LDFLAGS = -lpthread -lcoredumper TimevalTest_SOURCES = TimevalTest.cppTimevalTest_LDADD = libcommon.laVectorTest_SOURCES = VectorTest.cppVectorTest_LDADD = libcommon.la $(SQLITE_LA)RegexpTest_SOURCES = RegexpTest.cppRegexpTest_LDADD = libcommon.laConfigurationTest_SOURCES = ConfigurationTest.cppConfigurationTest_LDADD = libcommon.la  $(SQLITE_LA)SelfDetectTest_SOURCES = SelfDetectTest.cpp#SelfDetectTest_LDADD = libcommon.la $(SQLITE_LA) -lcoredumper SelfDetectTest_LDADD = libcommon.la $(SQLITE_LA)UnixSignalTest_SOURCES = UnixSignalTest.cpp#UnixSignalTest_LDADD = libcommon.la $(SQLITE_LA) -lcoredumper UnixSignalTest_LDADD = libcommon.la $(SQLITE_LA)...

4.编译过程中还可能遇到的问题

4.1 uhd驱动版本问题

安装uhd的驱动后还会出现问题,编译时提示rx_stream类没有issue_stream_cmd成员,tx_stream类没有recv_async_msg成员。此时去确认一下/usr/include目录下的uhd库的源代码,发现stream.hpp文件中缺失了一些成员的定义。这也许是版本的问题。
解决方法:在x86平台上安装uhd,然后将/usr/include/uhd目录下的stream.hpp文件拷贝出来,覆盖ARM7平台的相同文件。

4.2 dependence error

编译时出现错误:
dependence error:libuuid1 (= 2.20.1-5.1ubuntu20) but 2.20.1-5.1ubuntu20.1 is to be installed
解决方法:https://gns3.com/discussions/cannot-compile-dynamips-to-gns3-
使用这样的指令:

sudo apt-get install libuuid1=2.20.1-5.1ubuntu20 

就可以了。

4.3 libzmq5 包问题

在ARM7A平台的Ubuntu14.04系统中没有 libzmq5这个包。使用 libzmq3代替。
方法:修改~/dev/build.sh

# zmqinstallIfMissing libzmq3-dev#libzmq5 cannot be installed in 14.04#installIfMissing libzmq5installIfMissing libzmq3installIfMissing python-zmq

现在OpenBTS可以在ARM7A的Ubuntu14.04下成功编译通过了。后续将继续进项相关的测试。

0 0
原创粉丝点击