经验分享:python3中添加自定义GRC模块的二次开发方法
目前能查到的绝大多数是python2和旧版本GnuRadio下的,与python3和新版GnuRadio(3.8.X以后的)下有很大差异,参考价值有限。
经过本人琢磨,总算用树莓派(DeBain系统,UBUNTU也一样)实现了在python3和GnuRadio3.8.X中添加自定义GRC模块集合的二次开发方法!
前提工具:需要安装python3和新版GnuRadio3.8.X,用到cmake、gr_modtool、python3等命令。
一、首先,用gr_modtool生成自定义GRC模块的框架代码
不知道怎么样时,用以下命令查询:
gr_modtool newmod --help
gr_modtool add --help
1. 用gr_modtool命令新建自定义模块的集合,生成对应文件夹: gr_modtool newmod -d MyModel
2. 用cd命令进入文件夹: cd MyModel\gr-MyModel\
3. 用gr_modtool命令在该文件夹内新建1个模块(需要指定模块类型和名称,参数),例如: gr_modtool add -t sync ReadMyRfData
4. 可以再建其他模块,例如:gr_modtool add -t sync SendMyRfData
注意. 添加模块时,可以选择生成python还是C,这里用的python
二、基于某个python编程环境,改写自定义GRC模块的代码,编译
进入模块的文件夹,查看自动生成的py程序源文件,修改输入、输出接口和处理函数代码(按GRC的模块要求写)
完成后用python3中的compileall编译相关模块的py程序
python3 -m compileall -b /home/pi/MyModel/gr-MyModel/python/ 编译所有文件
python3 -m compileall -b /home/pi/MyModel/gr-MyModel/python/__init__.py
python3 -m compileall -b /home/pi/MyModel/gr-MyModel/python/ReadMyRfData.py
python3 -m compileall -b /home/pi/MyModel/gr-MyModel/python/SendMyRfData.py
三、用cmake命令生成安装脚本cmake_install.cmake,确保生成的安装脚本正确。
sudo cmake -S /home/pi/MyModel/gr-MyModel -B /home/pi/MyModel/gr-MyModel
在产生的安装脚本文件python/cmake_install.cmake中,删除涉及安装*.pyo文件(用不上,不然出错)的所有文本行。
用命令: sudo nano /home/pi/MyModel/gr-MyModel/python/cmake_install.cmake 删文本行
四、然后用 sudo cmake --install /home/pi/MyModel/gr-MyModel/ 拷贝安装编译好的模块程序到GRC和系统库目录下,结果存入install_manifest.txt内,内容如下:
/usr/local/lib/cmake/MyModel/MyModelConfig.cmake
/usr/local/include/MyModel/api.h
/usr/local/lib/python3/dist-packages/MyModel/__init__.py
/usr/local/lib/python3/dist-packages/MyModel/SendMyRfData.py
/usr/local/lib/python3/dist-packages/MyModel/ReadMyRfData.py
/usr/local/lib/python3/dist-packages/MyModel/__init__.pyc
/usr/local/lib/python3/dist-packages/MyModel/SendMyRfData.pyc
/usr/local/lib/python3/dist-packages/MyModel/ReadMyRfData.pyc
/usr/local/share/gnuradio/grc/blocks/MyModel_SendMyRfData.block.yml
/usr/local/share/gnuradio/grc/blocks/MyModel_ReadMyRfData.block.yml
最后,应该可以在GRC下看到自己模块集合下对应的自定义模块了。如果看不到,检查是否模块对应的yml文件(在/home/pi/MyModel/gr-MyModel/grc)中的定义是否正确。没问题,就可以像使用GRC自带模块一样,使用自己的模块和二次开发程序了。
其实,最难的是编写自己的SDR程序模块,毕竟Python只在运行到某一步时才能发现错误,调试太不容易了!!