I have an X410 device that I'm trying to update for use with UHD
v4.4.0. It hasn't been used for a while, so at least several
releases ago.
I followed the procedure in the X410 manual
(https://files.ettus.com/manual/page_usrp_x4xx.html#x4xx_updating_filesystems_mender)
to update the filesystem. After doing so, the unit boots as expected
and it looks like it's using the correct filesystem;
/etc/mender/artifact_info contains:
artifact_name=v4.4.0.0_x4xx
However, UHD-based applications aren't able to communicate with the
device. uhd_find_devices does function somewhat; when I run it on
the X410 itself, it returns:
root@ni-x4xx-XXXXXX:~# uhd_find_devices
[INFO] [UHD] linux; GNU C++ version 9.2.0; Boost_107100;
UHD_4.4.0.0-0-g5fac246b
--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
serial:
claimed: False
fpga:
mgmt_addr: 127.0.0.1
name:
product:
reachable: No
type:
However, uhd_usrp_probe fails:
root@ni-x4xx-XXXXXX:~# uhd_usrp_probe --args
addr=127.0.0.1,type=x4xx
[INFO] [UHD] linux; GNU C++ version 9.2.0; Boost_107100;
UHD_4.4.0.0-0-g5fac246b
Error: LookupError: KeyError: No devices found for ----->
Device Address:
addr: 127.0.0.1
type: x4xx
I thought I might need to reload the FPGA image, so I tried to load
the CG_400 image and got the following:
root@ni-x4xx-XXXXXX:~# uhd_image_loader --args
mgmt_addr=127.0.0.1,type=x4xx,fpga=CG_400
[INFO] [UHD] linux; GNU C++ version 9.2.0; Boost_107100;
UHD_4.4.0.0-0-g5fac246b
No applicable UHD devices found[ERROR] [MPMD IMAGE LOADER]
mpmd_image_loader only supports a single device.
I see the same results if I try to run uhd_usrp_probe from an
external host using UHD v4.4.0. Since the uhg_image_loader output
suggested an issue with MPM, I poked around and found that the
usrp-hwd systemd unit (the MPM hardware daemon) is failing to finish
startup. Its log output contains:
root@ni-x4xx-XXXXXX:~# journalctl -u usrp-hwd -f
Feb 09 12:37:33 ni-x4xx-XXXXXX systemd[1]: Starting USRP
Hardware Daemon (MPM)...
Feb 09 12:37:35 ni-x4xx-XXXXXX usrp_hwd.py[868]: [MPM.main]
[INFO] Launching USRP/MPM, version: 4.4.0.0-g5fac246b
Feb 09 12:37:35 ni-x4xx-XXXXXX usrp_hwd.py[868]: [MPM.main]
[INFO] Spawning RPC process...
Feb 09 12:37:35 ni-x4xx-XXXXXX systemd[1]: usrp-hwd.service:
Supervising process 872 which is not our child. We'll most likely
not notice when it exits.
Feb 09 12:37:35 ni-x4xx-XXXXXX usrp_hwd.py[868]: [MPM.main]
[INFO] Spawning discovery process...
Feb 09 12:37:35 ni-x4xx-XXXXXX usrp_hwd.py[868]: [MPM.main]
[INFO] Processes launched. Registering signal handlers.
Feb 09 12:37:35 ni-x4xx-XXXXXX usrp_hwd.py[868]:
[MPM.PeriphManager] [INFO] Device serial number: YYYYYYY
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: metal_uio_dev_open: No IRQ for device
1000100000.usp_rf_data_converter.
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: metal_uio_dev_open: No IRQ for device
1000100000.usp_rf_data_converter.
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: metal_uio_dev_open: No IRQ for device
1000100000.usp_rf_data_converter.
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: metal_uio_dev_open: No IRQ for device
1000100000.usp_rf_data_converter.
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: error:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: Requested block
not available in XRFdc_SetThresholdClrMode
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: error:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: Requested block
not available in XRFdc_SetThresholdClrMode
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: error:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: Requested block
not available in XRFdc_SetThresholdClrMode
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: error:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: Requested block
not available in XRFdc_SetThresholdClrMode
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: error:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: Requested block
not available in XRFdc_SetThresholdClrMode
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: error:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: Requested block
not available in XRFdc_SetThresholdClrMode
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: error:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: Requested block
not available in XRFdc_SetThresholdClrMode
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: error:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: Requested block
not available in XRFdc_SetThresholdClrMode
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: error:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: Requested block
not available in XRFdc_SetThresholdClrMode
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: error:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: Requested block
not available in XRFdc_SetThresholdClrMode
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: error:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: Requested block
not available in XRFdc_SetThresholdClrMode
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: error:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: Requested block
not available in XRFdc_SetThresholdClrMode
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: info:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: DTC Scan T1
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: ADC0:
000000000000000000000000000111122222000000000000000000000000000*#000000000000000000000000001111322222000000000000000000000000000
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: ADC2:
000000000000000000000000000000000000111122222000000000000000000#00000000*0000000000000000000000000001111222220000000000000000000
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: ADC0: Marker: - 76, 0
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: ADC2: Marker: - 76, 4
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: SysRef period in terms of ADC T1s = 1152
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: ADC target latency = 1228
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: info:
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: DTC Scan T1
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: DAC0:
0000000000000000000000000000000000011112222200000000000000000000#000000*00000000000000000000000000001111222220000000000000000000
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: DAC1:
00000000000000000000000000000000000000011112222000000000000000000000000#000*0000000000000000000000000000111132222000000000000000
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: DAC0: Marker: - 51, 0
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: DAC1: Marker: - 51, 0
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: SysRef period in terms of DAC T1s = 2304
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: DAC target latency = 800
Feb 09 12:37:39 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
error: Error : DAC alignment target latency of 816 < minimum
possible 816
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: info:
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: DTC Scan T1
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: ADC0:
0000000000000000000000000000111122222000000000000000000000000000*000000000000000000000000000111132222000000000000000000000000000
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: ADC2:
0000000000000000000000000000000000001111222220000000000000000000#0000000*0000000000000000000000000000111122222000000000000000000
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: ADC0: Marker: - 76, 0
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: ADC2: Marker: - 76, 4
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: SysRef period in terms of ADC T1s = 1152
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: ADC target latency = 1228
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal: info:
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: DTC Scan T1
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: DAC0:
0000000000000000000000000000000000011113222220000000000000000000#0000000*0000000000000000000000000000111122222000000000000000000
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: DAC1:
000000000000000000000000000000000000000111132222000000000000000000000000#000*000000000000000000000000000011112222200000000000000
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: DAC0: Marker: - 51, 0
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: DAC1: Marker: - 51, 0
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: SysRef period in terms of DAC T1s = 2304
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
info: DAC target latency = 800
Feb 09 12:37:40 ni-x4xx-XXXXXX usrp_hwd.py[868]: metal:
error: Error : DAC alignment target latency of 816 < minimum
possible 816
Feb 09 12:39:03 ni-x4xx-XXXXXX systemd[1]: usrp-hwd.service:
start operation timed out. Terminating.
Feb 09 12:39:03 ni-x4xx-XXXXXX usrp_hwd.py[868]: [MPM.kill]
[INFO] Terminating pid: 872
Feb 09 12:39:03 ni-x4xx-XXXXXX usrp_hwd.py[868]: [MPM.kill]
[INFO] Terminating pid: 873
Feb 09 12:39:03 ni-x4xx-XXXXXX systemd[1]: usrp-hwd.service:
Killing process 872 (n/a) with signal SIGKILL.
Feb 09 12:39:03 ni-x4xx-XXXXXX systemd[1]: usrp-hwd.service:
Failed with result 'timeout'.
Feb 09 12:39:03 ni-x4xx-XXXXXX systemd[1]: Failed to start USRP
Hardware Daemon (MPM).
Anyone have any guidance on how I can resolve the MPM issue? I am
fine with losing any state that is on the device in order to get it
to work.
Thanks.
Jason