【本文是转载】GNUradio的安装

声明:本文系转载
原文地址:
http://yrublog.appspot.com/2011/01/16/gnu-radio-installation-trouble-shooting-all-in-one.html

OS: Ubuntu only
我在各种版本的ubuntu上装过各种版本的GNU radio N次,希望能让以后的人调试的时候少装几次。。。
step by step
1.  http://gnuradio.org/redmine/wiki/gnuradio/UbuntuInstall官方的安装步骤,照着装完再说
2. 输入传说中的magic command line 实际上好像是对库中的链接进行操作:
sudo ldconfig
这时安装步骤已经完了,接下来是调试。如何保证GNU radio已经安装正确?三个步骤
3. dial_tone.py GNU radio的hello world程序。在终端输入cd/usr/local/share/gnuradio/examples,然后输入./dial_tone.py执行它。如果安装无误应该可以听到声卡发出beeeeeee的声音。
3.1注意ubuntu的声卡默认是只能一个进程占用的。也就是,当你在听歌的时候运行dial_tone就会报错,显示的是devicebusy之类的。这时候需要先设置声卡让它实现多进程,具体方法来自 http://ubuntuforums.org/showthread.php?t=32063(需)
3.1.1. 安装 libesd-alsa0:
sudo apt-get install libesd-alsa0
3.1.2. 在/etc新建一个配置文件:
sudo gedit /etc/asound.conf
3.1.3 将以下代码加入这个配置文件中:
pcm.card0 {
type hw
card 0
}

pcm.!default {
type plug
slave.pcm "dmixer"

}

pcm.dmixer {
type dmix
ipc_key 1025
slave {
pcm "hw:0,0"
period_time 0
period_size 2048        #1024
buffer_size 32768       #4096
                        #periods 128
rate 48000              #44100
}
bindings {
0 0
1 1
}
}
3.1.4 备份并修改esd配置文件:
sudo mv /etc/esound/esd.conf /etc/esound/esd.conf_backup
sudo gedit /etc/esound/esd.conf
3.1.5 在esd.conf中加入以下代码:
[esd]
auto_spawn=1
spawn_options=-terminate -nobeeps -as 2 -d default
spawn_wait_ms=100
# default options are used in spawned and non-spawned mode
default_options=
3.1.6 打开ubuntu音频配置,修改其中的audio tab的I/O,使其都变成ALSA,如下图:
gstreamer-properties
3.1.7 重启电脑,让配置生效。
3.1.8注意这只是让ALSA实现多进程,也就是说你必须把你其他的软件,比如音乐播放器也调成用ALSA播放。如果不行的话,你运行dial_tone照样报错。 3.1.9 如果你图方便,可以直接把占用声卡的进程杀掉,就可以跑dial_tone了。杀进程代码:
fuser -k /dev/snd/pcmC*
4. 成功运行第三步后,来调试grc,GNUradio的一个图形化界面,全称gnuradio-companion。在终端中任何地方输入gnuradio-companion,不能用缩写grc,因为会和ubuntu下集成的同名程序grc冲突。如果无误应该有以下窗口弹出:
到这里对于GNU radio的测试已经完了,如果你走到这步,恭喜你你的GNUradio已经安装成功了。不过接下来还有一个东西要测试:USRP。我用的USRP2,所以这里只对USRP2的调试作介绍。
5. usrp2_fft.py:这是一个简单的将信号fft后显示的程序。打开终端后在/usr/local/share/gnuradio/examples/usrp2下输入:
sudo usrp2_fft.py
如果能出现以下画面,那整个GNU RADIO+USRP算是安装好了!
如果没有,我们就来慢慢看问题吧。。。
6. USRP问题。我当然只能写出我遇到的问题,与广大遇到相同问题的读者共勉。。。
『无法检测到USRP2?!!ubuntu下的网卡及其他。。。』
这个问题卡了我很久。我各种google各种浏览,卡了足足三天才算是解决问题。我发现无法检测到USRP2这个问题不是在每个电脑上都有,我只在一台笔记本上遇到过,应该是网卡的默认设置问题。下面来说问题:
6.1 问题描述
首先要说明的是,ubuntu下面的网络接口默认名字是ethX,X由0开始递增,看你有几个接口。一般都是只有一个,即eth0。在接下来的描述中我们都假设你的USRP2是插在ethA接口上的,在终端任何地方输入sudo find_usrps -eethA,如果终端显示No USRP2 found,那恭喜你,你的问题和我一样。来看如何解决吧。
6.2 『你插的不是千兆网卡?!』稍微老点儿的电脑都是百兆网卡,所以你一定要确认你的网卡是千兆的。输入命令:
sudo ethtool ethA
终端应该显示如下:
一些小地方可能不一样,但是主要关注第二个选项Supported linkmodes,如果和我一样有1000baseT/Full的话就说明是千兆网卡没错。注意第三个选项,是否支持auto-negotiation,如果支持,即网卡可根据需要自动调整网速。可以将网速设为1000M,通过命令:sudo ethtool -s ethA speed 1000这样就是一枚健全的千兆网卡了。
6.3『我就是千兆的,但是还是检测不到!』我即是第二种情况。这个应该硬件系统本身的设置问题。首先来说find_usrps的机理:其实就是电脑端发个ip包过去,USRP2给个ip包回来,即为检测到。显示的是USRP2的mac地址,对没错,USRP2也有个mac地址。接着,据说网卡有个广播/多播功能,而USRP2即通过这个功能来和电脑通信。如果这个功能是关闭的话,USRP2是无法和电脑通信whatsoever的。所以我们要用下面的命令开启网卡的广播多播功能:
sudo ifconfig ethA promisc up
6.4『广播开开了,还是检测不到。。。』那太不幸了。由于我还没遇到所以无法提供帮助。不过联想到6.3里提到的通信机理,我们可以尝试用wireshark之类的sniffer来分析通信包,看到底是什么问题。这,我下次遇到再说!就这样!

你可能感兴趣的:(技术类)