update readme
This commit is contained in:
@@ -1,30 +1,27 @@
|
|||||||
Hi!
|
Hi!
|
||||||
|
|
||||||
This an IEEE 802.11 a/g/p transceiver for GNU Radio that is fitted for operation with Ettus N210s and B210s. Interoperability was tested with many off-the-shelf WiFi cards and IEEE 802.11p prototypes. The code can also be used in simulations.
|
This an IEEE 802.11 a/g/p transceiver for GNU Radio that is fitted for operation
|
||||||
|
with Ettus N210s and B210s. Interoperability was tested with many off-the-shelf
|
||||||
|
WiFi cards and IEEE 802.11p prototypes. The code can also be used in
|
||||||
|
simulations.
|
||||||
|
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
|
|
||||||
Like GNU Radio, this module uses *master* and *next* branches for development, which are supposed to be used with the corresponding GNU Radio branches.
|
Like GNU Radio, this module uses *master* and *maint* branches for development.
|
||||||
I recommend staying up-to-date by using the *next* branch.
|
These branches are supposed to be used with the corresponding GNU Radio
|
||||||
|
branches. This means: the *maint-3.7* branch is compatible with GNU Radio 3.7,
|
||||||
|
*maint-3.8* is compatible with GNU Radio 3.8, and *master* is compatible with
|
||||||
|
GNU Radio master, which tracks the development towards GNU Radio 3.9.
|
||||||
|
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
Please note that ```apt-get``` is the package manager of Debian/Ubuntu based systems, while ```port``` is one package manager for OSX. So use either (not both) according to your needs.
|
|
||||||
|
|
||||||
### Swig
|
### GNU Radio
|
||||||
|
|
||||||
Swig is required to create the python bindings.
|
|
||||||
|
|
||||||
sudo apt-get install swig
|
|
||||||
sudo port install swig
|
|
||||||
|
|
||||||
### GNU Radio v3.7
|
|
||||||
|
|
||||||
You need at least version 3.7.3.
|
|
||||||
|
|
||||||
There are several ways to install GNU Radio. You can use
|
There are several ways to install GNU Radio. You can use
|
||||||
|
|
||||||
@@ -35,7 +32,10 @@ There are several ways to install GNU Radio. You can use
|
|||||||
|
|
||||||
### gr-foo
|
### gr-foo
|
||||||
|
|
||||||
I have some non project specific GNU Radio blocks in my gr-foo repo that are needed. For example the Wireshark connector. You can find these blocks at [https://github.com/bastibl/gr-foo](https://github.com/bastibl/gr-foo). They are installed with the typical command sequence:
|
I have some non project specific GNU Radio blocks in my gr-foo repo that are
|
||||||
|
needed. For example the Wireshark connector. You can find these blocks at
|
||||||
|
[https://github.com/bastibl/gr-foo](https://github.com/bastibl/gr-foo). They are
|
||||||
|
installed with the typical command sequence:
|
||||||
|
|
||||||
git clone https://github.com/bastibl/gr-foo.git
|
git clone https://github.com/bastibl/gr-foo.git
|
||||||
cd gr-foo
|
cd gr-foo
|
||||||
@@ -61,48 +61,74 @@ To actually install the blocks do
|
|||||||
sudo ldconfig
|
sudo ldconfig
|
||||||
|
|
||||||
### Adjust Maximum Shared Memory
|
### Adjust Maximum Shared Memory
|
||||||
Since the transmitter is using the Tagged Stream blocks it has to store a complete frame in the buffer before processing it. The default maximum shared memory might not be enough on most Linux systems. It can be increased with
|
Since the transmitter is using the Tagged Stream blocks it has to store a
|
||||||
|
complete frame in the buffer before processing it. The default maximum shared
|
||||||
|
memory might not be enough on most Linux systems. It can be increased with
|
||||||
|
|
||||||
sudo sysctl -w kernel.shmmax=2147483648
|
sudo sysctl -w kernel.shmmax=2147483648
|
||||||
|
|
||||||
|
|
||||||
### OFDM PHY
|
### OFDM PHY
|
||||||
|
|
||||||
The physical layer is encapsulated in a hierarchical block to allow for a clearer transceiver structure in GNU Radio Companion. This hierarchical block is not included in the installation process. You have to open ```/examples/wifi_phy_hier.grc``` with GNU Radio Companion and build it. This will install the block in ```~/.grc_gnuradio/```.
|
The physical layer is encapsulated in a hierarchical block to allow for a
|
||||||
|
clearer transceiver structure in GNU Radio Companion. This hierarchical block is
|
||||||
|
not included in the installation process. You have to open
|
||||||
|
```/examples/wifi_phy_hier.grc``` with GNU Radio Companion and build it. This
|
||||||
|
will install the block in ```~/.grc_gnuradio/```.
|
||||||
|
|
||||||
|
|
||||||
### Check message port connections
|
### Check message port connections
|
||||||
|
|
||||||
Sometime the connections between the message ports (the gray ones in GNU Radio Companion) break. Therefore, please open the flow graphs and assert that everything is connected. It should be pretty obvious how the blocks are supposed to be wired. Actually this should not happen anymore, so if your ports are still unconnected please drop me a mail.
|
Sometime the connections between the message ports (the gray ones in GNU Radio
|
||||||
|
Companion) break. Therefore, please open the flow graphs and assert that
|
||||||
|
everything is connected. It should be pretty obvious how the blocks are supposed
|
||||||
|
to be wired. Actually this should not happen anymore, so if your ports are still
|
||||||
|
unconnected please drop me a mail.
|
||||||
|
|
||||||
|
|
||||||
### Python OpenGL
|
### Python OpenGL
|
||||||
|
|
||||||
If you want to run the receive demo (the one that plots the subcarrier constellations), please assert that you have python-opengl installed. The nongl version of the plot does not work for me.
|
If you want to run the receive demo (the one that plots the subcarrier
|
||||||
|
constellations), please assert that you have python-opengl installed. The nongl
|
||||||
|
version of the plot does not work for me.
|
||||||
|
|
||||||
|
|
||||||
### Run volk_profile
|
### Run volk_profile
|
||||||
|
|
||||||
volk_profile is part of GNU Radio. It benchmarks different SIMD implementations on your PC and creates a configuration file that stores the fastest version of every function. This can speed up the computation considerably and is required in order to deal with the high rate of incoming samples.
|
volk_profile is part of GNU Radio. It benchmarks different SIMD implementations
|
||||||
|
on your PC and creates a configuration file that stores the fastest version of
|
||||||
|
every function. This can speed up the computation considerably and is required
|
||||||
|
in order to deal with the high rate of incoming samples.
|
||||||
|
|
||||||
|
|
||||||
### Calibrate your daughterboard
|
### Calibrate your daughterboard
|
||||||
|
|
||||||
If you have a WBX, SBX, or CBX daughterboard you should calibrate it in order to minimize IQ imbalance and TX DC offsets. See the [application notes](http://files.ettus.com/manual/page_calibration.html).
|
If you have a WBX, SBX, or CBX daughterboard you should calibrate it in order to
|
||||||
|
minimize IQ imbalance and TX DC offsets. See the [application
|
||||||
|
notes](http://files.ettus.com/manual/page_calibration.html).
|
||||||
|
|
||||||
|
|
||||||
# Checking your installation
|
# Checking your installation
|
||||||
|
|
||||||
As a first step I recommend to test the ```wifi_loopback.grc``` flow graph. This flow graph does not need any hardware and allows you to ensure that the software part is installed correctly. So open the flow graph and run it. If everything works as intended you should see some decoded 'Hello World' packets in the console.
|
As a first step I recommend to test the ```wifi_loopback.grc``` flow graph. This
|
||||||
|
flow graph does not need any hardware and allows you to ensure that the software
|
||||||
|
part is installed correctly. So open the flow graph and run it. If everything
|
||||||
|
works as intended you should see some decoded 'Hello World' packets in the
|
||||||
|
console.
|
||||||
|
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
If GRC complains that it can't find some blocks (other than performance counters and hierarchical blocks) like
|
If GRC complains that it can't find some blocks (other than performance counters
|
||||||
|
and hierarchical blocks) like
|
||||||
|
|
||||||
>>> Error: Block key "ieee802_11_ofdm_mac" not found in Platform - grc(GNU Radio Companion)
|
>>> Error: Block key "ieee802_11_ofdm_mac" not found in Platform - grc(GNU Radio Companion)
|
||||||
>>> Error: Block key "foo_packet_pad" not found in Platform - grc(GNU Radio Companion)
|
>>> Error: Block key "foo_packet_pad" not found in Platform - grc(GNU Radio Companion)
|
||||||
|
|
||||||
Most likely you used a different ```CMAKE_INSTALL_PREFIX``` for the module than for GNU Radio. Therefore, the blocks of the module ended up in a different directory and GRC can't find them. You have to tell GRC where these blocks are by creating/adding to your ```~/.gnuradio/config.conf``` something like
|
Most likely you used a different ```CMAKE_INSTALL_PREFIX``` for the module than
|
||||||
|
for GNU Radio. Therefore, the blocks of the module ended up in a different
|
||||||
|
directory and GRC can't find them. You have to tell GRC where these blocks are
|
||||||
|
by creating/adding to your ```~/.gnuradio/config.conf``` something like
|
||||||
|
|
||||||
[grc]
|
[grc]
|
||||||
global_blocks_path = /opt/local/share/gnuradio/grc/blocks
|
global_blocks_path = /opt/local/share/gnuradio/grc/blocks
|
||||||
@@ -116,72 +142,69 @@ But with the directories that match your installation.
|
|||||||
|
|
||||||
## Simulation
|
## Simulation
|
||||||
|
|
||||||
The loopback flow graph should give you an idea of how simulations can be conducted. To ease use, most blocks have debugging and logging capabilities that can generate traces of the simulation. You can read about the logging feature and how to use it on the [GNU Radio Wiki](http://gnuradio.org/doc/doxygen/page_logger.html).
|
The loopback flow graph should give you an idea of how simulations can be
|
||||||
|
conducted. To ease use, most blocks have debugging and logging capabilities that
|
||||||
|
can generate traces of the simulation. You can read about the logging feature
|
||||||
|
and how to use it on the [GNU Radio
|
||||||
|
Wiki](http://gnuradio.org/doc/doxygen/page_logger.html).
|
||||||
|
|
||||||
|
|
||||||
## Unidirectional communication
|
## Unidirectional communication
|
||||||
|
|
||||||
As first over the air test I recommend to try ```wifi_rx.grc``` and ```wifi_tx.grc```. Just open the flow graphs in GNU Radio companion and execute them. If it does not work out of the box, try to play around with the gain. If everything works as intended you should see similar output as in the ```wifi_loopback.grc``` example.
|
As first over the air test I recommend to try ```wifi_rx.grc``` and
|
||||||
|
```wifi_tx.grc```. Just open the flow graphs in GNU Radio companion and execute
|
||||||
|
them. If it does not work out of the box, try to play around with the gain. If
|
||||||
## RX frames from a WiFi card
|
everything works as intended you should see similar output as in the
|
||||||
|
```wifi_loopback.grc``` example.
|
||||||
TBD
|
|
||||||
|
|
||||||
|
|
||||||
## TX frames to a WiFi card
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
|
|
||||||
## Transceiver (SDR <-> SDR)
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
|
|
||||||
## Ad Hoc Network with WiFi card
|
## Ad Hoc Network with WiFi card
|
||||||
|
|
||||||
- The transceiver is currently connected to a TAP device, i.e. is a virtual Ethernet interface. Therefore, we have no WiFi signaling like association requests and hence, the transceiver can not "join" an ad hoc network. You have to make some small changes to the kernel in order to convince you WiFi card to send to this hosts nevertheless.
|
- The transceiver is currently connected to a TAP device, i.e. is a virtual
|
||||||
- The transceiver can not respond to ACKs in time. This is kind of an architectural limitation of USRP + GNU Radio since Ethernet and computations on a normal CPU introduce some latency. You can set the number of ACK retries to zero and handle retransmits on higher layers (-> TCP).
|
Ethernet interface. Therefore, we have no WiFi signaling like association
|
||||||
- RTS/CTS is not working for the same reason. You can however just disable this mechanism.
|
requests and hence, the transceiver can not "join" an ad hoc network. You have
|
||||||
- Currently, there is no CSMA/CA mechanism, but this can be implemented on the FPGA.
|
to make some small changes to the kernel in order to convince you WiFi card to
|
||||||
|
send to this hosts nevertheless.
|
||||||
|
- The transceiver can not respond to ACKs in time. This is kind of an
|
||||||
|
architectural limitation of USRP + GNU Radio since Ethernet and computations
|
||||||
|
on a normal CPU introduce some latency. You can set the number of ACK retries
|
||||||
|
to zero and handle retransmits on higher layers (-> TCP).
|
||||||
|
- RTS/CTS is not working for the same reason. You can however just disable this
|
||||||
|
mechanism.
|
||||||
|
- Currently, there is no CSMA/CA mechanism, but this can be implemented on the
|
||||||
|
FPGA.
|
||||||
|
|
||||||
|
|
||||||
# Troubleshooting
|
# Troubleshooting
|
||||||
|
|
||||||
- Please check compile and installation logs. They might contain interesting information.
|
- Please check compile and installation logs. They might contain interesting
|
||||||
|
information.
|
||||||
- Did you calibrate your daughterboard?
|
- Did you calibrate your daughterboard?
|
||||||
- Did you run volk_profile?
|
- Did you run volk_profile?
|
||||||
- Did you try different gain settings?
|
- Did you try different gain settings?
|
||||||
- Did you close the case of the devices?
|
- Did you close the case of the devices?
|
||||||
- Did you try real-time priority?
|
- Did you try real-time priority?
|
||||||
- Did you compile GNU Radio and gr-ieee802-11 in release mode?
|
- Did you compile GNU Radio and gr-ieee802-11 in release mode?
|
||||||
- If you see warnings that ```blocks_ctrlport_monitor_performance``` is missing that means that you installed GNU Radio without control port or performance counters. These blocks allow you to monitor the performance of the transceiver while it is running, but are not required. You can just delete them from the flow graph.
|
- If you see warnings that ```blocks_ctrlport_monitor_performance``` is missing
|
||||||
|
that means that you installed GNU Radio without control port or performance
|
||||||
|
counters. These blocks allow you to monitor the performance of the transceiver
|
||||||
|
while it is running, but are not required. You can just delete them from the
|
||||||
|
flow graph.
|
||||||
- The message
|
- The message
|
||||||
|
|
||||||
You must now use ifconfig to set its IP address. E.g.,
|
You must now use ifconfig to set its IP address. E.g.,
|
||||||
$ sudo ifconfig tap0 192.168.200.1
|
$ sudo ifconfig tap0 192.168.200.1
|
||||||
|
|
||||||
is normal and is output by the TUN/Tap Block during startup. The configuration of the TUN/TAP interface is handled by the scripts in the ```apps``` folder.
|
is normal and is output by the TUN/Tap Block during startup. The configuration
|
||||||
- Did you try to tune the RF frequency out of the band of interest (i.e. used the LO offset menu of the flow graphs)?
|
of the TUN/TAP interface is handled by the scripts in the ```apps``` folder.
|
||||||
- If 'D's appear, it might be related to your Ethernet card. Assert that you made the sysconf changes recommended by Ettus. Did you try to connect you PC directly to the USRP without a switch in between?
|
- Did you try to tune the RF frequency out of the band of interest (i.e. used
|
||||||
|
the LO offset menu of the flow graphs)?
|
||||||
|
- If 'D's appear, it might be related to your Ethernet card. Assert that you
|
||||||
# Asking for help
|
made the sysconf changes recommended by Ettus. Did you try to connect you PC
|
||||||
|
directly to the USRP without a switch in between?
|
||||||
In order to help you it is crucial that you provide enough information about what is going wrong and what you are actually trying to do. So if you write me please include at least the following
|
|
||||||
|
|
||||||
- OS (Ubuntu, OSX...)
|
|
||||||
- hardware (SDR and daughterboard)
|
|
||||||
- GNU Radio version
|
|
||||||
- What are you trying to do
|
|
||||||
- What is you setup, i.e. are you transmitting between SDRs or with WiFi cards.
|
|
||||||
- Bandwidth and frequency
|
|
||||||
- What did you already do to debug?
|
|
||||||
- Where exactly does it break, i.e. is frame detection working? Is the signal field decoded correctly?).
|
|
||||||
|
|
||||||
|
|
||||||
# Further information
|
# Further information
|
||||||
|
|
||||||
For further information please checkout our project page
|
For further information please checkout our project page
|
||||||
[http://www.ccs-labs.org/projects/wime/](http://www.ccs-labs.org/projects/wime/)
|
[https://www.wime-project.net](https://www.wime-project.net)
|
||||||
|
|||||||
Reference in New Issue
Block a user