Notes to get RSP1 working on Linux and macOS using FOSS drivers (2025)

Reference photo

Please use a mainstream Linux distribution like Ubuntu 24.04 LTS (or later) or the latest Raspberry Pi OS.

Using a Raspberry Pi is NOT recommended as it has quite a bit of power supply noise on the USB ports, which reduces the performance of the connected SDR.

On Linux, add the following lines to the /etc/modprobe.d/blacklist.conf file

blacklist sdr_msi3101
blacklist msi001
blacklist msi2500

Execute the following command:

sudo systemctl restart systemd-modules-load.service

Install dependencies:

sudo apt-get install libsoapysdr0.8-dev libsoapysdr0.8 libsoapysdr-dev \
  soapysdr-tools build-essential sox cmake libusb-1.0-0-dev libsox-fmt-all \
  wsjtx pulseaudio-utils git vim fluxbox xterm tightvncserver

NB: Do NOT install the official SDRplay crappy software.

Remove the problematic mirisdr stuff:

sudo dpkg -r soapysdr0.8-module-mirisdr soapysdr0.8-module-all \
  soapysdr0.8-module-mirisdr:amd64

Install the FOSS driver and the interface layer:

mkdir -p ~/repos
cd ~/repos

git clone https://github.com/ericek111/libmirisdr-5.git
cd libmirisdr-5 && cmake . && make -j4 && sudo make install
sudo mkdir -p /usr/local/lib/SoapySDR/modules0.8
sudo cp libmirisdr.so* /usr/local/lib/SoapySDR/modules0.8

cd ~/repos
git clone https://github.com/ericek111/SoapyMiri.git
cd SoapyMiri && cmake . && make -j4 && sudo make install

Set up permissions:

$ lsusb | grep SDR
Bus 001 Device 002: ID 1df7:2500 SDRplay RSP1

$ sudo vim /etc/udev/rules.d/66-mirics.rules
SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="1df7", \
  ATTRS{idProduct}=="2500", MODE="666", GROUP="plugdev", ENV{MTP_NO_PROBE}="1"
sudo udevadm control --reload-rules && sudo udevadm trigger

(Re)-connect the RSP1 SDR to the computer, and then execute the following command:

SoapySDRUtil --probe

See if the SDR is visible now.

You are done! You can run Gqrx SDR and it should see the RSP1 SDR now.

macOS Sequoia

Execute the following steps:

brew install soapysdr
mkdir -p ~/repos
cd ~/repos

git clone https://github.com/ericek111/libmirisdr-5.git
cd libmirisdr-5 && cmake . && make -j4 && sudo make install
sudo mkdir -p /opt/homebrew/lib/SoapySDR/modules0.8
sudo cp libmirisdr.4.*  /opt/homebrew/lib/SoapySDR/modules0.8

cd ~/repos
git clone https://github.com/ericek111/SoapyMiri.git
cd SoapyMiri && cmake . && make -j4 && sudo make install

Usage

SoapySDRUtil --probe
pactl load-module module-null-sink sink_name=Virtual0
~/repos/libmirisdr-5/src/miri_fm -e 2 -g 7 -f 28074000 -M usb \
  -w 8000000 | play -t raw -r24k -es -b 16 -c 1 -V1 - lowpass 3k

On macOS (at least), the -e 2 helps a lot with USB stability! With -e 2 things are working smoothly in Jan-2025 on macOS and Linux!

Setup Headless Hopping Skimmer

$ vim  ~/.asoundrc
pcm.!default {
        type hw
        card 2
}

ctl.!default {
        type hw
        card 2
}

On RPi systems, set dtparam=audio=off in /boot/firmware/config.txt file.

pi@radio:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: vc4hdmi0 [vc4-hdmi-0], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: vc4hdmi1 [vc4-hdmi-1], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
  Subdevices: 7/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 2: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
...

Add the following lines to /etc/rc.local file:

pi@radio:~$ cat /etc/rc.local
#!/bin/bash

sudo modprobe snd-aloop enable=1,1,1 index=1,2,3

sudo -H -u pi /usr/bin/tightvncserver &

sudo -H -u pi bash -c "cd ~/repos/libmirisdr-5/src && ~/repos/libmirisdr-5/src/miri_fm -e 2 -g 7 -f 28074000 -M usb -w 8000000 | play -t raw -r24k -es -b 16 -c 1 -V1 - lowpass 3k &"
chmod +x /etc/rc.local
$ cat ~/.vnc/xstartup
#!/bin/sh

xrdb "$HOME/.Xresources"
fluxbox &
xterm &
xsetroot -solid grey
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession

Set up the VNC password (once):

vncpasswd

In WSJT-X do the following:

File > Settings > Audio, Input Set to "plughw:CARD=Loopback,DEV=1", "Left"
File > Settings > Audio, Output Set to "plughw:CARD=Loopback1,DEV=0", "Both"

These WSJT-X notes are borrowed from https://github.com/afarhan/sbitx/blob/main/wsjtx_notes.txt project.

References