在网络搜索使用uhd-dpdk的人很少,特总结一些自己使用点滴,希望有用!

一、UHD驱动安装(ubuntu 18.04)
官方指导:http://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux
严格按照文档一步步来,这里不详细说明。
sudo apt-get update
sudo apt-get -y install git swig cmake doxygen build-essential libboost-all-dev libtool libusb-1.0-0 libusb-1.0-0-dev libudev-dev libncurses5-dev libfftw3-bin libfftw3-dev libfftw3-doc libcppunit-1.14-0 libcppunit-dev libcppunit-doc ncurses-bin cpufrequtils python-numpy python-numpy-doc python-numpy-dbg python-scipy python-docutils qt4-bin-dbg qt4-default qt4-doc libqt4-dev libqt4-dev-bin python-qt4 python-qt4-dbg python-qt4-dev python-qt4-doc python-qt4-doc libqwt6abi1 libfftw3-bin libfftw3-dev libfftw3-doc ncurses-bin libncurses5 libncurses5-dev libncurses5-dbg libfontconfig1-dev libxrender-dev libpulse-dev swig g++ automake autoconf libtool python-dev libfftw3-dev libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77 libsdl1.2-dev python-wxgtk3.0 git libqt4-dev python-numpy ccache python-opengl libgsl-dev python-cheetah python-mako python-lxml doxygen qt4-default qt4-dev-tools libusb-1.0-0-dev libqwtplot3d-qt5-dev pyqt4-dev-tools python-qwt5-qt4 cmake git wget libxi-dev gtk2-engines-pixbuf r-base-dev python-tk liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libzmq3-dev libzmq5 python-requests python-sphinx libcomedi-dev python-zmq libqwt-dev libqwt6abi1 python-six libgps-dev libgps23 gpsd gpsd-clients python-gps python-setuptools
   cd $HOME
   mkdir workarea-uhd
   cd workarea-uhd
    git clone https://github.com/EttusResearch/uhd
   cd uhd
   git tag -l
   git checkout v3.14.1.1
    cd host
   mkdir build
   cd build
    cmake ../
    make
    sudo make test
    sudo make install
    sudo ldconfig
    $HOME/.bashrc file: 
   export LD_LIBRARY_PATH=/usr/local/lib
   测试:uhd_find_devices uhd_usrp_probe
   $ sudo uhd_images_downloader或者从已有系统中拷贝:
 从本地拷至远程
 scp -r /usr/local/share/uhd/images seu@192.168.1.73:/usr/local/share/uhd
 从远程拷至本地
 scp -r root@192.168.1.73:/usr/local/share/uhd/images .
  scp -r root@192.168.1.71:/home/workarea-uhd/uhd .
 解决问题:EnvironmentError: OSError: error in pthread_setschedparam
   sudo groupadd usrp
   sudo usermod -aG usrp $USER
Then add the line below to end of the file /etc/security/limits.conf: 
   @usrp - rtprio  99

二、关于n310的使用和连接方法:
    官方文档:https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide
    更详细的USRP N310 配置教程:https://blog.csdn.net/qq_34998254/article/details/88399065
    通过ssh登陆n310的arm系统:
    将网线插到n310的RJ45端口(上面的1G网线口),另一端可以直接接到一个路由器或者交换机上;
    插上n310里配件带的串口Serial到一个pc上,执行ip a可以看到分配给n310的地址;下次直接ssh登陆此ip即可;如果是设备环境都是已经配置好的,可以使用uhd_find_devices直接查看下ip地址。
    如果没有路由器或交换机可用,可以接到服务器的网口上,配置服务器此端口地址为:192.168.2.254,然后执行:
    dnsmasq -i enp7s0f1 --dhcp-range=192.168.2.151,192.168.2.254 --except-interface=lo --bind-dynamic --no-daemon
    如果n310本来用着好好的,突然发现不了设备了,再执行以下上面的命令。
    n310 RJ45 1G端口ssh,如果没有具有dhcp功能的路由器或交换机,可以使用linux server的dnsmasq模拟一个。
    将n310的 RJ45端口连到服务器的enp7s0f1网卡,配置enp7s0f1端口如下:注:此端口的ip地址和要分配给n310的地址需要同一网段
    vim /etc/network/interfaces
    auto enp7s0f1
    iface enp7s0f1 inet static
    address 192.168.2.254
    netmask 255.255.255.0
    MTU: 8000-----------一定要设为8000
    ifup enp7s0f1
    dnsmasq -i enp7s0f1 --dhcp-range=192.168.2.151,192.168.2.254 --except-interface=lo --bind-dynamic --no-daemon
    通过uhd_find_devices可以看到分配给n310的ip地址
    --------------------------------------------------
    -- UHD Device 1
    --------------------------------------------------
    Device Address:
        serial: 316645F
        claimed: False
        mgmt_addr: 192.168.2.242
        product: n310
        reachable: No
        type: n3xx
    
    采样模式:
    1Gb Streaming SFP Port 0:将子带光口转电口适配器插到SFP0上,用网线同服务器相连,设置服务器对应端口地址为192.168.10.1,mtu设置为1500(usrp n310的镜像使用HG)
    10Gb Streaming SFP Port 1:使用光纤将sfp1和服务器相连,设置服务器对应端口地址为192.168.20.1,mtu设置为8000(usrp n310的镜像使用HG或XG)
    Dual 10Gb Streaming SFP Ports 0/1:使用光纤将sfp1 sfp0和服务器相连,mtu设置为8000(usrp n310的镜像使用XG)
    服务端mtu的修改方法见环境搭建篇1;
    usrp n310 mtu设置位置见下,重启生效,将生成的sfp0.network~转换文件及时删除。重启后要ifconfig确认下。
     # ls /etc/systemd/network/
     eth0.network  sfp0.network  sfp1.network
         
    如果是使用dpdk的话:mtu要设置为9000.
     
    fpga镜像加载:
    uhd_image_loader --args "type=n3xx,addr=192.168.2.230,fpga=XG"
    uhd_image_loader --args "type=n3xx,fpga=HG"
    
   
三、srslte安装:
 参考指导:https://blog.csdn.net/xrh003/article/details/79461114
 ubuntu 18.04依赖库:
 sudo apt-get install cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libboost-thread-dev libconfig++-dev libsctp-dev  
 sudo apt-get install libboost-system-dev libboost-test-dev libboost-thread-dev libqwt-dev libqt4-dev  
 
    git clone https://github.com/suttonpd/srsgui.git  
    cd srsGUI  
    mkdir build  
    cd build  
    cmake ../  
    make  
    sudo make install  
    sudo ldconfig

git clone https://github.com/srsLTE/srsLTE  
    mkdir build  
    cd build  
    cmake ../  
    make  
    make test  
    sudo make install  
    sudo ldconfig

运行:
    sudo srsepc epc.conf  
    sudo srsenb enb.conf  
    sudo srsue ue.conf
    可以使用srslte/srsLTE/build/lib/examples目录下的例子进行一些测试

四:dpdk的环境搭建
参考文档:
https://files.ettus.com/manual/page_dpdk.html
https://doc.dpdk.org/guides-17.11/linux_gsg/linux_drivers.html#binding-and-unbinding-network-ports-to-from-the-kernel-modules 
网上也有很多dpdk的配置文档,可以作为补充指导http://www.pianshen.com/article/635691779/

1、18.04可以使用apt install dpdk dpdk-dev直接安装,不需要下代码自己编译。
2、先使用ifconfig记录下两个光口的MAC地址,然后将两个端口down掉ifdown ens3f0
73:
ens3f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 8000
        inet 192.168.20.1  netmask 255.255.255.0  broadcast 192.168.20.255
        inet6 fe80::5639:dfff:fed3:f416  prefixlen 64  scopeid 0x20<link>
        ether 54:39:df:d3:f4:16  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6  bytes 516 (516.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens3f1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 8000
        inet 192.168.10.1  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::5639:dfff:fed3:f417  prefixlen 64  scopeid 0x20<link>
        ether 54:39:df:d3:f4:17  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5  bytes 426 (426.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        
        start tx_first (""|10)
  
  71:
  ens3f0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 74:a0:63:f2:96:e7  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens3f1: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 74:a0:63:f2:96:e8  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
74

3、dpdk环境配置
显示是否支持VT-d或VT-d是否成功打开
dmesg | grep -e DMAR -e IOMMU
若出现:IOMMU not found 或 不知如何在BIOS中enable00 VX-d,可参考博客:http://www.cnblogs.com/vancasola/p/9360837.html
检查 VT-d 在kernel中是否enabled, 运行:
$ cat /proc/cmdline | grep iommu=pt
$ cat /proc/cmdline | grep intel_iommu=on
如果没有显示,需要进行如下配置:
此步修改系统文件,容易误操作导致系统错误,修改前注意备份!
进入配置文件:
nano /etc/default/grub
GRUB_CMDLINE_LINUX="quiet splash iommu=pt intel_iommu=on"//添加配置信息
更新配置信息并重启
default_hugepagesz=1G hugepagesz=1G hugepages=8
10.设置大内存页,设置以后就可以不必每次运行程序的时候都执行setup.sh进行hugepage设置了。
查看cpu是否支持1G大内存页:
cat /proc/cpuinfo | grep pdpe1gb
如果有显示,则支持1G大内存页。
默认支持2M内存页,执行下面命令
cat /proc/cpuinfo |grep pse
如果有显示,则支持2M内存页

隔离分配给dpdk的cpu:
GRUB_CMDLINE_LINUX="isolcpus=1,3"
验证方法:(1)cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-4.15.0-66-lowlatency root=UUID=ec9d0961-3c21-43c3-904d-91c4f0e1fde4 ro iommu=pt intel_iommu=on default_hugepagesz=1G hugepagesz=1G hugepages=8 isolcpus=0,1,2,3,4 quiet intel_pstate=disable
(2)可以查看当前进程的cpu affinity: $taskset -cp $$ 是否有已经被隔离的cpu
sudo grub-mkconfig -o /boot/grub/grub.cfg 
sudo reboot 
sudo ./testpmd -l 0-3 -n 4 -- -i --portmask=0x3 --nb-cores=2

端口所在的socket要和指定的core所在的socket相同:
查看端口所在的socket:
# List all the NICs with PCI address and device IDs.
lspci -nn | grep Eth
#Check the PCI device related numa node id:
cat /sys/bus/pci/devices/0000\:xx\:00.x/numa_node

4、绑定端口:
通过 dpdk-devbind -s查看端口状态 
dpdk-devbind -b vfio-pci ens3f0
dpdk-devbind -b vfio-pci ens3f1
去绑定可以使用:
dpdk-devbind -b ixgbe 0000:01:00.1
dpdk-devbind -b ixgbe 0000:01:00.0
n310的端口mtu要设置为9000.
5.搞完之后建议按照下面网址检查一遍配置:
https://doc.dpdk.org/guides-17.11/linux_gsg/nic_perf_intel_platform.html#

6.新建一个uhd的配置文件如下:
system:/etc/uhd/uhd.conf
user:/root/.uhd/uhd.conf
将https://files.ettus.com/manual/page_dpdk.html给出的配置拷贝到文件中,修改上面的mac地址为实际mac地址。

uhd_dpdk_eal_init
查看dpdk的配置选项,可根据这个函数设置到uhd.conf文件中

可以修改vim /etc/dpdk/interfaces 文件加入对应的端口,就不用每次重启都重新绑端口了
pci     0000:01:00.1    vfio-pci
pci     0000:01:00:0    vfio-pci
有时候重启帮端口可能会不成功,最后使用dpdk-devbind -s确认下

7、修改cpu的工作频率
https://www.cnblogs.com/276815076/p/5434295.html
修改为performance,以期最佳性能。

五:关于gnuradio:
比较好的指导文档:
Gnuradio培训:http://ettus.com.cn/peixun/27/

六:使用过程中问题总结:
1、本来环境是ok的,突然找不到设备,再执行下:
dnsmasq -i enp7s0f1 --dhcp-range=192.168.2.151,192.168.2.254 --except-interface=lo --bind-dynamic --no-daemon

2、报错:RuntimeError: RuntimeError: Error during RPC call to `claim'. Error message: Someone tried to claim this device again
https://www.mail-archive.com/usrp-users@lists.ettus.com/msg07599.html
登陆到n310的arm,执行systemctl restart usrp-hwd.service
然后重新下载镜像ok
uhd_image_loader --args "type=n3xx,fpga=XG"
uhd_image_loader --args "type=n3xx,fpga=HG"
uhd_image_loader --args "type=n3xx,addr=192.168.2.230,fpga=XG"

3、修改linux为performance后,服务器重启后发现cpufreq-info查看发现不是此模式,需要将cpufreq重启一下
/etc/init.d/cpufrequtils restart

usrp n310测试总结---环境搭建篇2-uhd-dpdk干货相关推荐

  1. USRP e312 RFnoc环境搭建流程

    USRP e312 RFnoc环境搭建流程 rfnoc模块是gnuradio用来调用烧写在usrp里面的FPGA模块 目录 一. 安装Ubuntu系统 二. 安装uhd+gnuradio+gr-ett ...

  2. esp32 linux内核,【小狂系列】跟着小狂玩ESP32之编译环境搭建篇

    本帖最后由 3guoyangyang7 于 2016-11-3 18:41 编辑 趁热要打铁,昨天发了ESP32的预告贴,今天小狂就带大家刷一刷ESP32的编译环境搭建.怎么说的,ESP32可以在多平 ...

  3. 树莓派4B爽上流安装python3的OpenCV(人脸检测识别—门禁“环境搭建篇”)

    树莓派4B安装OpenCV3.4.0人脸检测识别-门禁"环境搭建篇" 前言 一.准备工作 PC端软件 二.搭建树莓派环境 拓展TF内存卡 Tips:换源(python软件源) 修改 ...

  4. CRAB快速开发平台学习教程《一》:环境搭建篇

    智能时代,软硬更新,实在太快.从最开始的只有少量外设资源的8051,到现在资源丰富性能超群的ARM,才经历短短十几二十年功夫.软件的功能也越来越多,代码量也越来越庞大,简易而快速开发的方式,貌似离我们 ...

  5. 安装目录opencv for android 教程(环境搭建篇)

    这几周朋友几篇文章介绍了改安装目录的文章. 关联文章的地址 最近android开发异常炽热,随着手机性能越来越高,图像处程序也越来越重要, 由于opencv for android 网上教程大多为英文 ...

  6. 微信小程序电商实战—环境搭建篇

    本篇文章已同步发布于个人博客 https://qiucode.cn/article/90 可体验 秋码淘好货 微信小程序哦! 1.开发工具下载 可到微信公众号-小程序 下载 https://mp.we ...

  7. 我的Go+语言初体验——环境搭建篇(直男程序员的真实体验)

    目录 前言 官网体验 环境搭建 总结 前言 当我第一眼看到这个活动的时候,吸引我的不是所谓的奖励,而是活动文章中的"填补了国人开发者在数据科学领域的空白",很有志气的一句话,我喜欢 ...

  8. Hexo+github搭建个人博客-环境搭建篇

    一.概述 我们使用Hexo + Github搭建个人博客,我们自然不能错过,事不宜迟,我们现在立马来认识一下,他们究竟是何方神圣吧. 1.1 关于 GitHub 1.1.1 Github 接触编程一段 ...

  9. python是一种蟒蛇使用的语言_python树莓派系列教程一:初识大蟒蛇 python(python语言环境搭建篇)...

    作者:剑若游龙微信公众号<科学是什么东东>,欢迎关注 作者微信号,欢迎与我交流 网络爬虫,人工智能,机器学习,如何让计算机理解能力更强,如 何让你手中的机器人更人性化,更聪明? 不管是大人 ...

  10. OpenHarmony-鸿蒙 华为智能家居IoT设备开发-环境搭建篇 一键部署开发环境

    轻量与小型系统入门概述 简介 OpenHarmony轻量和小型系统适用于内存较小的IOT设备(参考内存≥128KiB).通过本文,开发者可以快速熟悉OpenHarmony轻量和小型系统的环境搭建.编译 ...

最新文章

  1. 04.ARP:地址解析协议
  2. Express中app.use中间件的用法-匹配所有的请求方式
  3. C#颜色和名称样式对照表【转载】
  4. C语言项目:扫雷大战精简版
  5. 第二十八期:Java线程池的四种用法与使用场景
  6. JS的手写TRIM函数
  7. python 笔试题 英方_4000字转型数据分析师笔试面试经验分享
  8. 01 | 从神经元说起:数学篇
  9. 计算机组成原理平均cpi怎么算_2020考研 | 计算机统考408院校盘点,408考试内容难易分析...
  10. 微导管行业调研报告 - 市场现状分析与发展前景预测
  11. mib浏览器_大众汽车的第二代MIB信息娱乐系统图解
  12. TextView显示人民币符号¥
  13. SQL文件切割工具、大文件操作工具
  14. 计算机网络自顶向下第二章应用层笔记
  15. IEC60870-5-101基本远动任务通信协议测试方法
  16. 电子方面相关术语英中对照表
  17. Java程序员的职业生涯规划建议
  18. ListT的各种排序方法
  19. python return返回值格式化_day11__函数名的应用,python新特f-strings格式化输出、迭代器...
  20. vscode分支合并

热门文章

  1. 【190222】VC++ 社区视频监控系统源代码
  2. solidworks齿轮编辑_如何应用solidworks进行齿轮工程图绘制
  3. cpu之RegDst_Ins
  4. 解决IDEA打断点后,执行代码不会停在断点问题
  5. python画狗的代码_简单的Python代码能狗实现哪些丧心病狂的功能
  6. 计算机硬件及装机视频,超详细图文 视频电脑组装教程,装机之家手把手教你组装一台电脑(9)...
  7. jeecg-boot环境搭建
  8. 跨境公路货运调研分析-市场规模、市场份额、市场定位、产品类型以及发展规划
  9. Pyramidal Convolution: Rethinking Convolutional Neural Networks for Visual Recognition阅读笔记
  10. 新语法之CORRESPONDING