pa3gsb / radioberry-2.x Goto Github PK
View Code? Open in Web Editor NEWHam Radio hat for Raspberry PI
Ham Radio hat for Raspberry PI
This initially occurred while building new Raspberry Pi images for OpenWebRX, but I have been able to reproduce the same problem in a Debian Bullseye docker container with only necessary packages installed.
The recent changes seem to cause problems with the C++ compiler on Debian, in particular std::make_unique()
seems to be unavailable (error: 'make_unique' is not a member of 'std'
; full verbose log below). Seeing that this is only available in C++ 14, I tried modifying the cmake files to enforce C++ 14, but could not resolve it with set(CMAKE_CXX_STANDARD 14)
(same errror), and it seems like cmake still stubbornly passes -std=gnu++11
to the compiler.
Other similar issues suggest using the target_compile_features()
directive, but since the actual targets are handled by SoapySDR macros, I don't see how to add this.
$ VERBOSE=1 make
/usr/bin/cmake -S/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR -B/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build/CMakeFiles /root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build//CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build'
make -f CMakeFiles/SoapyRadioberrySDR.dir/build.make CMakeFiles/SoapyRadioberrySDR.dir/depend
make[2]: Entering directory '/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build'
cd /root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR /root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR /root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build /root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build /root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build/CMakeFiles/SoapyRadioberrySDR.dir/DependInfo.cmake --color=
Dependee "/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp" is newer than depends file "/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build/CMakeFiles/SoapyRadioberrySDR.dir/depend.internal".
Clearing dependencies in "/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build/CMakeFiles/SoapyRadioberrySDR.dir/depend.make".
Scanning dependencies of target SoapyRadioberrySDR
make[2]: Leaving directory '/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build'
make -f CMakeFiles/SoapyRadioberrySDR.dir/build.make CMakeFiles/SoapyRadioberrySDR.dir/build
make[2]: Entering directory '/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build'
[ 20%] Building CXX object CMakeFiles/SoapyRadioberrySDR.dir/SoapyRadioberry.cpp.o
/usr/bin/c++ -DSoapyRadioberrySDR_EXPORTS -O3 -DNDEBUG -fPIC -Wall -Wextra -std=gnu++11 -o CMakeFiles/SoapyRadioberrySDR.dir/SoapyRadioberry.cpp.o -c /root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberry.cpp
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberry.cpp: In function 'SoapySDR::KwargsList findMyRadioberry(const Kwargs&)':
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberry.cpp:11:63: warning: unused parameter 'args' [-Wunused-parameter]
11 | SoapySDR::KwargsList findMyRadioberry(const SoapySDR::Kwargs &args)
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~~
[ 40%] Building CXX object CMakeFiles/SoapyRadioberrySDR.dir/SoapyRadioberrySettings.cpp.o
/usr/bin/c++ -DSoapyRadioberrySDR_EXPORTS -O3 -DNDEBUG -fPIC -Wall -Wextra -std=gnu++11 -o CMakeFiles/SoapyRadioberrySDR.dir/SoapyRadioberrySettings.cpp.o -c /root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp: In constructor 'SoapyRadioberry::SoapyRadioberry(const Kwargs&)':
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:17:18: error: 'make_unique' is not a member of 'std'
17 | i2c_ptr = std::make_unique<rpihw::driver::i2c> (rpihw::driver::i2c("/dev/i2c-1"));
| ^~~~~~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:17:18: note: 'std::make_unique' is only available from C++14 onwards
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:17:48: error: expected primary-expression before '>' token
17 | i2c_ptr = std::make_unique<rpihw::driver::i2c> (rpihw::driver::i2c("/dev/i2c-1"));
| ^
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:9:59: warning: unused parameter 'args' [-Wunused-parameter]
9 | SoapyRadioberry::SoapyRadioberry( const SoapySDR::Kwargs &args ){
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp: In member function 'virtual size_t SoapyRadioberry::getNumChannels(int) const':
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:103:51: warning: unused parameter 'direction' [-Wunused-parameter]
103 | size_t SoapyRadioberry::getNumChannels( const int direction ) const
| ~~~~~~~~~~^~~~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp: In member function 'virtual bool SoapyRadioberry::getFullDuplex(int, size_t) const':
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:112:48: warning: unused parameter 'direction' [-Wunused-parameter]
112 | bool SoapyRadioberry::getFullDuplex( const int direction, const size_t channel ) const
| ~~~~~~~~~~^~~~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:112:72: warning: unused parameter 'channel' [-Wunused-parameter]
112 | bool SoapyRadioberry::getFullDuplex( const int direction, const size_t channel ) const
| ~~~~~~~~~~~~~^~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp: In member function 'virtual std::vector<double> SoapyRadioberry::listBandwidths(int, size_t) const':
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:119:88: warning: unused parameter 'channel' [-Wunused-parameter]
119 | std::vector<double> SoapyRadioberry::listBandwidths( const int direction, const size_t channel ) const
| ~~~~~~~~~~~~~^~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp: In member function 'virtual std::vector<double> SoapyRadioberry::listSampleRates(int, size_t) const':
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:139:89: warning: unused parameter 'channel' [-Wunused-parameter]
139 | std::vector<double> SoapyRadioberry::listSampleRates( const int direction, const size_t channel ) const
| ~~~~~~~~~~~~~^~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp: In member function 'virtual double SoapyRadioberry::getBandwidth(int, size_t) const':
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:159:73: warning: unused parameter 'channel' [-Wunused-parameter]
159 | double SoapyRadioberry::getBandwidth( const int direction, const size_t channel ) const
| ~~~~~~~~~~~~~^~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp: In member function 'virtual SoapySDR::RangeList SoapyRadioberry::getFrequencyRange(int, size_t) const':
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:179:67: warning: unused parameter 'direction' [-Wunused-parameter]
179 | SoapySDR::RangeList SoapyRadioberry::getFrequencyRange( const int direction, const size_t channel) const
| ~~~~~~~~~~^~~~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:179:91: warning: unused parameter 'channel' [-Wunused-parameter]
179 | SoapySDR::RangeList SoapyRadioberry::getFrequencyRange( const int direction, const size_t channel) const
| ~~~~~~~~~~~~~^~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp: In member function 'virtual std::vector<std::__cxx11::basic_string<char> > SoapyRadioberry::listAntennas(int, size_t) const':
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:190:91: warning: unused parameter 'channel' [-Wunused-parameter]
190 | std::vector<std::string> SoapyRadioberry::listAntennas( const int direction, const size_t channel ) const
| ~~~~~~~~~~~~~^~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp: In member function 'virtual std::vector<std::__cxx11::basic_string<char> > SoapyRadioberry::listGains(int, size_t) const':
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:206:64: warning: unused parameter 'direction' [-Wunused-parameter]
206 | std::vector<std::string> SoapyRadioberry::listGains( const int direction, const size_t channel ) const
| ~~~~~~~~~~^~~~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:206:88: warning: unused parameter 'channel' [-Wunused-parameter]
206 | std::vector<std::string> SoapyRadioberry::listGains( const int direction, const size_t channel ) const
| ~~~~~~~~~~~~~^~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp: In member function 'virtual SoapySDR::Range SoapyRadioberry::getGainRange(int, size_t) const':
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:215:82: warning: unused parameter 'channel' [-Wunused-parameter]
215 | SoapySDR::Range SoapyRadioberry::getGainRange( const int direction, const size_t channel) const
| ~~~~~~~~~~~~~^~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp: In member function 'virtual void SoapyRadioberry::setGain(int, size_t, double)':
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:224:66: warning: unused parameter 'channel' [-Wunused-parameter]
224 | void SoapyRadioberry::setGain( const int direction, const size_t channel, const double value ) {
| ~~~~~~~~~~~~~^~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp: In member function 'virtual void SoapyRadioberry::setFrequency(int, size_t, double, const Kwargs&)':
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:252:71: warning: unused parameter 'channel' [-Wunused-parameter]
252 | void SoapyRadioberry::setFrequency( const int direction, const size_t channel, const double frequency, const SoapySDR::Kwargs &args ) {
| ~~~~~~~~~~~~~^~~~~~~
/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/SoapyRadioberrySettings.cpp:252:129: warning: unused parameter 'args' [-Wunused-parameter]
252 | void SoapyRadioberry::setFrequency( const int direction, const size_t channel, const double frequency, const SoapySDR::Kwargs &args ) {
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~~
make[2]: *** [CMakeFiles/SoapyRadioberrySDR.dir/build.make:95: CMakeFiles/SoapyRadioberrySDR.dir/SoapyRadioberrySettings.cpp.o] Error 1
make[2]: Leaving directory '/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build'
make[1]: *** [CMakeFiles/Makefile2:95: CMakeFiles/SoapyRadioberrySDR.dir/all] Error 2
make[1]: Leaving directory '/root/Radioberry-2.x/SBC/rpi-4/SoapyRadioberrySDR/build'
make: *** [Makefile:160: all] Error 2
Today raspberry pi rolled out major apt update which upgrades kernel to 6.6.
It breaks radioberry driver and it cannot be compiled anymore for both 32 and 64 versions.
compilation has 3 errors:
1) too many arguments for class_create(): Probably it can be fixed by removing first argument "THIS_MODULE," from the call.
/usr/src/linux-headers-6.6.20+rpt-common-rpi/include/linux/device/class.h:230:54: note: expected ‘const char *’ but argument is of type ‘struct module *’
230 | struct class * __must_check class_create(const char *name);
| ~~~~~~~~~~~~^~~~
/home/pi/SRC/radioberry/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:280:26: error: too many arguments to function ‘class_create’
280 | radioberryCharClass = class_create(THIS_MODULE, CLASS_NAME);
| ^~~~~~~~~~~~
2 and 3) functions gpio_export() and gpio_unexport() are not available anymore. It seems that it requires to use gpiod_export and gpiod_unexport but it uses different argument type and is not clear on how to use it:
/home/pi/SRC/radioberry/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:304:9: error: implicit declaration of function ‘gpio_export’; did you mean ‘gpiod_export’? [-Werror=implicit-function-declaration]
304 | gpio_export(gpioRxSamplesiPin, false);
| ^~~~~~~~~~~
| gpiod_export
/home/pi/SRC/radioberry/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:337:5: error: implicit declaration of function ‘gpio_unexport’; did you mean ‘gpiod_unexport’? [-Werror=implicit-function-declaration]
337 | gpio_unexport(gpioRxSamplesiPin);
| ^~~~~~~~~~~~~
| gpiod_unexport
Any info on how to fix it?
Hi Johan,
Just trying to get my Radioberry working. When I try to compile loadFPGA, the makefile recipe fails because README.TXT is missing. The exact error I get is:
cat: README.TXT: no such file or directory
Makefile:21: recipe for target 'all' failed
make: *** [all] Error 1
Any suggestions?
Mike - G4WNC
Hello, is it possible to use radioberry on orange_pi?
What a cool device! Thank you and all involved to bring this to the community.
I'm just barely getting into SDR and that may be the entire issue here, but my new Radioberry isn't pulling in anything. Well, nothing I can actually hear above the noise. I'm wondering if I could have a bad unit, or it's simply operator error and/or poor antenna choice. I really don't know what I'm doing, and am having trouble finding the details I need. I already had the PI 4B, and I just purchased the Radioberry last week at Amazon.
I followed a simple youtube video and installed the 64 bit Bullseye OS, use the user pi, etc etc. I had read that the 64 bit OS wasn't working with the Radioberry, but he used it so I decided to give it a try too. The install was just as describe here. The good news is that it loaded the Radioberry module without any issues. modinfo radioberry returns the following:
filename: /lib/modules/6.1.21-v8+/kernel/drivers/sdr/radioberry.ko
version: 94
license: GPL
description: Radioberry SDR device driver. (rpi-4)
author: Johan Maas - [email protected]
srcversion: 2A58454FC09C5B8E577A4D1
alias: of:NTCsdr,radioberryC*
alias: of:NTCsdr,radioberry
depends:
name: radioberry
vermagic: 6.1.21-v8+ SMP preempt mod_unload modversions aarch64
The next step was to install pihpsdr, which also seems to work as advertised. No errors, both radios give me static and some very faint, just at or below the level of the background noise making it nearly impossible to hear. This is a strong local AM radio station. I live in the Kansas City area, so there are plenty of commercial stations, airports, you name it. I can also use SDRConsole on my Windoze box to access the radio and I get the same results.
The culprit could be the cheap antennas I though would serve me well for an initial test of the system - also off Amazon, two small telescoping antennas 100cm and SMA 50cm. They both perform similarly.
I'd appreciate any suggestions or advice. I just need to make a decision as to return it to Amazon for a new one, or just keep working with this one.
Hi All,
The current SoapyRadioberry driver returns a number of bandwidth which are the same as the sampling frequencies.
If I compare this with other SoapySDR drivers than this is not correct. For example Sdrplay uses bandwidth to indicate the filter options that are placed after the frontend mixer. Because radioberry does not use a frontend mixer, my suggesten is to remove all bandwidths from de Soapyradioberry driver. If this is fine, I will issue a pull request.
I want to add custom controls - at least a rotary encoder (for tuning), and possibly also a 7 segment display (for frequency display) and maybe an rtc/gps. Is there any free I/O on the pi4 with the pi-board attached? I see i2c is used by the piberry, presumably I can piggyback on that? And the SPI port is, I think, being used as generic I/O so is out of bounds? I have seen the pinout on the wiki, but I don't want to do anything stupid that could damage the (valuable, rare!) piberry - so guidance would be most welcome.
Hello, I would like to build a DIY filter with the help of a pca9555a, unfortunately it is not possible for me (due to a lack of knowledge) to control a suitable board.
FPGA i2c or RPi, which FW. Which program does it work with? Basically, I can read addresses 21 and 20 switchably using tools. I would be grateful for a suitable link :-)
Greetings and many thanks for this cool project.
Hello, I see it is very difficult in europe to find the transformer MABA-010143-FLUX18 and it is marked as discontinued on most PCB manufacturing websites. Any alternative?
Hello Folks, kind of new here.
I've been experimenting with my radioberry for a few days now and I noticed that the FPGA config file is getting lost when I turn of the raspberry pi, and I have to use console commands to load the config again... As stated in the datasheet, config files have to be uploaded on every start up, but, is there any way to do it automatically or a component that I should add to the board to prevent config from been lost on power off???
I'm sorry if my question seems to be dumb but it's important to me
Here are some changes that allow the device driver to build for a 64bit kernel
#ifndef RADIOBERRY_IOCTL_H
#define RADIOBERRY_IOCTL_H
#include <linux/types.h>
#include <linux/ioctl.h>
#define RADIOBERRY_MAGIC ('x')
#define RADIOBERRY_IOC_COMMAND _IOW(RADIOBERRY_MAGIC, 1, __u8)
struct rb_info_arg_t
{
int major, minor;
int fpga;
int version;
int rb_command;
int command;
int command_data;
} ;
#endif
/*
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to http://unlicense.org/
sudo cp radioberry.ko /lib/modules/$(uname -r)/kernel/drivers/sdr
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/slab.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/proc_fs.h>
#include <linux/fcntl.h>
#include <linux/io.h>
#include <linux/ioport.h>
#include <linux/uaccess.h>
#include <linux/kthread.h>
#include <linux/sched.h>
#include <linux/delay.h>
#include <linux/firmware.h>
#include <linux/circ_buf.h>
#include <linux/wait.h>
#include <linux/spinlock.h>
#include <linux/err.h>
#include <linux/gpio.h>
#include <linux/gpio/consumer.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/property.h>
#include <linux/interrupt.h>
#include "radioberry_rpi.h"
#include "radioberry_ioctl.h"
#include "radioberry_gateware.h"
#include "radioberry_firmware.h"
#define VERSION "9"
static DEFINE_MUTEX(radioberry_mutex);
static wait_queue_head_t rx_sample_queue;
#define DEVICE_NAME "radioberry"
#define DRIVER_NAME "radioberry"
#define CLASS_NAME "radioberry"
static int majorNumber;
static struct class* radioberryCharClass = NULL;
static struct device* radioberryCharDevice = NULL;
#define SAMPLE_BYTES 512
static int _nrx = 1;
static unsigned int irqNumber;
static unsigned int gpioRxSamplesiPin = 25;
static irq_handler_t radioberry_irq_handler(unsigned int irq, void *dev_id, struct pt_regs *regs){
wake_up_interruptible(&rx_sample_queue);
return (irq_handler_t) IRQ_HANDLED;
}
static void firmware_load(char *firmware, int size) {
printk(KERN_INFO "inside %s function \n", FUNCTION);
u8 *buf = kmalloc(size + 1, GFP_KERNEL);
memcpy(buf, firmware, size);
buf[size] = '\0';
printk(KERN_INFO "Radioberry gateware file size: %d\n", size);
initialize_gateware();
prepare_gateware_loading();
int b = 0;
for (b = 0; b < size; b++) {
upload_gateware_byte(buf[b]);
}
activate_gateware();
kfree(buf);
}
static void loading_radioberry_gateware(struct device *dev) {
printk(KERN_INFO "inside %s function \n", FUNCTION);
const struct firmware *fw_entry;
if (request_firmware(&fw_entry, "radioberry.rbf", dev) != 0 ) {
printk(KERN_ERR "gateware radioberry.rbf: Firmware not available\n");
return;
}
firmware_load(fw_entry->data, fw_entry->size);
release_firmware(fw_entry);
}
static ssize_t radioberry_read(struct file *flip, char *buf, size_t count, loff_t *pos) {
unsigned char rx_stream[SAMPLE_BYTES]={};
wait_event_interruptible(rx_sample_queue, (((*rpi_read_io) >> 25) & 1) != 0);
count = rxStream(_nrx, rx_stream);
if (copy_to_user((char *)buf, &rx_stream, count)) return -EFAULT;
return count;
}
static ssize_t radioberry_write(struct file *flip, const char *buf, size_t count, loff_t *pos) {
unsigned char tx_stream[4];
if (count > 0) {
if (copy_from_user(&tx_stream, buf, sizeof(tx_stream))) {
return -EFAULT;
}
return write_iq_sample(tx_stream);
}
return 0;
}
static int radioberry_open(struct inode *inode, struct file *filep) {
printk(KERN_INFO "inside %s function \n", __FUNCTION__);
if(!mutex_trylock(&radioberry_mutex)){
printk(KERN_ALERT "Radioberry Char: Device in use by another process");
return -EBUSY;
}
int *minor = (int *)kmalloc(sizeof(int), GFP_KERNEL);
int major = MAJOR(inode->i_rdev);
*minor = MINOR(inode->i_rdev);
filep->private_data = (void *)minor;
return 0;
}
static int radioberry_release(struct inode *inode, struct file *filep) {
printk(KERN_INFO "inside %s function \n", __FUNCTION__);
kfree(filep->private_data);
mutex_unlock(&radioberry_mutex);
return 0;
}
static long radioberry_ioctl(struct file *fp, unsigned int cmd, unsigned long arg){
//printk(KERN_INFO "inside %s function \n", __FUNCTION__);
unsigned char data[6];
int lnrx = _nrx;
int rc;
struct rb_info_arg_t *rb_info= kmalloc(sizeof(struct rb_info_arg_t), GFP_DMA);
struct rb_info_arg_t rb_info_ret;
switch(cmd){
case RADIOBERRY_IOC_COMMAND:
rc = copy_from_user(rb_info, (void *)arg, sizeof(struct rb_info_arg_t));
data[0] = ( rb_info->rb_command & 0xFF); //MSB
data[1] = ( rb_info->command & 0xFF);
data[2] = ((rb_info->command_data >> 24) & 0xFF);
data[3] = ((rb_info->command_data >> 16) & 0xFF);
data[4] = ((rb_info->command_data >> 8) & 0xFF);
data[5] = ( rb_info->command_data & 0xFF);
//printk(KERN_INFO "Command kernel %2X - %2X - %2X - %2X - %2X - %2X \n", data[0], data[1], data[2], data[3], data[4], data[5]);
if ((data[1] & 0xFE) == 0x00) lnrx = ((data[5] & 0x38) >> 3) + 1;
// tell the gateware the command.
spiXfer(data, data, 6);
_nrx = lnrx;
// give feedback to firmware.
rb_info_ret.rb_command = data[0]; // return the radioberry status information.
rb_info_ret.major = data[4];
rb_info_ret.minor = data[5];
rb_info_ret.fpga = data[3] & 0x03;
rb_info_ret.version = 9;
if (copy_to_user((struct rb_info_arg_t *)arg, &rb_info_ret, sizeof(struct rb_info_arg_t))) return -EACCES;
break;
default:
return -ENOTTY;
}
return 0;
}
static struct file_operations radioberry_fops = {
.owner = THIS_MODULE,
.open = radioberry_open,
.release = radioberry_release,
.write = radioberry_write,
.read = radioberry_read,
.unlocked_ioctl = radioberry_ioctl
};
static int radioberry_probe(struct platform_device *pdev)
{
printk(KERN_INFO "inside %s function \n", FUNCTION);
struct device *dev = &pdev->dev;
return 0;
}
static int radioberry_remove(struct platform_device *pdev)
{
printk(KERN_INFO "inside %s function \n", FUNCTION);
return 0;
}
static const struct of_device_id of_radioberry_match[] = {
{.compatible = "sdr,radioberry", },
{/*end of list */},
};
MODULE_DEVICE_TABLE(of, of_radioberry_match);
static struct platform_driver radioberry_driver = {
.driver = {
.name = DRIVER_NAME,
.owner = THIS_MODULE,
.of_match_table = of_match_ptr(of_radioberry_match),
},
.probe = radioberry_probe,
.remove = radioberry_remove,
};
static int __init radioberry_init(void) {
int retval;
size_t size;
printk(KERN_INFO "inside %s function \n", __FUNCTION__);
printk(KERN_INFO "%s loading...\n", DRIVER_NAME);
int result = platform_driver_register(&radioberry_driver);
printk(KERN_INFO "platform driver registered %d \n", result);
// Dynamically allocate a major number for the device
majorNumber = register_chrdev(0, DEVICE_NAME, &radioberry_fops);
if (majorNumber<0){
printk(KERN_ALERT "Radioberry driver failed to register a major number\n");
return majorNumber;
}
printk(KERN_INFO "Radioberry: registered correctly with major number %d\n", majorNumber);
// Register the device class
radioberryCharClass = class_create(THIS_MODULE, CLASS_NAME);
if (IS_ERR(radioberryCharClass)){
unregister_chrdev(majorNumber, DEVICE_NAME);
printk(KERN_ALERT "Failed to register device class\n");
return PTR_ERR(radioberryCharClass);
}
printk(KERN_INFO "Radioberry: device class registered correctly\n");
// Register the device driver
radioberryCharDevice = device_create(radioberryCharClass, NULL, MKDEV(majorNumber, 0), NULL, DEVICE_NAME);
if (IS_ERR(radioberryCharDevice)){
class_destroy(radioberryCharClass);
unregister_chrdev(majorNumber, DEVICE_NAME);
printk(KERN_ALERT "Failed to create the device\n");
return PTR_ERR(radioberryCharDevice);
}
printk(KERN_INFO "Radioberry char: device class created correctly\n");
mutex_init(&radioberry_mutex);
init_waitqueue_head(&rx_sample_queue);
//configure irq.
gpio_request(gpioRxSamplesiPin, "sysfs");
gpio_direction_input(gpioRxSamplesiPin);
gpio_export(gpioRxSamplesiPin, false);
printk(KERN_INFO "Radioberry: The rx sample state is currently: %d\n", gpio_get_value(gpioRxSamplesiPin));
// GPIO numbers and IRQ numbers are not the same! This function performs the mapping for us
irqNumber = gpio_to_irq(gpioRxSamplesiPin);
printk(KERN_INFO "Radioberry: The rx samples pin is mapped to IRQ: %d\n", irqNumber);
// This next call requests an interrupt line
result = request_irq(irqNumber,
(irq_handler_t) radioberry_irq_handler,
IRQF_TRIGGER_RISING, // Interrupt on rising edge RQF_TRIGGER_RISING
"radioberry_rx_irq", // Used in /proc/interrupts to identify the owner
NULL);
printk(KERN_INFO "Radioberry: The interrupt request result is: %d\n", result);
initialize_rpi();
loading_radioberry_gateware(radioberryCharDevice);
initialize_firmware();
return result;
}
static void __exit radioberry_exit(void) {
int i;
dev_t devno;
dev_t devno_top;
printk(KERN_INFO "inside %s function \n", __FUNCTION__);
free_irq(irqNumber, NULL);
gpio_unexport(gpioRxSamplesiPin);
platform_driver_unregister(&radioberry_driver);
device_destroy(radioberryCharClass, MKDEV(majorNumber, 0));
class_unregister(radioberryCharClass);
class_destroy(radioberryCharClass);
unregister_chrdev(majorNumber, DEVICE_NAME);
mutex_destroy(&radioberry_mutex);
deinitialize_rpi();
printk(KERN_INFO "Radioberry: Module removed!\n");
}
module_init(radioberry_init);
module_exit(radioberry_exit);
/**
*
*/
MODULE_AUTHOR("Johan Maas - [email protected]");
MODULE_DESCRIPTION("Radioberry SDR device driver. (rpi-4)");
MODULE_SUPPORTED_DEVICE("Radioberry SDR");
MODULE_LICENSE("GPL");
MODULE_VERSION(VERSION);
Is it possible for a future revision of this to use the Secondary Memory Interface(SMI)? It could support a much wider bandwidth streaming into the RPI.
When I was using radioberry, a strange issue appeared
When adjusting the frequency quickly, the noise floor suddenly becomes very high.
Use pihpsdr on the raspberry or Powersdr on PC will meet.
It seems that the gain setting has become very high, and the noise floor has covered everything
Hi,
i bought a Radio Berry V5.0 Board from Aliexpress. "Radio berry v5.0 software definierte Funkgeräte ad9866 10 cl016 für himbeer pi4b rpi4"
I installed a fresh Raspian OS installation (i tried both 32 and 64)
I did the apt updat & upgrade and a firmware update.
now, i try to install radioberry_install.sh:
**============================================
Radioberry software installation.
You will install the following versions:
Gateware version 73.2
Driver version 0.92
Firmware version 2021.09.10
============================================
--- Installing dependency: raspberrypi-kernel-headers
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
raspberrypi-kernel-headers is already the newest version (1:1.20230405-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
--- Installing dependency: linux-headers-rpi
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package linux-headers-rpi
--- Installing dependency: git
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
git is already the newest version (1:2.30.2-1+deb11u2).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
--- Installing dependency: device-tree-compiler
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
device-tree-compiler is already the newest version (1.6.0-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
--- Installing dependency: pigpio
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
pigpio is already the newest version (1.79-1+rpt1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Cloning into 'Radioberry-2.x'...
remote: Enumerating objects: 1021, done.
remote: Counting objects: 100% (1021/1021), done.
remote: Compressing objects: 100% (700/700), done.
remote: Total 1021 (delta 407), reused 759 (delta 279), pack-reused 0
Receiving objects: 100% (1021/1021), 28.47 MiB | 16.79 MiB/s, done.
Resolving deltas: 100% (407/407), done.
Removed /etc/systemd/system/multi-user.target.wants/radioberry.service.
Installing Radioberry gateware Cyclone 10 CL016...
Radioberry gateware Cyclone 10 CL016 installed.
Installing Radioberry driver...
modprobe: FATAL: Module radioberry not found.
make[1]: *** /lib/modules/6.1.41-v8+/build: No such file or directory. Stop.
make: *** [Makefile:6: radioberry.ko] Error 2
cp: cannot stat 'radioberry.ko': No such file or directory
modprobe: FATAL: Module radioberry not found in directory /lib/modules/6.1.41-v8+
chmod: cannot access '/dev/radioberry': No such file or directory
modinfo: ERROR: Module radioberry not found.
Radioberry driver installed.
Installing Radioberry firmware...
rm -f version.o
gcc -g -O3 -c -o register.o register.c
register.c: In function ‘process_http’:
register.c:105:2: warning: implicit declaration of function ‘write’; did you mean ‘fwrite’? [-Wimplicit-function-declaration]
105 | write(sockfd, sendline, strlen(sendline));
| ^~~~~
| fwrite
register.c:107:14: warning: implicit declaration of function ‘read’; did you mean ‘fread’? [-Wimplicit-function-declaration]
107 | while ((n = read(sockfd, recvline, MAXLINE)) > 0) {
| ^~~~
| fread
register.c: In function ‘postRadioberryConfiguration’:
register.c:132:73: warning: implicit declaration of function ‘inet_ntop’ [-Wimplicit-function-declaration]
132 | if (hptr->h_addrtype == AF_INET && (pptr = hptr->h_addr_list) != NULL) inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str));
| ^~~~~~~~~
register.c:137:2: warning: implicit declaration of function ‘inet_pton’ [-Wimplicit-function-declaration]
137 | inet_pton(AF_INET, str, &servaddr.sin_addr);
| ^~~~~~~~~
register.c:141:2: warning: implicit declaration of function ‘close’; did you mean ‘pclose’? [-Wimplicit-function-declaration]
141 | close(sockfd);
| ^~~~~
| pclose
gcc -g -O3 -c -o bias.o bias.c
bias.c: In function ‘init_I2C_bias’:
bias.c:15:10: warning: ‘return’ with a value, in function returning void
15 | return fd_i2c_bias;
| ^~~~~~~~~~~
bias.c:8:6: note: declared here
8 | void init_I2C_bias() {
| ^~~~~~~~~~~~~
bias.c:17:21: warning: implicit declaration of function ‘ioctl’ [-Wimplicit-function-declaration]
17 | i2c_bias_handler = ioctl(fd_i2c_bias, I2C_SLAVE, ADDR_BIAS);
| ^~~~~
bias.c: In function ‘close_I2C_bias’:
bias.c:35:18: warning: comparison between pointer and integer
35 | if (fd_i2c_bias != NULL) close(fd_i2c_bias);
| ^~
gcc -g -O3 -c -o measure.o measure.c
measure.c: In function ‘openI2C_measure’:
measure.c:30:10: warning: ‘return’ with a value, in function returning void
30 | return fd_i2c_measure;
| ^~~~~~~~~~~~~~
measure.c:21:6: note: declared here
21 | void openI2C_measure() {
| ^~~~~~~~~~~~~~~
measure.c:32:24: warning: implicit declaration of function ‘ioctl’ [-Wimplicit-function-declaration]
32 | i2c_measure_handler = ioctl(fd_i2c_measure, I2C_SLAVE, ADDR_MEAS);
| ^~~~~
measure.c: In function ‘close_I2C_measure’:
measure.c:48:21: warning: comparison between pointer and integer
48 | if (fd_i2c_measure != NULL) close(fd_i2c_measure);
| ^~
gcc -g -O3 -c -o radioberry.o radioberry.c
In file included from radioberry.c:56:
radioberry.h:57:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
57 | mask(val) { return val & (CAPACITY - 1); }
| ^~~~
radioberry.h: In function ‘mask’:
radioberry.h:57:1: warning: type of ‘val’ defaults to ‘int’ [-Wimplicit-int]
radioberry.h: At top level:
radioberry.h:58:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
58 | push(val) { assert(!full()); spi_commands[mask(p_write++)] = val; }
| ^~~~
radioberry.h: In function ‘push’:
radioberry.h:58:1: warning: type of ‘val’ defaults to ‘int’ [-Wimplicit-int]
In file included from radioberry.h:18,
from radioberry.c:56:
radioberry.h:58:22: warning: implicit declaration of function ‘full’ [-Wimplicit-function-declaration]
58 | push(val) { assert(!full()); spi_commands[mask(p_write++)] = val; }
| ^~~~
In file included from radioberry.c:56:
radioberry.h: At top level:
radioberry.h:59:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
59 | pop() { assert(!empty()); return spi_commands[mask(p_read++)]; }
| ^~~
In file included from radioberry.h:18,
from radioberry.c:56:
radioberry.h: In function ‘pop’:
radioberry.h:59:22: warning: implicit declaration of function ‘empty’ [-Wimplicit-function-declaration]
59 | pop() { assert(!empty()); return spi_commands[mask(p_read++)]; }
| ^~~~~
In file included from radioberry.c:56:
radioberry.h: At top level:
radioberry.h:60:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
60 | empty() { return p_read == p_write; }
| ^~~~~
radioberry.h:61:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
61 | full() { return size() == CAPACITY; }
| ^~~~
radioberry.h: In function ‘full’:
radioberry.h:61:21: warning: implicit declaration of function ‘size’ [-Wimplicit-function-declaration]
61 | full() { return size() == CAPACITY; }
| ^~~~
radioberry.h: At top level:
radioberry.h:62:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
62 | size() { return p_write - p_read; }
| ^~~~
In file included from radioberry.c:57:
filters.h: In function ‘initFilters’:
filters.h:347:21: warning: implicit declaration of function ‘ioctl’ [-Wimplicit-function-declaration]
347 | i2c_alex_handler = ioctl(fd_i2c_alex, I2C_SLAVE, ADDR_ALEX);
| ^~~~~
radioberry.c: In function ‘initRadioberry’:
radioberry.c:121:2: warning: implicit declaration of function ‘init_I2C_bias’; did you mean ‘write_I2C_bias’? [-Wimplicit-function-declaration]
121 | init_I2C_bias();
| ^~~~~~~~~~~~~
| write_I2C_bias
radioberry.c:125:2: warning: implicit declaration of function ‘pthread_create’ [-Wimplicit-function-declaration]
125 | pthread_create(&pid1, NULL, packetreader, NULL);
| ^~~~~~~~~~~~~~
radioberry.c:128:2: warning: implicit declaration of function ‘start_rb_control_thread’ [-Wimplicit-function-declaration]
128 | start_rb_control_thread();
| ^~~~~~~~~~~~~~~~~~~~~~~
radioberry.c:129:2: warning: implicit declaration of function ‘start_rb_measure_thread’ [-Wimplicit-function-declaration]
129 | start_rb_measure_thread();
| ^~~~~~~~~~~~~~~~~~~~~~~
radioberry.c:186:2: warning: implicit declaration of function ‘start_rb_register_thread’ [-Wimplicit-function-declaration]
186 | start_rb_register_thread();
| ^~~~~~~~~~~~~~~~~~~~~~~~
radioberry.c: In function ‘runRadioberry’:
radioberry.c:200:2: warning: implicit declaration of function ‘start_timer_thread’ [-Wimplicit-function-declaration]
200 | start_timer_thread();
| ^~~~~~~~~~~~~~~~~~
radioberry.c: At top level:
radioberry.c:485:6: warning: conflicting types for ‘start_rb_control_thread’
485 | void start_rb_control_thread() {
| ^~~~~~~~~~~~~~~~~~~~~~~
radioberry.c:128:2: note: previous implicit declaration of ‘start_rb_control_thread’ was here
128 | start_rb_control_thread();
| ^~~~~~~~~~~~~~~~~~~~~~~
radioberry.c:512:6: warning: conflicting types for ‘start_rb_measure_thread’
512 | void start_rb_measure_thread() {
| ^~~~~~~~~~~~~~~~~~~~~~~
radioberry.c:129:2: note: previous implicit declaration of ‘start_rb_measure_thread’ was here
129 | start_rb_measure_thread();
| ^~~~~~~~~~~~~~~~~~~~~~~
radioberry.c:527:6: warning: conflicting types for ‘start_rb_register_thread’
527 | void start_rb_register_thread() {
| ^~~~~~~~~~~~~~~~~~~~~~~~
radioberry.c:186:2: note: previous implicit declaration of ‘start_rb_register_thread’ was here
186 | start_rb_register_thread();
| ^~~~~~~~~~~~~~~~~~~~~~~~
radioberry.c:542:6: warning: conflicting types for ‘start_timer_thread’
542 | void start_timer_thread() {
| ^~~~~~~~~~~~~~~~~~
radioberry.c:200:2: note: previous implicit declaration of ‘start_timer_thread’ was here
200 | start_timer_thread();
| ^~~~~~~~~~~~~~~~~~
gcc -o radioberry register.o bias.o measure.o radioberry.o -lrt -lm -lpthread
Radioberry firmware installed.
Installing radioberry service ...
Radioberry service installed.
Created symlink /etc/systemd/system/multi-user.target.wants/radioberry.service → /etc/systemd/system/radioberry.service.
============================================
Radioberry software is installed!
Have fun using the SDR Radioberry
73 Johan PA3GSB
============================================**
sudo modinfo radioberry
modinfo: ERROR: Module radioberry not found.
Any hint?
Hi,
I wanted to experiment with the beta4 version of the board, so sent it to JLCPCB who have pointed out that there is an error with the PCB at two points (at least).
JLCPCB say the following "Since we can not make blind and buried hole, we only can fabricate the board follow one drilling layer , please kindly check and advise"
There are three .drl files Radioberry.drl, Radioberry-NPTH.drl and Radioberry-PTH.drl. Are all the three files required for fabrication.
Has anyone else faced this issue of fabrication and what steps were taken to resolve this please?
I've attached the image with the vias(?) marked by JLCPB if it helps.
Please let me know how to solve this as I'm not an expert in PCB design.
/RM
Hi,i install with new raspberry pi OS Desktop
i have build error:
make[1]: * /lib/modules/5.10.103-v8+/build: No such file or directory. Stop.
anyone happen?
pi@raspberrypi:~ $ sudo ./i.sh
============================================
Radioberry software installation.
You will install the following versions:
Gateware version 73.2
Driver version 0.92
Firmware version 2021.09.10
============================================
Install CL016 or CL025 radioberry version: 1 = CL016 or 2 = CL025? 2
--- Installing dependency: raspberrypi-kernel-headers
Reading package lists... Done
Building dependency tree
Reading state information... Done
raspberrypi-kernel-headers is already the newest version (1:1.20230425~buster-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
--- Installing dependency: linux-headers-rpi
Reading package lists... Done
Building dependency tree
Reading state information... Done
linux-headers-rpi is already the newest version (4.9+80+deb9u4+rpi2).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
--- Installing dependency: git
Reading package lists... Done
Building dependency tree
Reading state information... Done
git is already the newest version (1:2.20.1-2+deb10u8).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
--- Installing dependency: device-tree-compiler
Reading package lists... Done
Building dependency tree
Reading state information... Done
device-tree-compiler is already the newest version (1.4.7-4).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
--- Installing dependency: pigpio
Reading package lists... Done
Building dependency tree
Reading state information... Done
pigpio is already the newest version (1.79-1+rpt1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
fatal: destination path 'Radioberry-2.x' already exists and is not an empty directory.
Removed /etc/systemd/system/multi-user.target.wants/radioberry.service.
Installing Radioberry gateware Cyclone 10 CL025...
Radioberry gateware Cyclone 10 CL025 installed.
Installing Radioberry driver...
modprobe: FATAL: Module radioberry not found.
make[1]: * /lib/modules/5.10.103-v8+/build: No such file or directory. Stop.
make: * [Makefile:6: radioberry.ko] Error 2
cp: cannot stat 'radioberry.ko': No such file or directory
modprobe: FATAL: Module radioberry not found in directory /lib/modules/5.10.103-v8+
chmod: cannot access '/dev/radioberry': No such file or directory
modinfo: ERROR: Module radioberry not found.
Radioberry driver installed.
Installing Radioberry firmware...
rm -f version.o
Radioberry firmware installed.
Installing radioberry service ...
Radioberry service installed.
Created symlink /etc/systemd/system/multi-user.target.wants/radioberry.service → /etc/systemd/system/radioberry.service.
#uname -r
5.10.103-v8+
/lib/modules/5.10.103-v8+ $ ls
kernel modules.builtin.bin modules.order
modules.alias modules.builtin.modinfo modules.softdep
modules.alias.bin modules.dep modules.symbols
modules.builtin modules.dep.bin modules.symbols.bin
pi@raspberrypi:/lib/modules $ ls 5.10.103-v7l+
build modules.builtin.alias.bin modules.devname
kernel modules.builtin.bin modules.order
modules.alias modules.builtin.modinfo modules.softdep
modules.alias.bin modules.dep modules.symbols
modules.builtin modules.dep.bin modules.symbols.bin
I know it says in the wiki 10CL016YE144C8G and 10CL025 are possible, but what about parts ending in I7G?
The standard part doesn't seem to be in stock anywhere, and the I7G part looks compatible as far as I can tell. and still less expensive then the 25 part.
10CL016YE144I7G
https://www.mouser.ca/ProductDetail/Intel-Altera/10CL016YE144I7G?qs=sGAEpiMZZMvoScKlWpK8TEXJPA3QSkS0VjYIq3om7tY=
Thanks, really looking forward to building this as i've had the PCB for some time now.
hello. i would like to share my thoughts and suggestions.
the Radioberry project itself is amazing. unfortunately though, i found many issues when trying to build it. namely:
pihpsdr_install.sh
and friends always download newest version of repositories.personally i know at least one person that abandoned the project (after actually buying hardware!) since they were not familiar with linux at all, and installation process was way too complicated.
i guess that most people (like i do) don't care what version of Linux runs under the hood. people want stuff that "just works".
most of those RPIs won't be connected to internet, so security probably is not a big concern.
why not make a working image public, so that anyone can just flash SD card with it and be happy with running Radioberry?
Just bought a new Radioberry-2.x. Freshly installed and update OS. Software failed during make command. Error message:
owner@radioberry:/tmp/Radioberry-2.x $ make -j$(nproc)
bash -c 'cd SBC/rpi-4/device_driver/driver && make'
make -C wdsp
make[1]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
cc -I /include -I /include/linux -g -fPIC -O3 -D _GNU_SOURCE -c -o linux_port.o linux_port.c
cc -I /include -I /include/linux -g -fPIC -O3 -D _GNU_SOURCE -c -o amd.o amd.c
cc -I /include -I /include/linux -g -fPIC -O3 -D _GNU_SOURCE -c -o ammod.o ammod.c
make[2]: *** /lib/modules/6.1.0-rpi8-rpi-v8/build: No such file or directory. Stop.
make[1]: *** [Makefile:6: radioberry.ko] Error 2
make: *** [Makefile:26: SBC/rpi-4/device_driver/driver/radioberry.ko] Error 2
make: *** Waiting for unfinished jobs....
cc -I /include -I /include/linux -g -fPIC -O3 -D _GNU_SOURCE -c -o amsq.o amsq.c
In file included from linux_port.c:29:
comm.h:50:10: fatal error: fftw3.h: No such file or directory
50 | #include "fftw3.h"
| ^~~~~~~~~
compilation terminated.
make[1]: *** [Makefile:238: linux_port.o] Error 1
make[1]: *** Waiting for unfinished jobs....
In file included from amd.c:27:
comm.h:50:10: fatal error: fftw3.h: No such file or directory
50 | #include "fftw3.h"
| ^~~~~~~~~
compilation terminated.
make[1]: *** [Makefile:238: amd.o] Error 1
In file included from amsq.c:27:
comm.h:50:10: fatal error: fftw3.h: No such file or directory
50 | #include "fftw3.h"
| ^~~~~~~~~
compilation terminated.
make[1]: *** [Makefile:238: amsq.o] Error 1
In file included from ammod.c:27:
comm.h:50:10: fatal error: fftw3.h: No such file or directory
50 | #include "fftw3.h"
| ^~~~~~~~~
compilation terminated.
make[1]: *** [Makefile:238: ammod.o] Error 1
make: *** [Makefile:53: wdsp/libwdsp.so] Error 2
owner@radioberry:/tmp/Radioberry-2.x $ ^C
OS info:
PRETTY_NAME="Raspbian GNU/Linux 12 (bookworm)"
NAME="Raspbian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
I looked in the /lib/modules/6.1.0-rpi8-rpi-v8/ directory and indeed...there is no build dir. I added it but this did not solve all the problems.
Any suggestions to resolve this would be greatly appreciated.
Jim
KF0BXC
I can't upload the BOM to Octoparts. I select the file, it says "Uploading", then nothing else happens. Anyone having any better luck?
Hi All,
To support duplex streams soapyradioberry need to be updated, setupStream need to store the streamformat per created stream, now it is a global variable, and cloase stream need to close only the correct stream.
I will propose a change in a pull request is that is ok.
install script bug with new bullseye when you use the imager to generate a user. as it will not find the pi user .
script needs to grab $user and apply to script whenit installs\
EC2-3NU seems difficult to source right now. Is there any drop-in replacement you would recommend?
Could I use TX2-3V or TX2-3V-TH?
Thanks
Hi,
did you consider this project with these chips to have direct access to the RF front end?
thanks.
sudTrying to install the Radioberry software and driver on bookworm and running into issues. Everything installs ok but when I restart the device (/dev/radioberry) disappears. If I then re-run the install script in releases it will reappear until the next reboot.
`uname -a
Linux openwebrx.local 6.1.0-rpi7-rpi-v8 #1 SMP PREEMPT Debian 1:6.1.63-1+rpt1 (2023-11-24) aarch64 GNU/Linux
pi@openwebrx:~ $ sudo radioberry
Radioberry V2.0
Supports 4 receivers and 1 transmitter.
Build version: 2022.01.24
Have fun Johan PA3GSB
Report requests or bugs to <[email protected]>.
Failed to open /dev/radioberry: No such file or directory`
Here's what I get from running the install script:
`============================================
Radioberry software installation.
You will install the following versions:
Gateware version 73.3
Driver version 0.94
Firmware version 2022.01.24
============================================
Install CL016 or CL025 radioberry version: 1 = CL016 or 2 = CL025? 2
--- Installing dependency: raspberrypi-kernel-headers
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
raspberrypi-kernel-headers is already the newest version (1:1.20230405-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
--- Installing dependency: linux-headers-rpi
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package linux-headers-rpi
--- Installing dependency: git
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
git is already the newest version (1:2.39.2-1.1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
--- Installing dependency: device-tree-compiler
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
device-tree-compiler is already the newest version (1.6.1-4+b1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
--- Installing dependency: pigpio
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
pigpio is already the newest version (1.79-1+rpt1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Cloning into 'Radioberry-2.x'...
remote: Enumerating objects: 1089, done.
remote: Counting objects: 100% (1089/1089), done.
remote: Compressing objects: 100% (752/752), done.
remote: Total 1089 (delta 429), reused 819 (delta 293), pack-reused 0
Receiving objects: 100% (1089/1089), 30.46 MiB | 8.75 MiB/s, done.
Resolving deltas: 100% (429/429), done.
Removed "/etc/systemd/system/multi-user.target.wants/radioberry.service".
Installing Radioberry gateware Cyclone 10 CL025...
Radioberry gateware Cyclone 10 CL025 installed.
Installing Radioberry driver...
make[1]: Entering directory '/usr/src/linux-headers-6.1.0-rpi7-rpi-v8'
CC [M] /home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.o
In file included from /home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:62:
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry_gateware.h: In function ‘prepare_gateware_loading’:
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry_gateware.h:52:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
52 | int count = 0;
| ^~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c: In function ‘firmware_load’:
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:92:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
92 | u8 *buf = kmalloc(size + 1, GFP_KERNEL);
| ^~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:100:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
100 | int b = 0;
| ^~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c: In function ‘loading_radioberry_gateware’:
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:112:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
112 | const struct firmware *fw_entry;
| ^~~~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:118:31: warning: passing argument 1 of ‘firmware_load’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
118 | firmware_load(fw_entry->data, fw_entry->size);
| ~~~~~~~~^~~~~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:89:33: note: expected ‘char *’ but argument is of type ‘const u8 *’ {aka ‘const unsigned char *’}
89 | static void firmware_load(char *firmware, int size) {
| ~~~~~~^~~~~~~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c: In function ‘radioberry_open’:
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:152:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
152 | int *minor = (int )kmalloc(sizeof(int), GFP_KERNEL);
| ^~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:153:13: warning: unused variable ‘major’ [-Wunused-variable]
153 | int major = MAJOR(inode->i_rdev);
| ^~~~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c: In function ‘radioberry_probe’:
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:234:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
234 | struct device dev = &pdev->dev;
| ^~~~~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:234:24: warning: unused variable ‘dev’ [-Wunused-variable]
234 | struct device dev = &pdev->dev;
| ^~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c: In function ‘radioberry_init’:
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:268:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
268 | int result = platform_driver_register(&radioberry_driver);
| ^~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:314:49: warning: cast between incompatible function types from ‘irqreturn_t ( ()(unsigned int, void , struct pt_regs ))(int, void )’ {aka ‘enum irqreturn ( ()(unsigned int, void , struct pt_regs ))(int, void )’} to ‘irqreturn_t ()(int, void )’ {aka ‘enum irqreturn ()(int, void )’} [-Wcast-function-type]
314 | (irq_handler_t) radioberry_irq_handler,
| ^
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:263:16: warning: unused variable ‘size’ [-Wunused-variable]
263 | size_t size;
| ^~~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:262:13: warning: unused variable ‘retval’ [-Wunused-variable]
262 | int retval;
| ^~~~~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c: In function ‘radioberry_exit’:
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:333:15: warning: unused variable ‘devno_top’ [-Wunused-variable]
333 | dev_t devno_top;
| ^~~~~~~~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:332:15: warning: unused variable ‘devno’ [-Wunused-variable]
332 | dev_t devno;
| ^~~~~
/home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:331:13: warning: unused variable ‘i’ [-Wunused-variable]
331 | int i;
| ^
MODPOST /home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/Module.symvers
CC [M] /home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.mod.o
LD [M] /home/pi/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.ko
make[1]: Leaving directory '/usr/src/linux-headers-6.1.0-rpi7-rpi-v8'
filename: /lib/modules/6.1.0-rpi7-rpi-v8/kernel/drivers/sdr/radioberry.ko
version: 94
license: GPL
description: Radioberry SDR device driver. (rpi-4)
author: Johan Maas - [email protected]
srcversion: 2A58454FC09C5B8E577A4D1
alias: of:NTCsdr,radioberryC
alias: of:NTCsdr,radioberry
depends:
name: radioberry
vermagic: 6.1.0-rpi7-rpi-v8 SMP preempt mod_unload modversions aarch64
Radioberry driver installed.
Installing Radioberry firmware...
rm -f version.o
gcc -g -O3 -c -o register.o register.c
gcc -g -O3 -c -o bias.o bias.c
gcc -g -O3 -c -o measure.o measure.c
gcc -g -O3 -c -o radioberry.o radioberry.c
gcc -o radioberry register.o bias.o measure.o radioberry.o -lrt -lm -lpthread
Radioberry firmware installed.
Installing radioberry service ...
Radioberry service installed.
Created symlink /etc/systemd/system/multi-user.target.wants/radioberry.service → /etc/systemd/system/radioberry.service.
============================================
Radioberry software is installed!
Have fun using the SDR Radioberry
73 Johan PA3GSB
============================================`
After running the script I get this:
`pi@openwebrx:~ $ sudo radioberry
Radioberry V2.0
Supports 4 receivers and 1 transmitter.
Build version: 2022.01.24
Have fun Johan PA3GSB
Report requests or bugs to <[email protected]>.
Failed to open /dev/radioberry: Device or resource busy`
`pi@openwebrx:~ $ sudo systemctl status radioberry
● radioberry.service - Radioberry SDR
Loaded: loaded (/etc/systemd/system/radioberry.service; enabled; preset: enabled)
Active: active (running) since Mon 2024-01-08 10:50:07 PST; 1min 20s ago
Process: 4007 ExecStart=/etc/init.d/radioberryd start (code=exited, status=0/SUCCESS)
Main PID: 4012 (radioberry)
Tasks: 6 (limit: 3912)
CPU: 173ms
CGroup: /system.slice/radioberry.service
└─4012 /usr/local/bin/radioberry
Jan 08 10:50:07 openwebrx.local systemd[1]: Starting radioberry.service - Radioberry SDR...
Jan 08 10:50:07 openwebrx.local sudo[4008]: root : PWD=/ ; USER=root ; COMMAND=/usr/bin/chmod 666 /dev/radioberry
Jan 08 10:50:07 openwebrx.local sudo[4008]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=0)
Jan 08 10:50:07 openwebrx.local sudo[4008]: pam_unix(sudo:session): session closed for user root
Jan 08 10:50:07 openwebrx.local radioberryd[4007]: Start radioberry firmware daemon: OK
Jan 08 10:50:07 openwebrx.local radioberryd[4013]: Mon 8 Jan 10:50:07 PST 2024
Jan 08 10:50:07 openwebrx.local systemd[1]: Started radioberry.service - Radioberry SDR.`
`pi@openwebrx:~ $ sudo systemctl stop radioberry
pi@openwebrx:~ $ sudo radioberry
Radioberry V2.0
Supports 4 receivers and 1 transmitter.
Build version: 2022.01.24
Have fun Johan PA3GSB
Report requests or bugs to <[email protected]>.
Radioberry gateware version 73-3.
No Alex, N2ADR or generic filters interface board connected to radioberry
Radioberry amplifier config failed; only a problem if amplifier is installed.
Radioberry, Starting packet rx part.
Radioberry, Starting packet control part.
Radioberry, Starting packet tx part.`
Everything works fine....but as soon as I reboot the /dev/radioberry will disappear and nothing will work.
`pi@openwebrx:~ $ sudo radioberry
Radioberry V2.0
Supports 4 receivers and 1 transmitter.
Build version: 2022.01.24
Have fun Johan PA3GSB
Report requests or bugs to <[email protected]>.
Failed to open /dev/radioberry: No such file or directory`
What am I missing?
Steve
R201 must be 120 ohm in the BOM 27K is mentioned!
The partnumber is ok! Also the ordernumbers for the different suppliers.
Tnx to VE2NNX Nicolas.
Is it possible to change the Tx channel into Rx2? Is there any plan to have dual-channel coherent receivers?
In Raspberry Pi OS Bookworm, the driver installs OK (thank you) but it seems the radioberry module isn't loading when the Pi reboots, and the radioberry does not restart. Adding radioberry to /etc/modules fixes it. So the installation script may need tweaking.
Hi. Good job!
Can it send mavlink messages?
Intell?
When I run "make -j$(nproc)" I get:
fatal error: fftw3.h: No such file or directory
And when I run " sudo make install FPGATYPE=CL016", I get:
fatal error: wdsp.h: No such file or directory
Regards,
Arne, K4REY
I'm trying to install Radioberry on a brand-new Pi 4.0 Bullseye system that was created using the Pi Imager, with only a pi user account. Radioberry hardware is V 2.0 Beta 4. Followed the installation process here: https://github.com/pa3gsb/Radioberry-2.x/releases
Testing the installation with sudo modinfo radioberry fails with modinfo: ERROR: Module radioberry not found.
Examination of the install script terminal shows one problem when installing dependencies:
--- Installing dependency: linux-headers-rpi
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package linux-headers-rpi
The driver installation fails as shown in the terminal snippet below: (I can provide the complete terminal contents if anyone would like to look at it).
Installing Radioberry gateware Cyclone 10 CL025...
Radioberry gateware Cyclone 10 CL025 installed.
Installing Radioberry driver...
modprobe: FATAL: Module radioberry not found.
make[1]: *** /lib/modules/6.1.21-v8+/build: No such file or directory. Stop.
make: *** [Makefile:6: radioberry.ko] Error 2
cp: cannot stat 'radioberry.ko': No such file or directory
modprobe: FATAL: Module radioberry not found in directory /lib/modules/6.1.21-v8+
chmod: cannot access '/dev/radioberry': No such file or directory
modinfo: ERROR: Module radioberry not found.
Radioberry driver installed.
Installing Radioberry firmware...
(lots of gcc warnings omitted)
Radioberry firmware installed.
Installing radioberry service ...
Radioberry service installed.
My understanding is that the radioberry installation script does everything but the needed kernel module is missing. and I'm not sure what to do about it. Any suggestions would be appreciated.
I have installed pihpsdr and proved that it works using a different H-L on the network, but with it disconnected, discovery naturally comes up empty.
Thanks and 73,
Bob W9RAN
In light of the complete absence of Intel Cyclone 10 FPGAs in the current market, I had a look around for alternatives. I may be able to get my hands on an EP4CE22E22C8N. Is there any possibility that the gateware could be recompiled for this platform? Maybe even with the same pinout so that the existing board could be used? I'd love to give your radio a try but the IC shortage doesn't seem to have an end in sight.
I should add that I'm thoroughly impressed with your work on this project and look forward to seeing a working device in the flesh.
Cheers!
Hi,
I have tried to launch install script on several RPI4 distro, and everytime, install fails with this message:
Radioberry gateware Cyclone 10 CL016 installed.
Installing Radioberry driver...
modprobe: FATAL: Module radioberry not found.
make[1]: *** /lib/modules/6.6.20+rpt-rpi-v8/build: No such file or directory. Stop.
make: *** [Makefile:8: radioberry.ko] Error 2
Radioberry driver installation failed.
You are using a linux version without linux header files; choose an other distro.
I have tried distros Bullseye and Workworm, 32 and 64 bits and result is the same.
If a specific realease of raspberry pi OS is needed please, give me the information...
Thanks for your help
73's Andre
F1FHK
Hi Johan,
I installed radioberry on a fresh image for R Pi 4, but the radioberry service would not start up after reboot.
Finally I found out that the config.txt file has been moved from /boot/config.txt to /boot/firmware/config.txt
I added the line "dtoverlay=radioberry" to the end of the new file.
Now everything is working fine.
73,
Arne
K4REY
Hi,
Beautiful project ! Thank you for sharing this.
I wanted to know if radioberry is compatible with gnuradio. I looked and did not find a way to use Radioberry with GnuRadio. It says that it is compatible with SoapySDR with Paul's library and that SoapySDR is supported by GnuRadio but I could not find a way to link Radioberry to Gnuradio.
Is it compatible ? If yes, how can I communicate to Radioberry with GnuRadio ?
Many Thanks.
Just complied the latest version of piHPSDR and it's working perfectly with an HL2.
However, with the radioberry it goes crazy. See attached screenshots showing a pretty rainbow and excessive CPU usage of both pihpsdr and the radioberry user service.
I'm unsure if this is an issue with piHPSDR, how I compiled it or a bug being hit in the radioberry driver. Once this has happened, no other software can use the radioberry (such as SparkSDR) until you run:
Having to restart the kernel module suggests something is going horribly wrong, somewhere, I'm just not sure where!
I am using the latest stable release of the radioberry driver.
Is radioberry compatible with ODROID-M1?
Hi Johan, hoping going well.
I am looking to run the stable release, without sucessfull results.
I have tried with:
kernel 5.10.17
kernel 5.4.79
kernel 4.19.197
kernel 4.19.18
all are Raspbian 10 Buster.
When you remark:
"The latest linux distro is not working with the stable version... so in case of setup problems you need to use the develop version."
Do you refer to any specific kernel version?, or Raspbian version? (buster, stretch, jessie).
Can you please help us, specifying the version of raspian or kernel, to run the stable version?
Thanks.
73 Omar
XE1SWL Omar
First issue, I'm getting Low Voltage warning when I plug this in using the CanaKit power supply. This is immediately a return item simply based on that.
Second issue, this thing is heating up well beyond 60c on its own, there's no clearance to add a cpu or heatsink fan on the RPi device underneath. I'm thoroughly disappointed because this was a fantastic idea but this is not quite even ready for experimentation without putting the Pi itself at risk of meltdown. I hope you find this as constructive feedback. I really want one of these when you get the bugs worked out.
I followed the instruction and I get the final messages at the end
Steps from the Amazon purchase page instructions..
Job for radioberry.service failed because the control process exited with error code.
See "systemctl status radioberry.service" and "journalctl -xeu radioberry.service" for details.
radioberry.service - Radioberry SDR
Loaded: loaded (/etc/systemd/system/radioberry.service; enabled; preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Sat 2024-07-20 09:27:14 EDT; 8s ago
Process: 6199 ExecStart=/etc/init.d/radioberryd start (code=exited, status=217/USER)
CPU: 0
Steps from here on github
*/tmp/Radioberry-2.x $ make -j$(nproc)
bash -c 'cd SBC/rpi-4/device_driver/driver && make'
make -C SBC/rpi-4/device_driver/firmware
make -C wdsp
make[1]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
rm -f version.o
gcc -g -O3 -c -o register.o register.c
gcc -g -O3 -c -o bias.o bias.c
cc -I /include -I /include/linux -g -fPIC -O3 -D _GNU_SOURCE -c -o linux_port.o linux_port.c
gcc -g -O3 -c -o measure.o measure.c
In file included from linux_port.c:29:
comm.h:50:10: fatal error: fftw3.h: No such file or directory
50 | #include "fftw3.h"
| ^~~~~~~~~
compilation terminated.
make[1]: *** [Makefile:238: linux_port.o] Error 1
make: *** [Makefile:53: wdsp/libwdsp.so] Error 2
make: *** Waiting for unfinished jobs....
gcc -g -O3 -c -o radioberry.o radioberry.c
CC [M] /tmp/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.o
gcc -o radioberry register.o bias.o measure.o radioberry.o -lrt -lm -lpthread
/tmp/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c: In function 'radioberry_probe':
/tmp/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.c:300:49: warning: cast between incompatible function types from 'irqreturn_t ( (*)(unsigned int, void *, struct pt_regs ))(int, void )' {aka 'enum irqreturn ( ()(unsigned int, void *, struct pt_regs ))(int, void )'} to 'irqreturn_t ()(int, void )' {aka 'enum irqreturn ()(int, void )'} [-Wcast-function-type]
300 | (irq_handler_t) radioberry_irq_handler,
| ^
MODPOST /tmp/Radioberry-2.x/SBC/rpi-4/device_driver/driver/Module.symvers
CC [M] /tmp/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.mod.o
LD [M] /tmp/Radioberry-2.x/SBC/rpi-4/device_driver/driver/radioberry.ko
dtc -@ -I dts -O dtb -o radioberry.dtbo radioberry.dts
echo Build Device Tree Overlay and kernel module.
Build Device Tree Overlay and kernel module.
**/tmp/Radioberry-2.x $ sudo make install FPGATYPE=CL016
bash -c 'cd SBC/rpi-4/device_driver/driver && make'
dtc -@ -I dts -O dtb -o radioberry.dtbo radioberry.dts
echo Build Device Tree Overlay and kernel module.
Build Device Tree Overlay and kernel module.
echo make -C SBC/rpi-4/device_driver/driver install
make -C SBC/rpi-4/device_driver/driver install
Radioberry gateware Cyclone 10 CL016 installed.
install SBC/rpi-4/releases/dev/CL016/radioberry.rbf /lib/firmware
install SBC/rpi-4/device_driver/systemd/radioberry.service /etc/systemd/system/
install SBC/rpi-4/device_driver/systemd/radioberryd /etc/init.d/
chmod +x /etc/init.d/radioberryd
make -C pihpsdr install GPIO_INCLUDE= PURESIGNAL_INCLUDE= MIDI_INCLUDE=MIDI
fatal: No names found, cannot describe anything.
gcc -g -Wno-deprecated-declarations -D MIDI -D GIT_DATE='"2022-01-25"' -D GIT_VERSION='""' pkg-config --cflags gtk+-3.0
-c -o MacOS.o MacOS.c
gcc -g -Wno-deprecated-declarations -D MIDI -D GIT_DATE='"2022-01-25"' -D GIT_VERSION='""' pkg-config --cflags gtk+-3.0
-c -o band.o band.c
gcc -g -Wno-deprecated-declarations -D MIDI -D GIT_DATE='"2022-01-25"' -D GIT_VERSION='""' pkg-config --cflags gtk+-3.0
-c -o discovered.o discovered.c
gcc -g -Wno-deprecated-declarations -D MIDI -D GIT_DATE='"2022-01-25"' -D GIT_VERSION='""' pkg-config --cflags gtk+-3.0
-c -o discovery.o discovery.c
gcc -g -Wno-deprecated-declarations -D MIDI -D GIT_DATE='"2022-01-25"' -D GIT_VERSION='""' pkg-config --cflags gtk+-3.0
-c -o filter.o filter.c
gcc -g -Wno-deprecated-declarations -D MIDI -D GIT_DATE='"2022-01-25"' -D GIT_VERSION='""' pkg-config --cflags gtk+-3.0
-c -o version.o version.c
gcc -g -Wno-deprecated-declarations -D MIDI -D GIT_DATE='"2022-01-25"' -D GIT_VERSION='""' pkg-config --cflags gtk+-3.0
-c -o main.o main.c
main.c:49:10: fatal error: wdsp.h: No such file or directory
49 | #include "wdsp.h"
| ^~~~~~~~
compilation terminated.
make[1]: *** [Makefile:219: main.o] Error 1
make: *** [Makefile:84: install-software] Error 2**
Note: my user is NOT "pi".
Also I'd REALLY appreciate an uninstall... thanks!
Running RPi 4b
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.