错误信息:
gr::vmcircbuf_sysv_shm: shmget(1): 无效的参数
gr::vmcircbuf_sysv_shm: shmget(1): 无效的参数
gr::vmcircbuf_sysv_shm: shmget(1): 无效的参数
gr::buffer::allocate_buffer: failed to allocate buffer of size 30728 KB
gr::vmcircbuf_sysv_shm: shmget(1): 无效的参数
gr::vmcircbuf_sysv_shm: shmget(1): 无效的参数
gr::vmcircbuf_sysv_shm: shmget(1): 无效的参数
gr::buffer::allocate_buffer: failed to allocate buffer of size 30728 KB
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
参考解决方案:
首先在命令行中执行:
sysctl kernel.shmmax,来查看系统的共享缓存大小,
如果过小的话,执行:
sudo sysctl -w kernel.shmmax=2147483648
来增大系统的共享缓存
参考:https://www.ruby-forum.com/topic/4418749#new
完整错误信息:
Traceback (most recent call last):
File "/home/abing/pro/test_ca.py", line 17, in
import lte_sat
File "/usr/local/lib/python2.7/dist-packages/lte_sat/__init__.py", line 45, in
from lte_sat_swig import *
File "/usr/local/lib/python2.7/dist-packages/lte_sat/lte_sat_swig.py", line 26, in
_lte_sat_swig = swig_import_helper()
File "/usr/local/lib/python2.7/dist-packages/lte_sat/lte_sat_swig.py", line 22, in swig_import_helper
_mod = imp.load_module('_lte_sat_swig', fp, pathname, description)
ImportError: /usr/local/lib/libgnuradio-lte_sat.so: undefined symbol: fftwf_execute
可能的错误原因:
我这里碰到的错误时我自己写的、并不是用gr_modtool工具添加的,头文件在include/目录下,c/c++文件在lib/目录下,同时在各自目录下的CmakeLists.txt中添加相应的文件名以便于make安装,原本以为这样就可以执行,其实不然,还需要在swig/目录下在**_swig.i文件中包含include目录下的头文件名,用于wrap C 程序到Python中。
还有,检查总目录下的CmakeLists.txt文件中是否有:find_package(FFTW3f) ,如果没有,那么在make的过程中虽然不会报错,但编译并没有连接到fftw库,需要添加上,这一句尤为重要。
完整错误信息:
sched:
than we can provide.
ninput_items_required = 20000
max_possible_items_available = 10239
If this is a filter, consider reducing the number of taps.
错误原因:
自定义模块的输入与输出之间比例过大,但是并没有通知top_block或者相关的调度模块,关于输入或者输出一端所需数据量过大,因此系统按照默认配置的值分配的输入与输出buffer不能满足要求,如上面提示的,系统提供的最大输入缓存为10239,而实际所需的为20000,必然出现错误.
解决办法:
GNURadio的top_block提供了接口函数:
void set_relative_rate(double rate)
可以调用设置,之后就可解决这个问题.完整错误信息:
libgnuradio-lte_sat.so: undefined reference to `gr::uhd::usrp_sink::make(uhd::device_addr_t const&, uhd::stream_args_t const&)'
libgnuradio-lte_sat.so: undefined reference to `uhd::time_spec_t::operator-=(uhd::time_spec_t const&)'
libgnuradio-lte_sat.so: undefined reference to `uhd::time_spec_t::time_spec_t(double)'
libgnuradio-lte_sat.so: undefined reference to `uhd::time_spec_t::get_system_time()'
libgnuradio-lte_sat.so: undefined reference to `uhd::time_spec_t::time_spec_t(long, double)'
libgnuradio-lte_sat.so: undefined reference to `uhd::device_addr_t::device_addr_t(std::basic_string
错误原因:
这是连接(link)错误,首先能说明,头文件包含正确,因为已经能够完成编译,但是在链接(link)过程中没有找到相应的动态库,就是libuhd.so和libgnuradio-uhd.so,可能的原因有两个:
1)uhd或者gnuradio安装路径不是默认的,即其库文件没有在/usr/local/lib/目录下;
2)自己定义的功能模块的CMakelists.txt中没有指定连接到相应的库;
解决办法:
对于原因1),要么手动修改路径,要么重新安装。
对于2),要手动修改CMakelists.txt,在/lib/目录下的修改为:
include_directories(
${Boost_INCLUDE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
${GR_UHD_INCLUDE_DIRS}
${GNURADIO_RUNTIME_INCLUDE_DIRS}
${UHD_INCLUDE_DIRS}
)
link_directories(
${UHD_LIBRARY_DIRS}
${GR_UHD_LIBRARY_DIRS}
)
对于外面总的CMakelists.txt,
set(GR_REQUIRED_COMPONENTS RUNTIME FILTER UHD)
find_package(UHD)
完整错误信息:
File "/usr/local/lib/python2.7/dist-packages/gnuradio/uhd/__init__.py", line 116, in constructor_interceptor
return old_constructor(*args)
File "/usr/local/lib/python2.7/dist-packages/gnuradio/uhd/uhd_swig.py", line 2895, in usrp_sink
return _uhd_swig.usrp_sink(*args)
RuntimeError: RuntimeError: fifo ctrl timed out looking for acks
硬件为USRP N210
错误原因:
一般情况下是由于网络传输的丢包造成的;一般使用N210时候会用到千兆网卡,所以主机直接连到USRP不会有问题,而需要通过千兆交换机/路由器来访问USRP的时候一般会出现问题。至少我们用的是这种情况,由于USRP N210数据传输采用UDP协议,而UDP通过交换机时候在大量吞吐量时候难免会丢包,因此产生上述错误。
暂时未能在网上找到这种错误的解决办法,期待大牛能给出答案。
完整错误信息:
Traceback (most recent call last):
File "/home/abing/software/grc_work/new_test.py", line 96, in
tb = new_test()
File "/home/abing/software/grc_work/new_test.py", line 38, in __init__
self.lte_sat_dl_baseband_sync_0 = lte_sat.dl_baseband_sync(0.8)
File "/usr/local/lib/python2.7/dist-packages/lte_sat/lte_sat_swig.py", line 10124, in make
return _lte_sat_swig.dl_baseband_sync_make(*args, **kwargs)
RuntimeError: port does not exist
错误原因:
首先找到了这句错误的打印位置:$/gnuradio-3.7.2.1/gnuradio-runtime/lib/basic_block.cc,函数
void basic_block::message_port_pub(pmt::pmt_t port_id, pmt::pmt_t msg)
执行过程中首先检测所要输出的消息id,就是message_port_register_*函数注册时候的参数,因为在注册时候系统将该string转换成可识别的类型,然后将该string与实际的消息端口一字典(dict)的形式映射到一起,在上面的函数中,首先检测所要发布消息的port_id在映射的字典中是否存在,不存在则说明在此之前的message_port_register_*函数必然出了问题,可以去查。