Portapack应用开发教程(一)简介、编译、烧录及Hello World

之前做LimeSDR的GPS接收实验的时候我用到过Portapack,它可以发射GPS信号:

https://blog.csdn.net/shukebeta008/article/details/103270214

测试KerberosSDR测向功能时,我也使用Portapack来发射一个单音信号:

https://www.bilibili.com/video/av78385598?from=search&seid=9727676114121593493

Portapack体积小巧,虽然电脑+sdr也能发射测试信号,但是对于这类需要经常运动的发射要求,Portapack非常方便,不止如此,它还没有开机过程,也不需要输入命令,再室外使用相当方便。

Portapack本身还有好多功能,比如接收adsb信号,tpms信号,收听AM、FM广播,发射FM信号,扫频等:

https://www.bilibili.com/video/av75970840?from=search&seid=12318126195803131787

其它功能参考:

https://www.rtl-sdr.com/a-review-of-the-hackrf-portapack-with-havok-firmware/

它的原理是直接在hackrf的板载arm芯片上执行信号处理,这样对于一些运算量小的应用,就可以脱离电脑,直接在portapack+hackrf上实现了。

之前用的gridrf版本的固件带gps发射功能,但是它是不开源的,这个固件的其他部分其实都已经很老了,跟不上portapack固件的最新发展,所以打算自己写一个类似的程序。可以看到下面这个最新版本的主界面截图,现在都是方格的可以直接触摸点击了,以前的老版本(也就是gridrf用的版本)的主界面是上一张截图左上角那样一行一行的,不止如此,具体的一些收发模块也在不停更新中。

由于portapack的程序都在hackrf的arm芯片上运行,对于深入理解hackrf板载固件的开发也是有用的。后期我可能还会改造AM解调模块,用它来显示模拟视频,本来的AM解调只是解调音频,但是模拟视频也是AM信号,用AM的幅度值来表示每个像素点的亮度。

portapack固件由两个组织分别开发,一种是硬件设计者自己开发的,作者叫Jared Boone,另一种固件是furrtek开发的havoc固件,功能多很多。

前面说的gridrf版本其实也是在havoc固件上稍作修改得来的,它的这个gps发射功能其实跟havoc固件中的replay功能差不多。只不过replay发射的是采样率500kHz,16位的iq信号,而gps发射需要发射8位iq信号,采样率常用的是2.6MHz(我自己用的是2MHz)。

我们现在要做的相当于要给portapack写一个app。

先访问这个github地址

https://github.com/furrtek/portapack-havoc

这是portapack的项目文件夹,这里面有所有的代码,wiki里还有编译和烧录的步骤,照着步骤做没什么难度。

编译:https://github.com/furrtek/portapack-havoc/wiki/Building-from-source

烧录:https://github.com/furrtek/portapack-havoc/wiki/Flashing

我们要改的代码文件都在firmware下。

在加模块之前,你可以先尝试一下更改某个比较简单的界面上的代码,尝试一下开发流程。

打开如下文件 

/firmware/application/apps/ui_about.hpp

里面有一部分这个代码。 

const credits_t credits[25] = {
		//           012345678901234567890123456789
		{ 60,		"PortaPack|HAVOC",					0 },
		{ 4 * 8,	    "Version " VERSION_STRING,		16 },
		{ 11 * 8,	           "Gurus  J. Boone",		0 },
		{ 18 * 8,	                  "M. Ossmann",		16 },
		{ 11 * 8,	           "HAVOC  Furrtek",		16 },
		{ 7 * 8,	       "POCSAG rx  T. Sailer",		0 },
		{ 18 * 8,	                  "E. Oenal",		16 },
		{ 0 * 8,	"Radiosonde infos  F4GMU",			0 },
		{ 18 * 8,	                  "RS1729",			16 },
		{ 4 * 8,	    "RDS waveform  C. Jacquet", 	16 },
		{ 7 * 8,	       "Xy. infos  cLx", 			16 },
		{ 2 * 8,	  "OOK scan trick  Samy Kamkar",	16 },
		{ 7 * 8,	       "World map  NASA", 			16 },
		{ 0 * 8,	"TouchTunes infos  Notpike",		16 },
		{ 4 * 8,	    "Subaru infos  Tom",			0 },
		{ 18 * 8,	                  "Wimmenhove",		24 },
		{ 6 * 8,	      "Thanks & donators",			16 },
		{ 1 * 8,	 "Rainer Matla     Keld Norman",	0 },
		{ 1 * 8,	 " Giorgio C.         DC1RDB",		0 },
		{ 1 * 8,	 " Sigmounte           Waax",		0 },
		{ 1 * 8, 	" Windyoona         Channels",		0 },
		{ 1 * 8, 	"   F4GEV             Pyr3x",		0 },
		{ 1 * 8,    "  HB3YOE",							24 },
		{ 11 * 8,	            "MMXVIII",				-1 }
	};

这些代码在你打开portapack里的about页面时会滚动显示出来,你可以更改里面的贡献者文字,改成任何你想显示的文字。

改完了以后就可以编译了,参考wiki里的编译和下载步骤:

#编译 先退到这个项目最上层文件夹
mkdir build
cd build
cmake ..
make firmware -j4

#下载
cd /build/firmware
hackrf_spiflash -w portapack-h1-havoc.bin #做这一步之前要把portpack切换为hackrf模式

 下载完毕后,按hackrf上的reset按钮,重新进入portpack,你就可以在About页面看到更改的成果了。

下面是我改的效果,在倒数第二行加了我自己的签名。

附上portapack的软硬件原理参考:

固件结构:https://github.com/sharebrained/portapack-hackrf/wiki/Firmware-Architecture

启动过程:https://github.com/sharebrained/portapack-hackrf/wiki/Boot-Process

硬件:https://github.com/sharebrained/portapack-hackrf/wiki/Hardware

猜你喜欢

转载自blog.csdn.net/shukebeta008/article/details/104303466