Running OpenBTS with the Nuand bladeRF on Ubuntu (The Definitive and Step by Step Guide)

2023-05-16

From:https://blog.strcpy.info/2016/11/16/running-openbts-with-the-nuand-bladerf-on-ubuntu-the-definitive-guide/


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 channelsrelated 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 theUbuntu 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) repositoriesto 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 installthe 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: Thelibsrtp0, libsrtp0, andlibsrtp0-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 todownload 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 andthe 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 viaGSMTAP.


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 MNCvalues 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Running OpenBTS with the Nuand bladeRF on Ubuntu (The Definitive and Step by Step Guide) 的相关文章

随机推荐

  • 计算机组成原理三:总线

    第三章 总线 1 总线概念 计算机硬件系统有2种互联方式 一种是各部件之间单独连线 称为分散连接 另一种是将各部件连到一组公关信息 传输线上 称为总线连接 总线是一组线路 将计算机的各个硬件连接在一起 让它们可以通过这条公共线路进行数据的传
  • Matlab-数字图像处理-获取图片rgb颜色分量及截取子图

    Matlab 数字图像处理基础实验 获取图片rgb颜色分量及截取子图 Problem Statement 问题描述 1 Proficient in Matlab tools and complete two Matlab functions
  • ICRA2020论文整理(SLAM + Deep Learning)

    参考 https github com PaoPaoRobot ICRA2020 paper list 目录 1 SLAM 2 Deep Learning in Robotics and Automation 3 Localization
  • win10+ubuntu16.04双系统下完全删除并重装ubuntu16.04

    参考文章 xff1a 1 彻底删除Ubuntu EFI分区及启动项 xff1a https blog csdn net mtllyb article details 78635757 2 Create a bootable USB stic
  • Ubuntu18.04开机挂载硬盘

    Linux与Windows的文件资源管理在加载上有所区别 xff0c Windows自动加载主板上连接的所有磁盘 xff0c 而Linux默认只挂载系统所在的分区 xff0c 使用其他分区则需要使用mount命令手动挂载 若需系统启动时自动
  • [Docker] 删除所有httpd镜像创建的容器 - 详细解释

    故意 一不小心创建了很多httpd容器 或者包含 httpd 关键字 xff0c 有的在运行 xff0c 有的已经停止了 xff0c 有的已经退出 xff0c 如果我想强制一键删除 xff0c 该怎么办呢 xff1f 其实很简单 xff0c
  • 直流调速器(有刷电调)的工作原理

    以前测试过无刷电调 xff0c 它是把锂电池的直流电转化为三相交流波形 xff0c 最近买了有刷电调 xff0c 也研究一下它的调速原理 调速器如下 xff1a 飞马 30A单向有刷电调 固定翼飞机专用 带动力启动开关 测试平台 连接示波器
  • 百度开发测试工程师在线笔试

    时间 xff1a 2020 9 3 19 xff1a 00 21 xff1a 00 笔试内容 xff1a 选择题 编程题 1 选择题 xff08 30个 xff09 50分钟 xff0c 60分 xff0c 涵盖内容较广 xff0c 包含计
  • ROS1重温:自定义头文件、源文件

    ROS1重温 xff1a 自定义头文件 源文件 自定义头文件 源文件的意义自定义头文件创建自定义头文件使用头文件 xff0c 并在程序中直接实现函数功能修改 CMakeLists txt 文件 自定义头文件中实现函数功能的源文件创建自定义头
  • spring cloud bus 消息总线 原理总结

    1 spring cloud bus spring cloud bus整合java的事件处理机制和消息中间件的发送和接收 xff0c 主要是由发送端 接收端和事件组成 目前spring cloud bus只实现了RabbitMq和Kafka
  • NGUI扩展:为面板(Panel)添加自定义图片遮罩

    前一阵使用NGUI开发时遇到一个实现圆形小地图的需求 小地图上除了地图背景外还有一大堆的零零碎碎的角色提示信息啥的 xff0c 因此创建了一个panel进行绘制 xff0c 剩下的就是如何让这个panel只在一个圆形的区域内进行显示 NGU
  • Unity3D使用RenderCommand渲染外轮廓

    外轮廓渲染方式原来的做法使用CommandBuffer 外轮廓渲染方式 我这里所要介绍的外轮廓是使用模糊后处理实现的 xff0c 不涉及到边缘查找或是顶点扩展这些 xff0c 简单的说这种方式渲染外轮廓总共分三步 1 用单色渲染目标物体到R
  • Matlab-计算直方图+直方图均衡

    数字图像处理基础实验 计算直方图 43 直方图均衡 Problem Statement xff08 问题描述 xff09 1 Histograms are the basis for numerous spatial domain proc
  • Unity 5 全局光照GI与新的烘焙系统初探

    GI是啥 Realtime GI xff0c 实时全局光照 xff0c 听上去就是一个非常高大上的词 xff0c 但是越高大上就越令人心生敬畏 xff0c 因为世上没有免费的午餐 xff0c 越好的效果意味着越多的消耗 xff0c 对于移动
  • Unity5 (5.0-5.2) Shader编译机制初探 - 小心,Shader在吞噬你的内存

    又被Unity坑了一把 xff0c 简单说下吧 xff0c 下面都是流水账 xff0c 结论就写在最后了 xff0c 就是Unity5 5 2的shader编译机制真是不咋地 1 Why Always me 问题是这样的 xff0c 我照着
  • Unity3D Android使用Bugly定位崩溃问题总结

    看着bugly干了1个多月的crash问题处理 xff0c 可以说是心力憔悴 xff0c 整天对着一堆莫名其妙的崩溃堆栈和一大把日志发愁 xff0c 背锅的滋味可是真不好受 xff0c 得空写一篇总结与各位背锅侠共勉 一般来说游戏的Cras
  • 在Unity3D中控制动画播放

    用Unity3D也算是好久了 xff0c 但是每次做项目总还是能学到新的东西 这次做一个TPS的项目就遇到了这样一个问题 xff0c 如何同时在上下半身播放不同的动画 xff1f 解决方法其实是很简单 xff0c 但由于对于动画资源的了解不
  • 如何使用ROS的service读取Kinect图像

    如何使用ROS的service读取Kinect图像 我们经常会使用各种ROS包 xff0c 而如何在ROS程序中导入Kinect图像呢 xff1f 1 先写一个service文件 学了挺久了 xff0c 这个还没有好好整理过 其实步骤很简单
  • bladeRF:自己调制无线门控钥匙信号

    无线门控钥匙是如何编码的 xff1f 上一篇博客bladeRF无线门控钥匙信号重放小记已经录制了钥匙信号 xff0c 在inpectrum里对一帧信号进行分析后可看到 xff1a 嗯 xff0c 好吧 xff0c 这信号具体不知是个啥意思
  • Running OpenBTS with the Nuand bladeRF on Ubuntu (The Definitive and Step by Step Guide)

    From xff1a https blog strcpy info 2016 11 16 running openbts with the nuand bladerf on ubuntu the definitive guide I hav