赞
踩
本教程参考了James Evrytania和焦现军老师的GitHub开源项目,以及基本内容。可以说就是其内容的部署和实现。其中James Evrytania的程序仅支持RTL2832和FDD解码,不支持HackRF One以及国内中国移动使用的TDD。但焦老师的程序是在Evrytania老师的项目上继续的,因此我先从Evrytania开始做起,本文不涉及代码分析,仅是将作者的程序成功运行了而已,后面还需要对其C++语言和Matlab代码进行详细分析才能完全了解其中的奥秘。
https://github.com/Evrytania/LTE-Cell-Scannerhttps://github.com/Evrytania/LTE-Cell-ScannerGitHub - JiaoXianjun/LTE-Cell-Scanner: OpenCL, SDR, TDD/FDD LTE cell scanner, full stack from A/D samples to SIB ASN1 messages decoded in PDSCH, (optimized for RTL-SDR HACKRF and BladeRF board)OpenCL, SDR, TDD/FDD LTE cell scanner, full stack from A/D samples to SIB ASN1 messages decoded in PDSCH, (optimized for RTL-SDR HACKRF and BladeRF board) - GitHub - JiaoXianjun/LTE-Cell-Scanner: OpenCL, SDR, TDD/FDD LTE cell scanner, full stack from A/D samples to SIB ASN1 messages decoded in PDSCH, (optimized for RTL-SDR HACKRF and BladeRF board)https://github.com/JiaoXianjun/LTE-Cell-Scanner
1、检查依赖包是否均安装成功
sudo apt install libblas-dev librtlsdr-dev libncurses5-dev libitpp-dev -y
2、clone下Evrytania的程序。
https://github.com/Evrytania/LTE-Cell-Scanner.git
3、进行编辑,如果顺利,就是如下几行指令,但我还是遇到了各种问题,第4和第5步分别是我遇到的两个错误。
- cd LTE-Cell-Scanner-master
- mkdir build
- cd build
- cmake ../
- make
4、cmake时报错,无法找到ITPP等包,根据GitHub中的解答,我找到了解决方法。首先找到这个包的路径,使用以下指令。
- cd /usr/lib
- find | grep -i itpp
例如我查出包的路径为/usr/lib/x86_64-linux-gnu,记录下这个路径,打开/LTE-Cell-Scanner-master/cmake/Modules,可以看到三个cmake文件,依次打开并将该路径加入到FIND_LIBRARY()中。这三个文件分别是找ITPP、FTTW和RTLSDR包,直接都加入,防止其它的报错。之后再cmake ..应该就不会报错了。
5、make时报错,我截取了GitHub上别人报告,和我的是一样的。
- [ 5%] Building CXX object src/CMakeFiles/LTE_MISC.dir/capbuf.cpp.o
- In file included from /root/LTE-Cell-Scanner/src/capbuf.cpp:29:0:
- /root/LTE-Cell-Scanner/include/dsp.h: In function ‘itpp::cvec fshift(const cvec&, double, double)’:
- /root/LTE-Cell-Scanner/include/dsp.h:47:25: error: lvalue required as left operand of assignment
- coeff.real()=cos(kt);
- ^
- /root/LTE-Cell-Scanner/include/dsp.h:48:25: error: lvalue required as left operand of assignment
- coeff.imag()=sin(kt);
- ^
- /root/LTE-Cell-Scanner/include/dsp.h: In function ‘void fshift_inplace(itpp::cvec&, double, double)’:
- /root/LTE-Cell-Scanner/include/dsp.h:64:25: error: lvalue required as left operand of assignment
- coeff.real()=cos(kt);
- ^
- /root/LTE-Cell-Scanner/include/dsp.h:65:25: error: lvalue required as left operand of assignment
- coeff.imag()=sin(kt);
- ^
- src/CMakeFiles/LTE_MISC.dir/build.make:62: recipe for target 'src/CMakeFiles/LTE_MISC.dir/capbuf.cpp.o' failed
- make[2]: *** [src/CMakeFiles/LTE_MISC.dir/capbuf.cpp.o] Error 1
- CMakeFiles/Makefile2:121: recipe for target 'src/CMakeFiles/LTE_MISC.dir/all' failed
- make[1]: *** [src/CMakeFiles/LTE_MISC.dir/all] Error 2
- Makefile:138: recipe for target 'all' failed
- make: *** [all] Error 2
这个解决方法也可以在GigHub的问答中找到,打开/LTE-Cell-Scanner-master/CMakeLists.txt,
讲第11行的代码进行修改,增加-std=c++03 ,修改完后,再次make,就不会报错了。
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++03 -ggdb -Wall")
至此按理来说就可以正常去使用CellSearch和LTE-Tracker了。
但我并没有RTL2832来进行实验,所以并不保证完全可用,但大家可以进行参考。
1、仍然需要安装依赖包、clone程序、进行编译。因为我们设备是HackRF One,所以在cmake后加参数,其它设备也需要加相应参数进行编译,默认设备是RTL2832。
- sudo apt install libblas-dev librtlsdr-dev libncurses5-dev libitpp-dev -y
- git clone https://github.com/JiaoXianjun/LTE-Cell-Scanner.git
-
- cd LTE-Cell-Scanner-master
- mkdir build
- cd build
- cmake ../ -DUSE_HACKRF=1
- make
2、在这次执行cmake和make时均为出现错误,不需要去修改上述的那些文件了。但在安装完毕后使用CellSearch时,出现了报错,说找不到设备,或配置错误,报错如下。
- PPM: 0
- correction: 1
- usb_claim_interface error -6
- config_rtlsdr Error: unable to open Hackrf device
- Hackrf device not FOUND!
遇到这个原因,我找了好久原因,因为其在cmake和make期间没有报任何错误,让我摸不着头脑,后来我仔细查看了cmake时候的信息,发现Hackrf Lib没有找到,我又去看了/LTE-Cell-Scanner-master/cmake/Modules/FindHACKRF.cmake文件,发现其在查找Hackrf时,需要找两个位置,一个是hackrf.h的位置,另一个是libhackrf的位置。libhackrf我肯定是安装了,但haackrf.h我并没有,这一看就是C++程序的头文件。想到焦老师以及Evrytania的程序均是C++编写的,所以应该是需要hackrf的C++包,知道原因之后,解决起来也不难。
3、安装hackrf的C++包。
- git clone https://github.com/mossmann/hackrf.git
- cd hackrf/host
- mkdir build
- cd build
- cmake ..
- make
- sudo make install
4、至此就可以链接HackRF One,来使用CellSearch和LTE-Tracker了。
- ./CellSearch --freq-start 2644400000
-
- try peak 0 tdd_flag 0
- try peak 0 tdd_flag 1
- Detected a TDD cell! At freqeuncy 2644.4MHz, try 0
- cell ID: 487
- PSS ID: 1
- RX power level: -5.87175 dB
- residual frequency offset: -421.115 Hz
- k_factor: 1
至此运行成功,找到了TDD基站。“CellSearch”程序可用于在一定频率范围内搜索 LTE 运营商。一旦定位了 LTE 频率,可以使用“LTE-Tracker”对基站小区进行搜索和追踪。使用该程序搭配地图,可以确定基站小区的覆盖范围。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。