CaribouLite, need help!

I made a video of my installation using Dragon and it sort of works.

Once installed remember to run ’ sudo sdrpp --server ’ and then you should be on the way!
Also as mentioned above turn AGC up to 48
Hope this helps.
I am using a RPi 4
Working to see DATV on it …
Very hopeful

Martin G8LCE

Developer update CaribouLite RPi HAT - Software Fixes and New Features | Crowd Supply

1 Like

On a fresh install of rpi os 32bit lite.

Make sure git libsoapysdr-dev soapysdr-tools is installed.

/boot/config.txt

#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on
dtparam=i2c_vc=on
dtoverlay=spi1-3cs
# stay on 32bit
arm_64bit=0

I tried the latest main branch and install.sh
it looked like it was happy, unfortunately the smi was not loaded properly, in the repo:
sudo insmod driver/build/smi_stream_dev.ko

Running a headless setup, so running via remote:
sudo SoapySDRServer --bind

Here’s a gqrx screenshot of some ISM with a rubberduck antenna and 40dB gain setting.

4 Likes

SA2KNG,

I’m trying to set this up on a generic 32-bit bullseye rpi os.

The whole ./install runs fine, but I know I have multiple problems.

Thanks to you for explaining how to load the smi_stream_dev kernel module.

Anytime I try to just run sudo SoapySDRServer --bind and connect to it from GQRX as you are (running on headless rpi 32 bit) I get this:

07-02 01:06:14.857 1973 2026 D CARIBOULITE Radio cariboulite_radio_read_samples@cariboulite_radio.c:999 SMI reading operation returned timeout

I think I may be able to figure the above out but FPGA is also failing.

I try to run GQRX on the RPI (via VNC) and get this error:
destination port 1 out of range for source_impl(92)

This should not have been released.
Makes me want to ask for my money back and just purchase a HackRFone!

There was a commit related to this smi kernel module, I fail to understand what is going on thou…
It consists of a changed binary that generates a .h file, looks like the source is there but unchanged ?

generate_bin_blob.c and the supplied binary, located in:

specifically the explanation:

converts a binary file into C/C++ h-file code with versioning and dating. We use this converter to embed the device-tree overlays binaries and FPGA firmware binaries directly into the library code. In such way, the lib is self contained and doesn’t have floating around dependencies.

I just think it is super sketchy. I don’t like the methods used. It is almost like the previous coding experience was writing viruses or something totally different.
The dtb’s have a home in /boot/overlays/, kernel modules goes into /lib/modules and you load them with the proper methods already in place, not when starting a userspace program.

Imagine packaging this and getting it accepted in debian/ubuntu/redhat repos.
I really wanted this to work, but the direction and time is not looking good. The money spent I don’t cry over.

Finally got on hold on Raspberry Pi to tinker with the CaribouLite. Got it kind-of working, but with the following caveats:

  • There are occasional “FPGA programming failed” errors when initializing the radio after reboot.
  • The SoapySDR driver seems to have the S1G and HiF channels swapped (I’ve created a pull-request for this).
  • Seems that using frequency of the outside of the supported range on S1G is not handles gracefully, might require restarting the Soapy/SDR++ server.
  • cariboulite_test_app Ch1 stream causes caribou_smi_read -> Timeout right after reboot. Starting the stream again works around the problem.
  • The install.sh script does not handle situation when multiple kernels are installed. It has been reported and it it something that needs to be watched out on DragonOS 3.1 as apt upgrade installs a newer kernel.

Those errors seemed to be consistent across Raspbian OS Lite and Desktop, as well as DragonOS both 3.0 and 3.1.

The overall configuration I’ve used for the final testing:

  • CaribouLite FULL
  • Raspberry Pi 4 Model B - 8GB with CaribouLite SDR hat running in headless mode
  • SDR++ GUI running on another computer (MacBook in my case, although, should not really matter)
  • 2023-05-03-raspios-bullseye-arm64-lite.img

Hopefully this summary of quirks helps troubleshooting your setup!

Below are the detailed steps I’ve used to configure my system. Maybe it help someone.
Apologies for the lengthy message :slight_smile:

Preparation

sudo apt update
sudo api upgrade
sudo apt install mc vim git cmake gcc g++ soapysdr-tools

SDR++

This pretty much follows the SDR++ upstream steps from its rpi_install.sh but
with the following modifications:

  • Use libvolk2-dev instead of libvolk1-dev (the latter one is not available on this platform)
  • Install to /opt/SDR++ instead of the default /usr/local/

Install the dependencies:

sudo apt install build-essential libfftw3-dev libglfw3-dev \
libvolk2-dev libzstd-dev libsoapysdr-dev libairspyhf-dev libairspy-dev \
libiio-dev libad9361-dev librtaudio-dev libhackrf-dev librtlsdr-dev \
libbladerf-dev liblimesuite-dev p7zip-full wget

Compile and install SDR++:

# Clone the sources:
mkdir -p ~/Developer
cd ~/Developer/
git clone https://github.com/AlexandreRouma/SDRPlusPlus
cd SDRPlusPlus

# Configure the build:
mkdir build
cd build
cmake .. -DOPT_BUILD_LIMESDR_SOURCE=ON -DCMAKE_INSTALL_PREFIX=/opt/SDR++
make -j4

# Install:
sudo make install

The SDR++ commit ff7ef78b8fd was used when writing this note.

CaribouLite

Add the following line to the [all] section of the /boot/config.txt:

dtparam=i2c_vc=on
dtoverlay=spi1-3cs

Compile CaribouLite from sources:

mkdir -p ~/Developer
cd ~/Developer/
git clone https://github.com/cariboulabs/cariboulite
cd cariboulite
./install.sh

The CaribouLite commit 5840d627ce3 was used when writing this note.

Reboot the system to get the new kernel module and I2C-VC/SPI1-3CS configuration.

Running the radio

On the Raspberry Pi run: LD_LIBRARY_PATH=/opt/SDR++/lib /opt/SDR++/bin/sdrpp --server

On the desktop run SDR++, choose SDR++ Server source and SoapySDR as a remote source. The sample rate and bandwidth of 2 MHz is what seemed to work the most reliable so far.

3 Likes

Looks like an awful lot of work for a product that was supposed to be enjoyable … I quote:

CaribouLite is an affordable, educational, open-source SDR evaluation platform … designed to complement the current SDR (Software Defined Radio) eco-systems offering with a scalable, standalone dual-channel software-defined radio.

Educational? Yes, I have learnt a lot of things about Raspberry Pis that I didn’t really need to know. Otherwise ‘failed’ on all counts. I have already spent many frustrating hours trying to get the thing to work properly, to date without success. I don’t have the time to invest in correcting someone else’s incomplete work, so I will dispose of this electronic junk in an environmentally-friendly manner and put the whole experience down to just bad luck in selecting this particular product. Or does anyone disagree?

1 Like

I am willing to agree. It is currently sitting unused and I have not put any more time into it.
There are several roadblocks/dealbreakers in the code, making it pretty unuseable for me.

Wishlist:

  • load drivers with sufficient group permissions
  • all drivers should work inside docker
  • dtb build for host, config.txt
  • udev rules to control permissions on host
  • run satnogs-client through soapy reliably
  • cmake/makefile for configure and install, debian package optional
  • no tricks and suspicios ways of loading kernel modules etc
  • optional: firmware builds from github release

Example of this is the USRP drivers among others, harder than rtl-sdr but useable.

2 Likes

I follow this guide, but always end up with those error…
I use the same explenation as @sergey_vfx
Same OS (but the graphical version, not lite)

Here copy bellow of all message after started in CLI the SDR++ app

i also try DragonOS, with no more luck … I received my Cariboulite last week from Crowdfunding… so it’s recent.
I use a Raspberry Pi4 - 8GB

erikg@raspberrypi:~/build/SDRPlusPlus/build $ sdrpp --server
[18/10/2023 18:17:04.000] [INFO] SDR++ v1.1.0
[18/10/2023 18:17:04.000] [INFO] Loading config
[18/10/2023 18:17:04.000] [INFO] =====| SERVER MODE |=====
[18/10/2023 18:17:04.000] [WARN] ConfigManager locked, waiting...
[18/10/2023 18:17:04.000] [INFO] Loading modules
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/audio_source.so
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/spyserver_source.so
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/plutosdr_source.so
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/hermes_source.so
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/rtl_tcp_source.so
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/airspyhf_source.so
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/hackrf_source.so
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/airspy_source.so
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/soapy_source.so
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/limesdr_source.so
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/rfspace_source.so
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/file_source.so
[18/10/2023 18:17:04.000] [WARN] ConfigManager locked, waiting...
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/spectran_http_source.so
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/rtl_sdr_source.so
[18/10/2023 18:17:04.000] [INFO] Loading /usr/lib/sdrpp/plugins/sdrpp_server_source.so
[18/10/2023 18:17:04.000] [INFO] Initializing Airspy Source (airspy_source)
[18/10/2023 18:17:04.000] [INFO] Initializing AirspyHF+ Source (airspyhf_source)
[18/10/2023 18:17:04.000] [INFO] Initializing Audio Source (audio_source)
[18/10/2023 18:17:04.000] [INFO] Initializing File Source (file_source)
[18/10/2023 18:17:04.000] [INFO] Initializing HackRF Source (hackrf_source)
[18/10/2023 18:17:04.000] [INFO] Initializing Hermes Source (hermes_source)
[18/10/2023 18:17:04.000] [INFO] Initializing LimeSDR Source (limesdr_source)
[18/10/2023 18:17:04.000] [INFO] Initializing PlutoSDR Source (plutosdr_source)
[18/10/2023 18:17:04.000] [INFO] Initializing RFspace Source (rfspace_source)
[18/10/2023 18:17:04.000] [INFO] Initializing RTL-SDR Source (rtl_sdr_source)
[18/10/2023 18:17:04.000] [INFO] Initializing RTL-TCP Source (rtl_tcp_source)
[18/10/2023 18:17:04.000] [INFO] Initializing SDR++ Server Source (sdrpp_server_source)
[18/10/2023 18:17:04.000] [INFO] Initializing SoapySDR Source (soapy_source)
[INFO] SoapyCaribouliteSession, sessionCount: 0
10-18 18:17:04.422  2488  2488 E IO_UTILS_SPI io_utils_spi_add_chip@io_utils_spi.c:434 spi_init function failed with code -1, (SPI_ERR_OPEN)
10-18 18:17:04.424  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.424  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.424  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.424  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.424  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.465  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.465  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.465  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.465  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.465  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.506  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.506  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.506  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.506  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.506  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:04.549  2488  2488 I CARIBOU_PROG caribou_prog_configure_from_buffer@caribou_prog.c:260 Sending bitstream of size 32220
10-18 18:17:06.013  2488  2488 I CARIBOU_PROG caribou_prog_configure_from_buffer@caribou_prog.c:292 FPGA programming - Success!

10-18 18:17:06.114  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.114  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.114  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.114  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.114  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.155  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.155  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.155  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.155  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.155  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.196  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.196  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.196  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.196  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.196  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:06.239  2488  2488 I CARIBOU_PROG caribou_prog_configure_from_buffer@caribou_prog.c:260 Sending bitstream of size 32220
10-18 18:17:07.763  2488  2488 I CARIBOU_PROG caribou_prog_configure_from_buffer@caribou_prog.c:292 FPGA programming - Success!

10-18 18:17:07.863  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.863  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.863  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.863  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.863  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.904  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.904  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.904  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.904  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.904  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.945  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.945  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.945  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.945  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.945  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:07.988  2488  2488 I CARIBOU_PROG caribou_prog_configure_from_buffer@caribou_prog.c:260 Sending bitstream of size 32220
10-18 18:17:09.507  2488  2488 I CARIBOU_PROG caribou_prog_configure_from_buffer@caribou_prog.c:292 FPGA programming - Success!

10-18 18:17:09.607  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.607  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.607  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.607  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.607  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.648  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.648  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.648  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.648  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.648  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.689  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.689  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.689  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.689  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.689  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.731  2488  2488 W IO_UTILS_SPI io_utils_spi_transmit@io_utils_spi.c:606 generic function transfer not implemented
10-18 18:17:09.759  2488  2488 E CARIBOU_SMI caribou_smi_init@caribou_smi.c:537 couldn't open smi driver file '/dev/smi' (Cannot allocate memory)
10-18 18:17:09.759  2488  2488 E CARIBOULITE Setup cariboulite_init_submodules@cariboulite_setup.c:288 Error setting up smi submodule
10-18 18:17:09.760  2488  2488 E IO_UTILS_SPI io_utils_spi_remove_chip@io_utils_spi.c:487 the device is already empty
10-18 18:17:09.761  2488  2488 I CARIBOU_PROG caribou_prog_release@caribou_prog.c:122 device release completed
10-18 18:17:09.761  2488  2488 E FPGA caribou_fpga_close@caribou_fpga.c:246 caribou_fpga_close: dev not initialized
[ERROR] cariboulite_init_driver() failed
Printing 'findCariboulite' Request:
[INFO] [UHD] linux; GNU C++ version 10.2.0; Boost_107100; UHD_3.15.0.0-4
Printing 'findCariboulite' Request:
    {channel: HiF}
    {device_id: 1}
    {driver: Cariboulite}
    {label: CaribouLite HiF[ba9c3ded]}
    {name: CaribouLite RPI Hat}
    {serial: ba9c3ded}
    {uuid: 2cd749a3-5f08-48c6-ae91-c66c29e23671}
    {vendor: CaribouLabs LTD}
    {version: 0x0001}
[INFO] Initializing DeviceID: 1, Label: CaribouLite HiF[ba9c3ded], ChannelType: HiF
soapy_sighandler caught SIGSEGV
[INFO] soapy_sighandler killing soapy_cariboulite (cariboulite_release_driver)
10-18 18:17:10.930  2488  2488 E FPGA caribou_fpga_close@caribou_fpga.c:246 caribou_fpga_close: dev not initialized
10-18 18:17:10.930  2488  2488 E CARIBOULITE Setup cariboulite_release_submodules@cariboulite_setup.c:465 FPGA communication release failed (-1)
10-18 18:17:10.930  2488  2488 E IO_UTILS_SPI io_utils_spi_close@io_utils_spi.c:340 closing uninitialized device
CaribouLite: Signal [11] received from pid=[936]
Signal [11] caught, with the following information:
   signal errno = 0
   signal process pid = 936
   signal process uid = 0
   signal status = 0
   signal errno / SIGSEGV / the process access invalid region of memory
SIGSEGV: memory access violation

Any idea ?

For SDR++ install guide, i follow this : SDR++ On Rasp Pi 4 – Fuzz The Pi Guy

It seems to be something wrong with the SMI driver, as the log says:

10-18 18:17:09.759  2488  2488 E CARIBOU_SMI caribou_smi_init@caribou_smi.c:537 couldn't open smi driver file '/dev/smi' (Cannot allocate memory)
10-18 18:17:09.759  2488  2488 E CARIBOULITE Setup cariboulite_init_submodules@cariboulite_setup.c:288 Error setting up smi submodule

The way how cariboulite compiles the module and installs it “manual” in a sense that DKMS is not used, and instead some custom paths detection code is used. From my memories it is important to have single kernel installed, and linux-headers only for that kernel. Having versions of kernel or its headers will confuse the installation script of cariboulite.

I think you can use this command find "/lib/modules" -type f -name "bcm2835_smi_dev*" -exec dirname {} \; to verify that cariboulite installation script will only “see” single kernel installation path.

Other troubleshooting thoughts:

  • Verify that /dev/smi exists and is readable by user (cariboulite sets up udev rule t oset permissions to 0666).
  • Load smi_stream_dev manually and check for errors: sudo modprobe smi_stream_dev
  • Maybe using a later version of cariboulite

I had some issues with the currently latest versions of the cariboulite software: it did not compile out of the box. I’ve created couple of PRs Fix compilation error with undefined shared_ptr #146 and Fix detection of linux headers on Raspberry Pi OS #147. Perhaps if they are not yet merged at the time your testing you’ll need to apply them locally.