ubuntu 16.04编译安装gqrx-v2.11.2

$ sudo apt-get install qt5-qmake

$ sudo apt-get install qtbase5-dev

$ sudo apt-get install pkg-config

$ sudo apt-get install libqt5svg5-dev

$ export QT_SELECT=qt5

$ cd ~

$ git clone https://github.com/csete/gqrx.git

$ cd gqrx

$ git checkout v2.11.2

$ mkdir build

$ cd build

$ qmake ../gqrx.pro

$ make

如果代码下载困难,可以从本站下载一份拷贝。 gqrx

参考链接


ubuntu 16.04编译安装HackRF One软件及固件hackrf-v2018.01.1

ubuntu 16.04编译安装HackRF One软件及固件hackrf-v2018.01.1

$ cd ~

$ git clone https://github.com/mossmann/hackrf.git

$ cd hackrf

$ git checkout v2018.01.1 

#编译工具
$ cd host

$ mkdir build

$ cd build

$ cmake .. -DINSTALL_UDEV_RULES=ON

$ make

$ sudo make install

#编译固件
$ sudo apt-get install gcc-arm-none-eabi

$ cd ~

$ cd hackrf

$ git submodule init

$ cd firmware

$ cd libopencm3

$ make 

$ cd ..

$ mkdir build 

$ cd build

$ cmake .. -DBOARD=HACKRF_ONE

$ make


#升级固件
$ hackrf_spiflash -w ./hackrf_usb/hackrf_usb.bin

如果代码下载困难,可以从这里下载一份代码拷贝 hackrf

参考链接


ubuntu 16.04(x64)编译LimeSDR v1.4的USB固件

最近在捣鼓LimeSDR,如果只使用USB供电的话,默认USB固件只向系统声明了400MA的电流。

明显当设备全功率运行的话,是不够设备使用的,全功率大约是3W以上的样子,因此,我们需要调整USB固件,向系统多申请些电流。

USB 3.0可以提供900MA的电流。

下面是如何编译LimeSDRUSB固件:

$ cd ~

$ wget https://www.mobibrw.com/wp-content/uploads/2018/02/FX3_SDK_Linux_v1.3.3.tar.gz

$ tar -zxvf FX3_SDK_Linux_v1.3.3.tar.gz

$ tar -zxvf ARM_GCC.tar.gz

$ tar -zxvf fx3_firmware_linux.tar.gz

$ tar -zxvf eclipse_x64.tar.gz

$ export PATH=~/arm-2013.11/bin:$PATH

$ export FX3_INSTALL_PATH=~/cyfx3sdk

$ export ARMGCC_INSTALL_PATH=~/arm-2013.11

$ export ARMGCC_VERSION=4.8.1

#编译镜像打包工具
$ cd ~/cyfx3sdk/util/elf2img

$ gcc elf2img.c -o elf2img -Wall

$ cd ~

$ git clone https://github.com/myriadrf/LimeSDR-USB_FX3.git

$ ./eclipse/ezUsbSuite

继续阅读ubuntu 16.04(x64)编译LimeSDR v1.4的USB固件

MCC 移动设备国家代码 (Mobile country code)

概述

移动设备国家代码 ( Mobile country code / MCC ) 定义于国际电信联盟 E.212 ,其目的为在电信网络中辨识用移动设备基地,特别是在全球移动通信系统和通用移动通信系统中。移动设备国家代码通常和移动设备网络代码结合使用(MCC/MNC)以用来辨试网络营运商。

移动设备国家代码是国际移动用户识别码的一部分。此识别码是用来辨认特定的用户,通常存储于可移除的SIM卡。在 GSM/UMTS 无线调制解调器中可用 AT 指令 AT+COPS 来得到目前的国家代码。

继续阅读MCC 移动设备国家代码 (Mobile country code)

ubuntu 16.04系统LimeSDR V1.4使用OpenAirInterface搭建LTE实验环境

操作系统调整

参考 ubuntu 16.04低延迟内核 安装低延时内核CPU调整为最大性能模式,并且不允许降低频率。

$ sudo apt-get install cpufrequtils

$ sudo touch /etc/default/cpufrequtils

$ sudo sed -i "/GOVERNOR.*/d" /etc/default/cpufrequtils

$ test -s /etc/default/cpufrequtils && sudo sed -i '$a\GOVERNOR=\"performance\"' /etc/default/cpufrequtils || echo "GOVERNOR=\"performance\"" | sudo tee /etc/default/cpufrequtils

$ sudo update-rc.d ondemand disable

$ sudo reboot

安装依赖包

$ sudo apt-get install cmake g++ libpython-dev python-numpy swig git libsqlite3-dev libi2c-dev libusb-1.0-0-dev libwxgtk3.0-dev freeglut3-dev

编译安装SoapySDR

$ cd ~

$ git clone https://github.com/pothosware/SoapySDR.git

$ cd SoapySDR

$ git pull origin master

$ mkdir build && cd build

$ cmake ..

$ make -j4

$ sudo make install

$ sudo ldconfig

编译安装LimeSDR

$ cd ~ 

$ git clone https://github.com/myriadrf/LimeSuite.git

$ cd LimeSuite

#目前的测试发现,超过这个版本的代码无法正常的发出信号,
#也就是手机搜索不到我们创建好的基站,
#反复研究,确认是“Commit 9883bb97 by ignasj, 2017-06-30 下午04:20” 
#对于“lms7_device.cpp”的修改导致的问题,原因为天线发射增益设置不正确
#解决方法参考 https://www.mobibrw.com/?p=11957
#截止目前2018.09.03版本的代码貌似已经修正这个问题了,应该已经可以正常使用了。
#测试来说,还是使用这个版本吧

$ git checkout v17.06.0

# 不可删除build目录,清理build目录后要还原被误删除的文件,
# 原因在于build目录下存在mcu程序,默认应用启动后从这个目录提取mcu程序刷新到设备

$ mkdir build ; cd build

# cmake -DCMAKE_BUILD_TYPE=Debug ..
$ cmake ..

$ make -j4

$ sudo make install

$ sudo ldconfig

$ cd ../udev-rules/

$ sudo bash install.sh

# Download board firmware
$ sudo LimeUtil --update

#固件下载地址 http://downloads.myriadrf.org/project/limesuite/
#如果上述的固件无法下载,可以从此处下载一份拷贝
#https://www.mobibrw.com/wp-content/uploads/2018/03/17.06-LimeUtils-fpga-fw.zip

编译安装USRP驱动

$ sudo apt-get install libboost-all-dev libusb-1.0-0-dev python-mako doxygen python-docutils python-requests cmake build-essential

$ cd ~

$ git clone git://github.com/EttusResearch/uhd.git

$ cd uhd; mkdir host/build; cd host/build

$ cmake -DCMAKE_INSTALL_PREFIX=/usr ..

$ make -j4

$ sudo make install

$ sudo ldconfig

#下面脚本的作用是到http://files.ettus.com/binaries/images/下载最新的镜像文件,并解压缩到 /usr/share/uhd/images目录下

$ sudo /usr/lib/uhd/utils/uhd_images_downloader.py

#如果上面的镜像下载失败,可以尝试执行如下命令从本站下载
# cd ~ ; wget https://www.mobibrw.com/wp-content/uploads/2018/03/uhd-images_003.010.003.000-release.zip
# sudo unzip uhd-images_003.010.003.000-release.zip -d /user

下载并解压缩需要的补丁,点击此处下载

$ cd ~

# 原始补丁地址 http://open-cells.com/d5138782a8739209ec5760865b1e53b0/opencells-mods-20170710.tgz

$ wget https://www.mobibrw.com/wp-content/uploads/2018/03/opencells-mods-20170710.tgz

$ tar xf opencells-mods-20170710.tgz

下载并编译eNB

$ cd ~

$ git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git

$ cd openairinterface5g

$ git checkout develop

#目前的补丁程序只在这个版本上是有效的,后续版本会补丁失败
$ git checkout 08b8b3142df16831396a5283a015564ff56bf91c -b ubuntu16

#应用补丁
$ git apply ../opencells-mods/eNB.patch

#对于国内的用户来说,国外的几个代码地址需要修改一下,否则会出现无法下载或者下载非常慢的情况
$ sed -i "s/git clone https:\/\/gist.github.com\/2190472.git \/opt\/ssh/wget https:\/\/www.mobibrw.com\/wp-content\/uploads\/2018\/03\/ssh.tar.gz \&\& sudo tar -zxvf ssh.tar.gz -C \/opt/g" cmake_targets/tools/build_helper

$ sed -i "s/git clone https:\/\/gitlab.eurecom.fr\/oai\/asn1c.git \/tmp\/asn1c/wget https:\/\/www.mobibrw.com\/wp-content\/uploads\/2018\/03\/asn1c.tar.gz \&\& tar -zxvf asn1c.tar.gz -C \/tmp/g" cmake_targets/tools/build_helper

$ sed -i "s/https:\/\/pypi.python.org\/packages\/18\/fa\/dd13d4910aea339c0bb87d2b3838d8fd923c11869b1f6e741dbd0ff3bc00\/netifaces-0.10.4.tar.gz/https:\/\/www.mobibrw.com\/wp-content\/uploads\/2018\/03\/netifaces-0.10.4.tar.gz/g" cmake_targets/tools/build_helper

$ sed -i "s/https:\/\/github.com\/google\/protobuf\/releases\/download\/v2.6.1\/protobuf-2.6.1.tar.gz/https:\/\/www.mobibrw.com\/wp-content\/uploads\/2018\/03\/protobuf-2.6.1.tar.gz/g" cmake_targets/tools/build_helper

$ sed -i "s/git clone https:\/\/github.com\/protobuf-c\/protobuf-c.git/wget https:\/\/www.mobibrw.com\/wp-content\/uploads\/2018\/03\/protobuf-c.tar.gz \&\& tar -zxvf protobuf-c.tar.gz/g" cmake_targets/tools/build_helper

$ sed -i "s/http:\/\/mirrors.dotsrc.org\/gcrypt\/gnutls\/v3.1\/gnutls-3.1.23.tar.xz/https:\/\/www.mobibrw.com\/wp-content\/uploads\/2018\/03\/gnutls-3.1.23.tar.xz/g" cmake_targets/tools/build_helper

$ sed -i "s/https:\/\/ftp.gnu.org\/gnu\/nettle\/nettle-2.5.tar.gz/https:\/\/www.mobibrw.com\/wp-content\/uploads\/2018\/03\/nettle-2.5.tar.gz/g" cmake_targets/tools/build_helper 

#修正兼容问题,更高版本的protobuf-c跟我们上面安装的版本不匹配,会导致编译错误
$ sed -i "s/cd protobuf-c/cd protobuf-c \&\& git checkout 2a46af42784abf86804d536f6e0122d47cfeea45/g" cmake_targets/tools/build_helper

#执行编译
$ source oaienv  

$ ./cmake_targets/build_oai -I       # install SW packages from internet

# ./cmake_targets/build_oai  -w USRP --eNB # compile eNB
# 注意如果后续重新编译过limesdr的驱动,这部分也需要重新编译

$ ./cmake_targets/build_oai -c -w LMSSDR --eNB

下载并编译EPC(核心网)

$ git clone https://gitlab.eurecom.fr/oai/openair-cn.git

$ cd openair-cn

$ git checkout develop

$ git checkout 724542d0b59797b010af8c5df15af7f669c1e838 -b ubuntu16

#应用补丁 
$ git apply ../opencells-mods/EPC.patch

#对于国内的用户来说,国外的几个代码地址需要修改一下,否则会出现无法下载或者下载非常慢的情况
$ sed -i "s/git clone https:\/\/gitlab.eurecom.fr\/oai\/freediameter.git -b eurecom-1.2.0/wget https:\/\/www.mobibrw.com\/wp-content\/uploads\/2018\/03\/freediameter.tar.gz \&\& tar -zxvf freediameter.tar.gz \&\& cd freediameter \&\& git checkout eurecom-1.2.0 \&\& cd ../g" build/tools/build_helper

$ source oaienv; cd scripts

#安装依赖的软件,库
$ ./build_hss -i
# Do you want to install freeDiameter 1.2.0 ?<y/N>: yes
# 其他具体情况自行处理


#对于国内的用户来说,国外的几个代码地址需要修改一下,否则会出现无法下载或者下载非常慢的情况
$ sed -i "s/git clone git:\/\/git.osmocom.org\/libgtpnl/wget https:\/\/www.mobibrw.com\/wp-content\/uploads\/2018\/03\/libgtpnl.tar.gz \&\& tar -zxvf libgtpnl.tar.gz/g" ../build/tools/build_helper



#Install 3PP SW for mme and spgw
$ ./build_mme -i
# Do you want to install freeDiameter 1.2.0 ?<y/N>: no
# Do you want to install asn1c rev 1516 patched? <y/N>: no
# Do you want to install libgtpnl ? <y/N>: yes
# 其他具体情况自行处理



$ ./build_spgw -i
# Do you want to install libgtpnl ? <y/N>: no

#调整mme的编译模板,默认情况下mme编译出来的是Debug版本,
#但是这会触发"src/gtpv2-c/nwgtpv2c-0.11/src/NwGtpv2c.c"的断言异常
#”mme: ~/openair-cn/src/gtpv2-c/nwgtpv2c-0.11/src/NwGtpv2c.c:487: nwGtpv2cCreateLocalTunnel: Assertion `0' failed.“
#这个断言异常并不是大问题,直接无视即可
#因此我们把此处的编译调整为RelWithDebInfo
$ sed -i "s/\"Debug\"/\"RelWithDebInfo\"/g" ../build/mme/CMakeLists.template

#修正代码里面的几处问题
$ sed -i "s/while 0/while (0)/g" ../src/utils/log.h

$ sed -i 's/char[ \t]*pid_dec\[32]/char pid_dec\[128]/g' ../src/utils/pid_file.c

#正式进行编译操作
$ ./build_hss -c -v

$ ./build_mme -v

$ ./build_spgw -v

配置EPC

# 拷贝配置文件
$ cd ~

$ sudo mkdir -p /usr/local/etc/oai

$ sudo cp -rp opencells-mods/config_epc/* /usr/local/etc/oai


# 生成证书文件
$ cd openair-cn; source oaienv; cd scripts

$ ./check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter hss.OpenAir5G.Alliance

$ ./check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter mme.OpenAir5G.Alliance

# 配置出口网卡的名字,这个网卡用于访问互联网的时候使用
# 如果只有一块有线网卡,并且用这块有线网卡上网,则使用如下命令即可拿到网卡名
# `ifconfig | grep "Link" | awk '{print $1}' | grep "en"` 
# 其他情况请根据实际情况配置网卡
$ sudo sed -i "s/PGW_INTERFACE_NAME_FOR_SGI.*/PGW_INTERFACE_NAME_FOR_SGI = \"`ifconfig | grep "Link" | awk '{print $1}' | grep "en"`\";/g" /usr/local/etc/oai/spgw.conf

# 配置访问MySQL时候的密码,"/usr/local/etc/oai/hss.conf",此处假定MySQL的密码为"123"
$ sudo sed -i "s/^MYSQL_pass.*/MYSQL_pass = \"123\"/g" /usr/local/etc/oai/hss.conf


#导入数据库,建立表结构
$ ./hss_db_import 127.0.0.1 root 123 oai_db ~/opencells-mods/opencells_db.sql

修改我们UE需要使用的配置文件

$ cd ~

$ cd openairinterface5g; source oaienv

#配置文件为"targets/PROJECTS/GENERIC-LTE-EPC/CONF/"目录下的包含lmssdr的配置文件
$ sed -i "s/mobile_network_code.*/mobile_network_code = \"92\";/g" ./targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.lmssdr.conf

$ vim ./targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.lmssdr.conf

找到:

////////// MME parameters:
mme_ip_address      = ( { ipv4       = "192.168.12.148";
                          ipv6       = "192:168:30::17";
                          active     = "yes";
                          preference = "ipv4";
                        }
                      );

NETWORK_INTERFACES :
{
    ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
    ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.150/24";

    ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
    ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.150/24";
    ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
};

替换为:

////////// MME parameters:
mme_ip_address      = ( { ipv4       = "127.0.0.20";
                          ipv6       = "192:168:30::17";
                          active     = "yes";
                          preference = "ipv4";
                        }
                      );

NETWORK_INTERFACES :
{
    ENB_INTERFACE_NAME_FOR_S1_MME            = "lo";
    ENB_IPV4_ADDRESS_FOR_S1_MME              = "127.0.0.10/8";

    ENB_INTERFACE_NAME_FOR_S1U               = "lo";
    ENB_IPV4_ADDRESS_FOR_S1U                 = "127.0.0.10/8";
    ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
};

测试功能,按照顺序打开四个独立Shell

$ echo -ne "\033]0;HSS\007" 

$ cd ~

$ cd openair-cn; source oaienv; cd scripts; 

#貌似需要运行之前先清理一下数据库才行,否则可能导致设备无法入网,应该是个BUG
$ ./hss_db_import 127.0.0.1 root 123 oai_db ~/opencells-mods/opencells_db.sql

$ ./run_hss

 

$ echo -ne "\033]0;MME\007" 

$ cd ~

$ cd openair-cn; source oaienv; cd scripts; 

$ ./run_mme

 

$ echo -ne "\033]0;SPGW\007" 

$ cd ~

$ cd openair-cn; source oaienv; cd scripts; 

$ sudo -E ./run_spgw

 

$ echo -ne "\033]0;EUE\007" 

$ cd ~

$ cd openairinterface5g; source oaienv

#配置文件为"targets/PROJECTS/GENERIC-LTE-EPC/CONF/"目录下的包含lmssdr的配置文件
#这个配置文件跟天线的接入方式直接相关,天线接入的是主板上的RX1_H,TX1_2这两个天线接口
#最后的-d 参数是启动图形界面分析流量

$ sudo -E ./cmake_targets/lte_build_oai/build/lte-softmodem -O ./targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.lmssdr.conf --rf-config-file ./targets/ARCH/LMSSDR/LimeSDR_above_1p8GHz_1v4.ini -d

#如果启动之后,出现 “[PHY][E]TX : Timeout (sent 6800/7680)” 这样的红色内容,然后退出,可以多尝试几次,一般就可以恢复正常了

正常启动之后,用手机(比如华为荣耀7)搜索运营型,可以找到一个名为20892的运营商,或者有些欧洲制式的手机可以正确的显示Eurecom这个法国电信运营商的名字。

继续阅读ubuntu 16.04系统LimeSDR V1.4使用OpenAirInterface搭建LTE实验环境

OpenAir, single machine Ubuntu 17.04, after major EPC update

(updated: 2017, July 10th)

Modifs since version on July 6th:

  • Latest commit
  • Fix lacking file in the tarball
    (non modified ones since the June version were missing)
  • improved code pieces formating in HTML, added automatic git patch
  • Full re-test, from disk install of Ubuntu 17.04 to UE throughput measurement

This document explains how to install and configure OAI EPC+eNB on one single Ubuntu 17.04 64 bits machine connected with a regular UE (a Huawei E3272), routing the UE traffic to internet.

We use EPC after a major contribution in May 2017: a lot of code has been modified, all directories names were changes, configuration parameters names/values changed.

The description uses a USRP B210 board, a Lime SDR page is provided separately.

We also explain how to simplify, fix existing issues, to make a single computer as a full LTE network: EPC+eNB.

Known limitations fixed in the hereafter description

  • OAI EPC require kernel >= 4.7, so we have to use Ubuntu 17.04
    • We already pushed some enhancements in OAI, nevertheless some more are required
  • GTP UDP ports are in conflict for eNB and SGW
  • Useless link between OAI and the Ubuntu/Linux hostname removed
  • Several simplifications and precisions to make easier and reliable installations

继续阅读OpenAir, single machine Ubuntu 17.04, after major EPC update

ubuntu 16.04系统LimeSDR使用srsLTE搭建LTE实验环境

操作系统调整
参考ubuntu 16.04低延迟内核安装低延时内核

CPU调整为最大性能模式,并且不允许降低频率

$ sudo apt-get install cpufrequtils
 
$ sudo touch /etc/default/cpufrequtils
 
$ sudo sed -i "/GOVERNOR.*/d" /etc/default/cpufrequtils
 
$ test -s /etc/default/cpufrequtils && sudo sed -i '$a\GOVERNOR=\"performance\"' /etc/default/cpufrequtils || echo "GOVERNOR=\"performance\"" | sudo tee /etc/default/cpufrequtils
 
$ sudo update-rc.d ondemand disable
 
$ sudo reboot

安装依赖包

$ sudo apt-get install cmake g++ libpython-dev python-numpy swig git libsqlite3-dev libi2c-dev libusb-1.0-0-dev libwxgtk3.0-dev freeglut3-dev

编译安装SoapySDR

$ cd ~ 

$ git clone https://github.com/pothosware/SoapySDR.git

$ cd SoapySDR

$ git pull origin master

$ mkdir build && cd build

$ cmake ..

$ make -j4

$ sudo make install

$ sudo ldconfig

编译安装LimeSDR

$ cd ~

$ git clone https://github.com/myriadrf/LimeSuite.git

$ cd LimeSuite

# 再次更新一下,确保代码到最新
$ git pull

# 不可删除build目录,清理build目录后要还原被误删除的文件,
# 原因在于build目录下存在mcu程序,默认应用启动后从这个目录提取mcu程序刷新到设备

$ mkdir build ; cd build

# cmake -DCMAKE_BUILD_TYPE=Debug ..
$ cmake ..

$ make -j4

$ sudo make install

$ sudo ldconfig

$ cd ../udev-rules/

$ sudo ./install.sh

# Download board firmware
$ sudo LimeUtil --update

编译安装srsGUI

$ cd ~

# srsGUI提供了一个软件示波器的功能,我们可以比较直观的观察到波形信息

$ git clone https://github.com/srsLTE/srsGUI.git

$ cd srsGUI

# 再次更新一下,确保代码到最新
$ git pull

$ mkdir build

$ cd build

$ cmake ..

$ make

$ sudo make install

$ sudo ldconfig

编译安装srsLTE

$ sudo apt-get install git cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libboost-thread-dev libconfig++-dev libsctp-dev
$ cd ~

$ git clone https://github.com/srsLTE/srsLTE.git

$ cd srsLTE

# 再次更新一下,确保代码到最新
$ git pull

# 目前(2018.05.04)以及之前的代码中srsenb/src/upper/rrc.cc文件中
# uint32_t rrc::generate_sibs() 函数中存在一个数组越界问题,
# 已经提交patch ,具体修改
# 参看https://github.com/srsLTE/srsLTE/pull/173

# 调用LimeSDR设备的代码在 lib/src/phy/rf/rf_soapy_imp.c 文件中
# 这个文件中默认的接收天线是"LNAH",默认的发送天线是"BAND1",需要根据实际情况
# 也就是自己天线接入的接口是哪个,就修改成哪个。
# 调整这里的参数,目前是直接修改代码。比如我这边的发送天线就修改为"BAND2"

$ mkdir build

$ cd build

# cmake -DCMAKE_BUILD_TYPE=Debug ..
$ cmake ../

$ make

$ make test

测试

$ cd ~/srsLTE

$ cd build/lib/examples

#以20M带宽的形式进行基站的扫描,LTE基站带宽20M,目前版本测试不支持,无法扫描到基站
# ./cell_search -b 20

#目前测试仅支持此命令的运行
$ ./pdsch_enodeb

搭建LTE测试环境

$ cd ~/srsLTE

$ mkdir lteCell

$ cd lteCell


# 生成配置文件
$ mkdir lteENB

$ cp ../srsenb/enb.conf.example lteENB/enb.conf

$ cp ../srsenb/rr.conf.example lteENB/rr.conf

$ cp ../srsenb/sib.conf.example lteENB/sib.conf

$ cp ../srsenb/drb.conf.example lteENB/drb.conf

$ mkdir lteEPC

$ cp ../srsepc/epc.conf.example lteEPC/epc.conf

$ cp ../srsepc/user_db.csv.example lteEPC/user_db.csv


# 生成运行脚本
$ echo "echo -ne \"\033]0;ENB\007\"" >> run_enb.sh

$ echo "cd lteENB" >> run_enb.sh


# 需要gdb的话使用如下
#echo "#gdb -args ../../build/srsenb/src/srsenb enb.conf" >> run_enb.sh

$ echo "../../build/srsenb/src/srsenb enb.conf" >> run_enb.sh

$ echo "echo -ne \"\033]0;EPC\007\"" >> run_epc.sh

$ echo "cd lteEPC" >> run_epc.sh

# 需要配置如下转发规则,否则不能正常工作,配置信息参考openair-cn的SPGW中的代码
# sudo sysctl -w net.ipv4.ip_forward=1
# sudo sync
# sudo iptables -t mangle -F FORWARD
# sudo iptables -t nat -F POSTROUTING
# export LANG=C
# 如果没有修改过配置文件,则默认使用如下配置即可,
# 如果修改过sgi_if_addr的地址(默认sgi_if_addr=172.16.0.1),需要更改这个字段
# export FORDING_IPs=172.16.0.0/12
# 有线网卡一般以"en"开头,比如"enp3s0",此处需要根据自身机器上的网卡进行设置,修改
# export NIC_NAME=`ls /sys/class/net | grep en`
# export NIC_IP=`ifconfig $NIC_NAME | grep 'inet addr:' | awk '{print $2}' | cut -c 6-`
# sudo iptables -t nat -I POSTROUTING -s $FORDING_IPs -o  $NIC_NAME ! --protocol sctp -j SNAT --to-source $NIC_IP

$ echo "sysctl -w net.ipv4.ip_forward=1" >> run_epc.sh

$ echo "sync" >> run_epc.sh

$ echo "iptables -t mangle -F FORWARD" >> run_epc.sh

$ echo "iptables -t nat -F POSTROUTING" >> run_epc.sh

$ echo "export LANG=C" >> run_epc.sh

$ echo 'export FORDING_IPs=172.16.0.0/12' >> run_epc.sh

$ echo 'export NIC_NAME=`ls /sys/class/net | grep en`' >> run_epc.sh

$ echo "export NIC_IP=\\`ifconfig \$NIC_NAME | grep 'inet addr:' | awk '{print \$2}' | cut -c 6-\\`" >> run_epc.sh

$ echo 'iptables -t nat -I POSTROUTING -s $FORDING_IPs -o  $NIC_NAME ! --protocol sctp -j SNAT --to-source $NIC_IP' >> run_epc.sh

$ echo "../../build/srsepc/src/srsepc epc.conf" >> run_epc.sh

$ echo "gnome-terminal -e \"bash run_epc.sh\"" >> run.sh

$ echo "sleep 2" >> run.sh

$ echo "gnome-terminal -e \"bash run_enb.sh\"" >> run.sh


# 运行测试
$ sudo bash run.sh

#日志查看 /tmp/enb.log, /tmp/epc.log

如果设备(比如手机)的设置是按照ubuntu 16.04系统LimeSDR V1.4使用OpenAirInterface搭建LTE实验环境里面的设置的,设备参数如下图:
注意上图与OpenAirInterface中设置的不同之处,差别就是一个选中OPC,一个选中OP

则需要对配置文件进行如下调整:

$ cd ~/srsLTE/lteCell

# 修改MNC,MCC
$ sed -i -r "s/^mnc[ \t]*=[ \t0-9]*/mnc = 92/g" lteENB/enb.conf
$ sed -i -r "s/^mcc[ \t]*=[ \t0-9]*/mcc = 208/g" lteENB/enb.conf
$ sed -i -r "s/^tac[ \t]*=[ \t]*0x[0-9]*/tac = 0x0001/g" lteENB/enb.conf

$ sed -i -r "s/^mnc[ \t]*=[ \t0-9]*/mnc = 92/g" lteEPC/epc.conf 
$ sed -i -r "s/^mcc[ \t]*=[ \t0-9]*/mcc = 208/g" lteEPC/epc.conf
$ sed -i -r "s/^tac[ \t]*=[ \t]*0x[0-9]*/tac = 0x0001/g" lteEPC/epc.conf

# 修改认证加密算法
$ sed -i -r "s/^auth_algo[ \t]*=[ \ta-Z]*/auth_algo = milenage/g" lteEPC/epc.conf


# 需要软件示波器界面的话,修改 lteEPC/epc.conf 里面的 [gui]部分的enable = true
# 但是打开示波器会导致CPU开销加大,降低实时性,稳定性变低

# 认证数据库中增加Name,IMSI,Key,OP,AMF,SQN 这里主要的就是IMSI,Key,OP这几个参数
# OPc=AES128(Ki,OP) XOR OP 因此需要反算 OP 
# openair-cn需要OPc,而 srsLTE 的epc需要 OP 这是两者的主要区别
# OPc = 504f20634f6320504f50206363500a4f 
# Ki = 6874736969202073796d4b2079650a73
# OP = 11111111111111111111111111111111
# 最后的 SQN 目前测试发现如果一直不能正常注册,并且提示
# "Sequence number synch failure" 则会观察到,当EPC退出时候,应用一定回写 
# 成000000001b02 ,一旦出现这个数字,我们就没办法注册设备了。应该是个BUG
# http://www.mobibrw.com/?p=12688 中我们持续跟进这个问题,目前猜测是要比设备最后
# 一次通信记录的数据号大就可以了,如果要复位可以让设备关机,应该就从0开始了。
 
$ sed -i '$a\ue3,208920100001100,6874736969202073796d4b2079650a73,11111111111111111111111111111111,8000,000000001b03' lteEPC/user_db.csv

注意目前srsLTE的CPU开销远远高于OpenAirInterface,差不多一个内核满负载,以及稳定性是低于OpenAirInterface的,经常出现连接困难以及中途掉线,这部分需要后续的持续修改。目前测试发现,在"lteEPC/epc.conf"中关闭GUI的显示,可以显著减低CPU开销,并增加稳定性,但是还是比OpenAirInterface要多消耗CPU。另外在"lteEPC/epc.conf"中日志设置成"all_level = none"也可以降低CPU开销,并且增加稳定性。

另外,注意"/tmp/enb.log",这个日志文件默认情况下,写入的比较多,文件大小增长很快,注意磁盘占用情况。

目前测试发现,使用Intel MKL加速的情况下,CPU降低并不明显,而稳定性下降非常多应该是代码的适配问题。因此,暂时不要使用Intel MKL。

目前测试发现,使用最新的FFTW3版本,使用AVX,AVX2加速的情况下,CPU开销更高,性能更差,应该是代码存在BUG。因此,暂时不要使用自己编译的FFTW3,使用系统自带的版本即可。

手机等设备的设置参考ubuntu 16.04系统LimeSDR V1.4使用OpenAirInterface搭建LTE实验环境最后的介绍。

上述的代码如果下载困难,可以从本站下载一份拷贝。

SoapySDR源代码下载
LimeSuite源代码下载
srsLTE源代码下载
srsGUI源代码下载
fftw3源代码下载

参考链接


ubuntu 16.04修复固件刷新失败的LimeSDR-USB V1.4

最近在使用LimeSDR捣鼓软件定义无线电,结果在刷新固件的过程中,莫名失败,导致无法识别硬件。

使用LimeUtil检查硬件,出现如下结果:

$ sudo ./LimeUtil --find
  * [WestBridge , media=USB 2.0, module=STREAM, addr=04b4:00f3, serial=0000000004BE]

之后就再也无法通过

$ sudo ./LimeUtil --update

更新固件了,一直失败。

继续阅读ubuntu 16.04修复固件刷新失败的LimeSDR-USB V1.4