LimeXTRX and srsRAN

Help Needed: Issues with srsRAN SoapySDR Integration

Hardware:

  • Primary SDR: LimeXTRX (experiencing issues)
  • Alternative SDR: LimeSDR mini (working correctly)

Software Environment

  • srsRAN version: 23.04
  • SoapySDR version: 0.8.1 (Installed using APT)
  • Operating System: Raspberry Pi OS Debian GNU/Linux 12 (bookworm)
  • SDR Hardware: LimeXTRX

Problem Description

I’ve successfully integrated the LimeSDR mini with srsRAN, but I’m encountering persistent initialization failures when attempting to use the LimeXTRX through SoapySDR with the LimeSuiteNG plugin. Both receiving and transmitting functionality work flawlessly with GNURADIO, and srsRAN compiles without errors, suggesting the issue is specific to the srsRAN-SoapySDR-LimeXTRX integration path.

Symptoms

When launching the srsRAN eNodeB application with LimeXTRX, I encounter the following issues:

$ ./enb_lime.sh
Active RF plugins: libsrsran_rf_uhd.so libsrsran_rf_soapy.so libsrsran_rf_zmq.so
Inactive RF plugins:
---  Software Radio Systems LTE eNodeB  ---

Reading configuration file ./config/enb_lime.conf...
WARNING: cpu0 scaling governor is not set to performance mode. Realtime processing could be compromised. Consider setting it to performance mode before running the application.

Built in Release mode using commit ec29b0c1f on branch master.

Opening 1 channels in RF device=soapy with args=type=lime,rxant=LNAH,txant=BAND1,fmt=CS16
Supported RF device list: UHD soapy zmq file
Soapy has found device #0: addr=/dev/limepcie0, driver=limesuiteng, label=LimeSDR XTRX [PCIe] e5dd893, media=PCIe, name=LimeSDR XTRX, serial=000000000e5dd893,
Selecting Soapy device: 0
[INFO] Make connection: 'LimeSDR XTRX [PCIe] e5dd893'
[INFO] Device name: LimeSDR XTRX
[INFO] Reference: 26 MHz
[INFO] LMS7002M register cache: Disabled
Setting up Rx stream with 1 channel(s)
Setting up Tx stream with 1 channel(s)
[ERROR] Failed DMA Enable continuous ioctl. errno(16) Device or resource busy
Tx setupStream fail: Soapy_limesuiteng::setupStream() failed: Failed DMA Enable continuous ioctl. errno(16) Device or resource busy
Error initializing radio.

Configuration

I’m using the following script to start the eNodeB:

#!/bin/bash

sudo ./build/srsenb/src/srsenb ./config/enb_lime.conf \
--enb_files.sib_config=./config/sib.conf \
--enb_files.rr_config=./config/rr.conf \
--enb_files.rb_config=./config/rb.conf \
--rf.device_name=soapy \
--rf.device_args="type=lime,rxant=LNAH,txant=BAND1,driver=limesuiteng" \
--rf.tx_gain=20 \
--rf.rx_gain=20

Code Analysis

Looking at the plugin implementation, I suspect the issue might be related to the stream handling in the SoapySDR interface. The following section from the code is particularly relevant:

handler->rxStream = SoapySDRDevice_setupStream(
  handler->device, SOAPY_SDR_RX, SOAPY_SDR_CF32, 
  rx_channels, handler->num_rx_channels, &stream_args);

Debugging Steps Attempted

  1. SoapySDRUtil verification: Confirmed my SDR is properly detected
$ SoapySDRUtil --probe="driver=limesuiteng"
######################################################
##     Soapy SDR -- the SDR abstraction library     ##
######################################################

Probe device driver=limesuiteng

[INFO] Make connection: 'LimeSDR XTRX [PCIe] e5dd893'
[INFO] Device name: LimeSDR XTRX
[INFO] Reference: 26 MHz
[INFO] LMS7002M register cache: Disabled

----------------------------------------------------
-- Device identification
----------------------------------------------------
  driver=limesuiteng
  hardware=LimeSDR XTRX
  boardSerialNumber=0xe5dd893
  firmwareVersion=4
  gatewareVersion=1
  hardwareVersion=18
  protocolVersion=1

----------------------------------------------------
-- Peripheral summary
----------------------------------------------------
  Channels: 2 Rx, 2 Tx
  Timestamps: YES
  Sensors: clock_locked, lms7_temp
     * clock_locked (Clock Locked): false
        CGEN clock is locked, good VCO selection.
     * lms7_temp (LMS7 Temperature): 76.536000 C
        The temperature of the LMS7002M in degrees C.
  Registers: BBIC, RFIC0
  Other Settings:
     * SAVE_CONFIG - Save LMS settings to file
       [key=SAVE_CONFIG, type=string]
     * LOAD_CONFIG - Load LMS settings from file
       [key=LOAD_CONFIG, type=string]
     * OVERSAMPLING - oversampling ratio (0 - auto)
       [key=OVERSAMPLING, type=int, options=(0, 1, 2, 4, 8, 16, 32)]
  GPIOs: MAIN

----------------------------------------------------
-- RX Channel 0
----------------------------------------------------
  Full-duplex: YES
  Supports AGC: NO
  Stream formats: CF32, CS12, CS16
  Native format: CS16 [full-scale=32767]
  Stream args:
     * Link Format - The format of the samples over the link.
       [key=linkFormat, default=CS16, type=string, options=(CS16, CS12)]
  Antennas: None, LNAH, LNAL, LNAW, LB1, LB2
  Corrections: DC removal, DC offset, IQ balance
  Full gain range: [-12, 61, 1] dB
    LNA gain range: [0, 30, 1] dB
    PGA gain range: [-12, 19, 1] dB
    TIA gain range: [0, 12, 1] dB
  Full freq range: [0.1, 3800] MHz
    RF freq range: [0.1, 3800] MHz
    BB freq range: [-21.8474, 21.8474] MHz
  Tune args:
     * LO Offset - Tune the LO with an offset and compensate with the baseband CORDIC.
       [key=OFFSET, units=Hz, default=0.0, type=float, range=[-2.18474e+07, 2.18474e+07]]
     * BB - Specify a specific value for this component or IGNORE to skip tuning it.
       [key=BB, units=Hz, default=DEFAULT, type=float, range=[-2.18474e+07, 2.18474e+07], options=(DEFAULT, IGNORE)]
  Sample rates: [0.1, 61.44] MSps
  Filter bandwidths: [1.4001, 130] MHz
  Sensors: lo_locked
     * lo_locked (LO Locked): false
        LO synthesizer is locked, good VCO selection.
  Other Settings:
     * TSP_CONST - Digital DC test signal level in LMS7002M TSP chain.
       [key=TSP_CONST, default=16383, type=int, range=[0, 32767]]
     * CALIBRATE -  DC/IQ calibration bandwidth
       [key=CALIBRATE, type=float, range=[2.5e+06, 1.2e+08]]
     * ENABLE_GFIR_LPF - LPF bandwidth (must be set after sample rate)
       [key=ENABLE_GFIR_LPF, type=float]
     * TSG_NCO - Enable NCO test signal
       [key=TSG_NCO, default=4, type=int, options=(-1, 4, 8)]

----------------------------------------------------
-- RX Channel 1
----------------------------------------------------
  Full-duplex: YES
  Supports AGC: NO
  Stream formats: CF32, CS12, CS16
  Native format: CS16 [full-scale=32767]
  Stream args:
     * Link Format - The format of the samples over the link.
       [key=linkFormat, default=CS16, type=string, options=(CS16, CS12)]
  Antennas: None, LNAH, LNAL, LNAW, LB1, LB2
  Corrections: DC removal, DC offset, IQ balance
  Full gain range: [-12, 61, 1] dB
    LNA gain range: [0, 30, 1] dB
    PGA gain range: [-12, 19, 1] dB
    TIA gain range: [0, 12, 1] dB
  Full freq range: [0.1, 3800] MHz
    RF freq range: [0.1, 3800] MHz
    BB freq range: [-21.8474, 21.8474] MHz
  Tune args:
     * LO Offset - Tune the LO with an offset and compensate with the baseband CORDIC.
       [key=OFFSET, units=Hz, default=0.0, type=float, range=[-2.18474e+07, 2.18474e+07]]
     * BB - Specify a specific value for this component or IGNORE to skip tuning it.
       [key=BB, units=Hz, default=DEFAULT, type=float, range=[-2.18474e+07, 2.18474e+07], options=(DEFAULT, IGNORE)]
  Sample rates: [0.1, 61.44] MSps
  Filter bandwidths: [1.4001, 130] MHz
  Sensors: lo_locked
     * lo_locked (LO Locked): false
        LO synthesizer is locked, good VCO selection.
  Other Settings:
     * TSP_CONST - Digital DC test signal level in LMS7002M TSP chain.
       [key=TSP_CONST, default=16383, type=int, range=[0, 32767]]
     * CALIBRATE -  DC/IQ calibration bandwidth
       [key=CALIBRATE, type=float, range=[2.5e+06, 1.2e+08]]
     * ENABLE_GFIR_LPF - LPF bandwidth (must be set after sample rate)
       [key=ENABLE_GFIR_LPF, type=float]
     * TSG_NCO - Enable NCO test signal
       [key=TSG_NCO, default=4, type=int, options=(-1, 4, 8)]

----------------------------------------------------
-- TX Channel 0
----------------------------------------------------
  Full-duplex: YES
  Supports AGC: NO
  Stream formats: CF32, CS12, CS16
  Native format: CS16 [full-scale=32767]
  Stream args:
     * Link Format - The format of the samples over the link.
       [key=linkFormat, default=CS16, type=string, options=(CS16, CS12)]
  Antennas: None, Band1, Band2
  Corrections: DC offset, IQ balance
  Full gain range: [0, 52, 1] dB
    PAD gain range: [0, 52, 1] dB
    IAMP gain range: [-12, 12, 1] dB
  Full freq range: [0.1, 3800] MHz
    RF freq range: [0.1, 3800] MHz
    BB freq range: [-21.8474, 21.8474] MHz
  Tune args:
     * LO Offset - Tune the LO with an offset and compensate with the baseband CORDIC.
       [key=OFFSET, units=Hz, default=0.0, type=float, range=[-2.18474e+07, 2.18474e+07]]
     * BB - Specify a specific value for this component or IGNORE to skip tuning it.
       [key=BB, units=Hz, default=DEFAULT, type=float, range=[-2.18474e+07, 2.18474e+07], options=(DEFAULT, IGNORE)]
  Sample rates: [0.1, 61.44] MSps
  Filter bandwidths: [5, 130] MHz
  Sensors: lo_locked
     * lo_locked (LO Locked): false
        LO synthesizer is locked, good VCO selection.
  Other Settings:
     * TSP_CONST - Digital DC test signal level in LMS7002M TSP chain.
       [key=TSP_CONST, default=16383, type=int, range=[0, 32767]]
     * CALIBRATE -  DC/IQ calibration bandwidth
       [key=CALIBRATE, type=float, range=[2.5e+06, 1.2e+08]]
     * ENABLE_GFIR_LPF - LPF bandwidth (must be set after sample rate)
       [key=ENABLE_GFIR_LPF, type=float]
     * TSG_NCO - Enable NCO test signal
       [key=TSG_NCO, default=4, type=int, options=(-1, 4, 8)]

----------------------------------------------------
-- TX Channel 1
----------------------------------------------------
  Full-duplex: YES
  Supports AGC: NO
  Stream formats: CF32, CS12, CS16
  Native format: CS16 [full-scale=32767]
  Stream args:
     * Link Format - The format of the samples over the link.
       [key=linkFormat, default=CS16, type=string, options=(CS16, CS12)]
  Antennas: None, Band1, Band2
  Corrections: DC offset, IQ balance
  Full gain range: [0, 52, 1] dB
    PAD gain range: [0, 52, 1] dB
    IAMP gain range: [-12, 12, 1] dB
  Full freq range: [0.1, 3800] MHz
    RF freq range: [0.1, 3800] MHz
    BB freq range: [-21.8474, 21.8474] MHz
  Tune args:
     * LO Offset - Tune the LO with an offset and compensate with the baseband CORDIC.
       [key=OFFSET, units=Hz, default=0.0, type=float, range=[-2.18474e+07, 2.18474e+07]]
     * BB - Specify a specific value for this component or IGNORE to skip tuning it.
       [key=BB, units=Hz, default=DEFAULT, type=float, range=[-2.18474e+07, 2.18474e+07], options=(DEFAULT, IGNORE)]
  Sample rates: [0.1, 61.44] MSps
  Filter bandwidths: [5, 130] MHz
  Sensors: lo_locked
     * lo_locked (LO Locked): false
        LO synthesizer is locked, good VCO selection.
  Other Settings:
     * TSP_CONST - Digital DC test signal level in LMS7002M TSP chain.
       [key=TSP_CONST, default=16383, type=int, range=[0, 32767]]
     * CALIBRATE -  DC/IQ calibration bandwidth
       [key=CALIBRATE, type=float, range=[2.5e+06, 1.2e+08]]
     * ENABLE_GFIR_LPF - LPF bandwidth (must be set after sample rate)
       [key=ENABLE_GFIR_LPF, type=float]
     * TSG_NCO - Enable NCO test signal
       [key=TSG_NCO, default=4, type=int, options=(-1, 4, 8)]
  1. limeDevice:
$ limeDevice -f
Found 1 device(s) :
0: LimeSDR XTRX, media=PCIe, addr=/dev/limepcie0, serial=000000000e5dd893
        Expansion name          : UNSUPPORTED
        Firmware version        : 4
        Gateware version        : 1
        Gateware revision       : 22
        Gateware target board   : LimeSDR XTRX
        Hardware version        : 18
        Protocol version        : 1
        Serial number           : 241031315
        SPI slave devices       :
                                  FPGA
                                  LMS7002M
        Memory devices          :
                                  EEPROM
                                  FPGA/FLASH
                                  FPGA/gold-image
                                  FPGA/user-image
        GPS Lock:
                GPS - Undefined
                Glonass - Undefined
                Galileo - Undefined
                Beidou - Undefined
  1. GNURadio: Successfully tested RX and TX using GNURadio

System Information

$ lspci
0001:00:00.0 PCI bridge: Broadcom Inc. and subsidiaries BCM2712 PCIe Bridge (rev 30)
0001:01:00.0 Wireless controller: Device 2058:001b (rev 01)
0002:00:00.0 PCI bridge: Broadcom Inc. and subsidiaries BCM2712 PCIe Bridge (rev 30)
0002:01:00.0 Ethernet controller: Raspberry Pi Ltd RP1 PCIe 2.0 South Bridge

$ dmesg | grep -I lime
[    2.578814] limepcie: loading out-of-tree module taints kernel.
[    2.579119] limepcie : module init v0.1.9-gcbcc0fd7
[    2.579281] limepcie 0001:01:00.0: enabling device (0000 -> 0002)
[    2.658077] limepcie 0001:01:00.0: [device info] LimeSDR-XTRX FW:4 HW:18 PROTOCOL:1 S/N:0x000000000E5DD893
[    2.658094] limepcie 0001:01:00.0: 4.000 Gb/s available PCIe bandwidth, limited by 5.0 GT/s PCIe x1 link at 0001:00:00.0 (capable of 8.000 Gb/s with 5.0 GT/s PCIe x2 link)
[    2.658101] limepcie 0001:01:00.0: dma_get_required_mask: 1fffffffff.
[    2.658105] limepcie 0001:01:00.0: try_set_dma_bitmask(64): test buffer va:000000004aef4a20 pa:101280000 bus:1101280000
[    2.658109] limepcie 0001:01:00.0: using 64bit DMA mask
[    2.658176] limepcie 0001:01:00.0: 1 MSI IRQs allocated.
[    2.658189] limepcie 0001:01:00.0: DMA buffer size(16384)
[    2.658192] limepcie 0001:01:00.0: DMA channels: 1
[    2.658421] limepcie 0001:01:00.0: Creating /dev/limepcie0/trx0
[    2.659156] limepcie 0001:01:00.0: Creating /dev/limepcie0/control0
[    2.659307] limepcie 0001:01:00.0: UART count: 0
[    2.697161] limeuart : module init v0.1.9-gcbcc0fd7
[   18.074365] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   18.076416] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   18.083842] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   18.085901] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   18.315381] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   18.317427] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   18.325522] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   18.327585] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   18.578600] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   18.580649] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   18.589805] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   18.591840] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   41.375419] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   41.377483] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   41.384537] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   41.386561] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   41.614059] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   41.616089] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   41.624127] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   41.626146] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   41.875214] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   41.877243] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   41.885392] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   41.887392] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   50.751691] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   50.753761] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   50.760785] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   50.762812] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   50.991801] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   50.993829] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   51.001757] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   51.003775] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   51.250888] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   51.252913] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   51.260892] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   51.262908] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   53.310722] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   53.312769] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   53.319718] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   53.321727] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   53.550461] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   53.552473] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   53.560397] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   53.562410] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   53.809738] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   53.811771] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[   53.819854] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[   53.821926] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[  206.104854] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[  206.107140] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 14
[  213.966459] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[  213.968519] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[  218.773982] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[  218.776015] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[  220.545776] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[  220.547804] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[  221.806765] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[  221.808802] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[  223.194779] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15600, IRQ every: 4 buffers, IRQi:1
[  223.196814] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 10
[  310.298362] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 8320, IRQ every: 4 buffers, IRQi:1
[  310.305071] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[236582.862838] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15824, IRQ every: 4 buffers, IRQi:1
[236583.867091] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 7772
[236587.737773] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15824, IRQ every: 4 buffers, IRQi:1
[236588.748182] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 7772
[236592.513074] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15824, IRQ every: 4 buffers, IRQi:1
[236593.523150] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 7772
[236671.490833] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 15824, IRQ every: 4 buffers, IRQi:1
[236678.216811] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 52197
[242598.955333] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 1040, IRQ every: 4 buffers, IRQi:1
[242606.616257] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 59837
[242662.549820] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 1040, IRQ every: 4 buffers, IRQi:1
[242684.376717] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 170473
[242729.976151] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 1376, IRQ every: 4 buffers, IRQi:1
[242756.197723] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[243056.823159] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 4128, IRQ every: 4 buffers, IRQi:1
[243061.827038] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 37210
[243073.283402] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 4128, IRQ every: 4 buffers, IRQi:1
[243075.292306] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 14905
[243122.740112] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 4128, IRQ every: 4 buffers, IRQi:1
[243124.750235] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 14905
[243171.923926] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 4128, IRQ every: 4 buffers, IRQi:1
[243173.936584] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 14905
[243270.192400] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 5472, IRQ every: 4 buffers, IRQi:1
[243271.201462] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 7445
[243503.886354] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 5472, IRQ every: 4 buffers, IRQi:1
[243504.900897] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 7445
[243530.159187] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 5472, IRQ every: 4 buffers, IRQi:1
[243531.174116] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 7445
[244040.072433] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 8320, IRQ every: 4 buffers, IRQi:1
[244040.081152] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[244357.852741] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 8320, IRQ every: 4 buffers, IRQi:1
[244357.860257] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[244383.738411] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 8320, IRQ every: 4 buffers, IRQi:1
[244383.745675] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[248246.380915] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 1040, IRQ every: 4 buffers, IRQi:1
[248264.923364] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 72424
[249265.606930] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 1040, IRQ every: 4 buffers, IRQi:1
[249272.065112] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 25220
[249341.323338] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 7280, IRQ every: 4 buffers, IRQi:1
[249394.836159] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 597221
[252485.970647] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 7280, IRQ every: 4 buffers, IRQi:1
[252485.975459] limepcie 0001:01:00.0: DMA0 TO_DEVICE start, IRQi:0
[252654.927475] limepcie 0001:01:00.0: DMA0 TO_DEVICE stop, transfers completed: 19485
[252655.027120] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 1886712
[252665.278763] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 7280, IRQ every: 4 buffers, IRQi:1
[252665.283693] limepcie 0001:01:00.0: DMA0 TO_DEVICE start, IRQi:0
[252702.434104] limepcie 0001:01:00.0: DMA0 TO_DEVICE stop, transfers completed: 59333
[252702.534081] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 415718
[253663.892975] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 8320, IRQ every: 4 buffers, IRQi:1
[253663.900434] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[253710.228554] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 8320, IRQ every: 4 buffers, IRQi:1
[253710.235262] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[253952.762161] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 8320, IRQ every: 4 buffers, IRQi:1
[253952.769265] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[254165.766911] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 8320, IRQ every: 4 buffers, IRQi:1
[254165.774573] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[254307.340925] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 8320, IRQ every: 4 buffers, IRQi:1
[254307.348505] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[254451.520808] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 7280, IRQ every: 4 buffers, IRQi:1
[254451.527863] limepcie 0001:01:00.0: DMA0 TO_DEVICE start, IRQi:0
[254467.132336] limepcie 0001:01:00.0: DMA0 TO_DEVICE stop, transfers completed: 42598
[254467.231866] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 175212
[254500.060538] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 7280, IRQ every: 4 buffers, IRQi:1
[254500.067088] limepcie 0001:01:00.0: DMA0 TO_DEVICE start, IRQi:0
[254506.168829] limepcie 0001:01:00.0: DMA0 TO_DEVICE stop, transfers completed: 1406
[254506.269390] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 69192
[254682.701447] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 8320, IRQ every: 4 buffers, IRQi:1
[254682.709517] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[254991.573593] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 8320, IRQ every: 4 buffers, IRQi:1
[254991.581885] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[255022.211642] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 8320, IRQ every: 4 buffers, IRQi:1
[255022.219844] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[255136.848446] limepcie 0001:01:00.0: DMA0 FROM_DEVICE start continuous, buffer size: 8320, IRQ every: 4 buffers, IRQi:1
[255136.856300] limepcie 0001:01:00.0: DMA0 FROM_DEVICE stop, transfers completed: 0
[255352.317781] limeuart : module exit
[255352.317847] limepcie 0001:01:00.0: [Removing device] vid:2058 pid:001B
[255352.320287] limepcie : module exit

Questions

  1. Has anyone experienced similar issues with the SoapySDR, LimeSuiteNG plugins and LimeXTRX hardware?
  2. Are there known compatibility issues between recent srsRAN versions and the LimeXTRX interface?

I’ve spent considerable time troubleshooting this issue and would greatly appreciate any insights, suggestions, or recommended configuration changes that might help resolve these problems.

Thank you in advance for your help!

We don’t use SoapySDR with srsRAN 4G and instead have native drivers. There is a branch here for use with Lime Suite NG:

However, that was implemented coming up for a year ago and I’ve not tried using it with a recent Lime Suite NG commit. There is also an lc/main branch which is for use with classic Lime Suite. For details of that, see:

1 Like

Thanks! I successfully installed the lc/limesuiteng branch as you suggested . However, when I launch the eNB, the system detects limextrx but returns an error associated with device_args. I have tried different configurations,
--rf.device_args="rxant=0,txant=0"
--rf.device_args="rxant=LNAH,txant=BAND1"
yet the error persists and causes the application to crash each time .

 $ ./enb_lime.sh

---  Software Radio Systems LTE eNodeB  ---

Reading configuration file ./config/enb_lime.conf...
WARNING: cpu0 scaling governor is not set to performance mode. Realtime processing could be compromised. Consider setting it to performance mode before running the application.

Built in Release mode using commit 586d7c079 on branch lc/limesuiteng.

Opening 1 channels in RF device=limesuiteng with args=rxant=0,txant=0
Supported RF device list: UHD soapy zmq limesuiteng file
Key:Value{ rxant=0txant=0: }
terminate called after throwing an instance of 'std::invalid_argument'
  what():  stod
--- command='./build/srsenb/src/srsenb ./config/enb_lime.conf --enb_files.sib_config=./config/sib.conf --enb_files.rr_config=./config/rr.conf --enb_files.rb_config=./config/rb.conf --rf.device_name=limesuiteng --rf.device_args=rxant=0,txant=0' version=23.04.0 signal=6 date='08/04/2025 13:42:35' ---
        ./build/srsenb/src/srsenb(+0x31442c) [0x55558f2c442c]
        linux-vdso.so.1(__kernel_rt_sigreturn+0) [0x7fff96910820]
        /lib/aarch64-linux-gnu/libc.so.6(+0x80a50) [0x7fff94e90a50]
        /lib/aarch64-linux-gnu/libc.so.6(gsignal+0x1c) [0x7fff94e4a72c]
        /lib/aarch64-linux-gnu/libc.so.6(abort+0xf0) [0x7fff94e3747c]
        /lib/aarch64-linux-gnu/libstdc++.so.6(_ZN9__gnu_cxx27__verbose_terminate_handlerEv+0x178) [0x7fff951549c8]
        /lib/aarch64-linux-gnu/libstdc++.so.6(+0xa23bc) [0x7fff951523bc]
        /lib/aarch64-linux-gnu/libstdc++.so.6(+0xa2420) [0x7fff95152420]
        /lib/aarch64-linux-gnu/libstdc++.so.6(+0xa2704) [0x7fff95152704]
        /lib/aarch64-linux-gnu/libstdc++.so.6(_ZSt24__throw_invalid_argumentPKc+0x48) [0x7fff9514df90]
        ./build/srsenb/src/srsenb(+0xa3e688) [0x55558f9ee688]
        ./build/srsenb/src/srsenb(+0xa3c1f8) [0x55558f9ec1f8]
        ./build/srsenb/src/srsenb(+0x465868) [0x55558f415868]
        ./build/srsenb/src/srsenb(+0x46acf4) [0x55558f41acf4]
        ./build/srsenb/src/srsenb(+0xa9870) [0x55558f059870]
        ./build/srsenb/src/srsenb(+0x89dc0) [0x55558f039dc0]
        /lib/aarch64-linux-gnu/libc.so.6(+0x27740) [0x7fff94e37740]
        /lib/aarch64-linux-gnu/libc.so.6(__libc_start_main+0x98) [0x7fff94e37818]
        ./build/srsenb/src/srsenb(+0x8cb70) [0x55558f03cb70]
srsRAN crashed. Please send this backtrace to the developers ...
---  exiting  ---

If I leave device_args empty, I have the following error:
terminate called after throwing an instance of 'std::logic_error' what(): basic_string: construction from null is not valid

I appreciate your assistance and any further suggestions you might have to resolve this issue.

Thank you again for your support!

Looking back at some notes from last year:

Currently due to technical reasons it cannot have both legacy LimeSuite and LimeSuiteNG enabled at the same time. So when compiling srsRAN, disable legacy LimeSuite “cmake … -DENABLE_LIMESDR=off”.

The “enb.conf” changes:
device_name = limesuiteng
device_args =logLevel:3,dev0:“LimeSDR”,port0:“dev0”,port0_rx_path:“LNAH”,port0_tx_path:“BAND2”

The above was for a LimeSDR USB, so you may need to adjust slightly for XTRX, I’m not sure. The optimal tx/rx paths will also obviously vary depending on which band you configure for.

Arguments list available values and description: LimeSuiteNG/plugins/amarisoft-plugin/configExample.cfg at e1206da8b314684c496136d4594656b71411b000 · myriadrf/LimeSuiteNG · GitHub

When running just the ‘srsenb’, I can see that Tx actually starts transmitting samples only after ~10 seconds have passed from the actual stream start. Don’t know why, it just sends the first Tx packet with such timestamp, perhaps because I haven’t been running the entire system.
Anyway from software side current state should be enough to have things working. Gains might need adjusting.

1 Like

Thanks for sharing these detailed notes.

I’m having trouble figuring out which arguments are necessary for configuring limeXTRX. I’ve tried several things without success, and I’m not finding a working configuration. Is there any specific documentation for limeXTRX that I can refer to?

I did check the configExample.cfg in the LimeSuiteNG repository on GitHub, but it doesn’t appear to provide clear guidance for the limeXTRX configuration.

Thanks again for your help, and any pointers to the correct documentation or a working configuration would be greatly appreciated.

There is no documentation at all for the experimental Lime Suite NG fork of srsRAN 4G yet, beyond that shared above. I’m not sure if there would be any significant config changes required for use with LimeSDR XTRX, but @ricardas could likely advise.

1 Like

I tried a lot of possible device_args:

  • --rf.device_args='rxant:1,txant:1,num_ports:1'
  • --rf.device_args='rxant:"LNAH"
  • --rf.device_args='port0_rx_path:"LNAH",port0_tx_path:"BAND1"'

Errors Encountered:

using --rf.device_args='rxant:1,txant:1,num_ports:1':

 $ ./enb_lime.sh
---  Software Radio Systems LTE eNodeB  ---

Reading configuration file ./config/enb_lime.conf...
WARNING: cpu0 scaling governor is not set to performance mode. Realtime processing could be compromised. Consider setting it to performance mode before running the application.

Built in Release mode using commit 586d7c079 on branch lc/limesuiteng.

Opening 1 channels in RF device=limesuiteng with args=rxant:1,txant:1,num_ports:1
Supported RF device list: UHD soapy zmq limesuiteng file
Key:Value{ rxant:1 }
Key:Value{ txant:1 }
Key:Value{ num_ports:1 }
No ports have been specified.
Error initializing radio.

using --rf.device_args='rxant:"LNAH":

 $ ./enb_lime.sh
---  Software Radio Systems LTE eNodeB  ---

Reading configuration file ./config/enb_lime.conf...
WARNING: cpu0 scaling governor is not set to performance mode. Realtime processing could be compromised. Consider setting it to performance mode before running the application.

Built in Release mode using commit 586d7c079 on branch lc/limesuiteng.

Opening 1 channels in RF device=limesuiteng with args=rxant:LNAH,txant:BAND1
Supported RF device list: UHD soapy zmq limesuiteng file
Key:Value{ rxant:LNAH }
terminate called after throwing an instance of 'std::invalid_argument'
  what():  stod
--- command='./build/srsenb/src/srsenb ./config/enb_lime.conf --enb_files.sib_config=./config/sib.conf --enb_files.rr_config=./config/rr.conf --enb_files.rb_config=./config/rb.conf --rf.device_name=limesuiteng --rf.device_args=rxant:LNAH,txant:BAND1' version=23.04.0 signal
=6 date='08/04/2025 14:52:33' ---
        ./build/srsenb/src/srsenb(+0x31442c) [0x5555587e442c]
        linux-vdso.so.1(__kernel_rt_sigreturn+0) [0x7ffec8444820]
        /lib/aarch64-linux-gnu/libc.so.6(+0x80a50) [0x7ffec69d0a50]
        /lib/aarch64-linux-gnu/libc.so.6(gsignal+0x1c) [0x7ffec698a72c]
        /lib/aarch64-linux-gnu/libc.so.6(abort+0xf0) [0x7ffec697747c]
        /lib/aarch64-linux-gnu/libstdc++.so.6(_ZN9__gnu_cxx27__verbose_terminate_handlerEv+0x178) [0x7ffec6c949c8]
        /lib/aarch64-linux-gnu/libstdc++.so.6(+0xa23bc) [0x7ffec6c923bc]
        /lib/aarch64-linux-gnu/libstdc++.so.6(+0xa2420) [0x7ffec6c92420]
        /lib/aarch64-linux-gnu/libstdc++.so.6(+0xa2704) [0x7ffec6c92704]
        /lib/aarch64-linux-gnu/libstdc++.so.6(_ZSt24__throw_invalid_argumentPKc+0x48) [0x7ffec6c8df90]
        ./build/srsenb/src/srsenb(+0xa3e688) [0x555558f0e688]
        ./build/srsenb/src/srsenb(+0xa3c1f8) [0x555558f0c1f8]
        ./build/srsenb/src/srsenb(+0x465868) [0x555558935868]
        ./build/srsenb/src/srsenb(+0x46acf4) [0x55555893acf4]
        ./build/srsenb/src/srsenb(+0xa9870) [0x555558579870]
        ./build/srsenb/src/srsenb(+0x89dc0) [0x555558559dc0]
        /lib/aarch64-linux-gnu/libc.so.6(+0x27740) [0x7ffec6977740]
        /lib/aarch64-linux-gnu/libc.so.6(__libc_start_main+0x98) [0x7ffec6977818]
        ./build/srsenb/src/srsenb(+0x8cb70) [0x55555855cb70]
srsRAN crashed. Please send this backtrace to the developers ...
---  exiting  ---

It appears that when I specify what I believe to be the correct device_args, the software either complains that no ports have been specified or crashes with an std::invalid_argument error (likely due to std::stod conversion errors). This indicates that there might be an issue with how the arguments are parsed or what values are expected for the specific fields.

If anyone has insights (maybe @ricardas) or suggestions on resolving these issues, especially regarding the correct set of device_args for a working configuration, I’d really appreciate your help.