Рубрики
orangepi

orangepi cm4 / make driver peraso

Links:

# https://perasoinc.com/perspectus-series/
# http://www.orangepi.org/orangepiwiki/index.php/Orange_Pi_CM4
# https://device.report/manual/7926893

Собственно где брать heders-linux debian bookworm:

0.Пере установкой хедеров убедимся что все пакеты для сборки стоят:
apt update
apt upgrade -y 
apt install git make gcc linux-libc-dev pkg-config libncurses-dev flex bison  libssl-dev libelf-dev dwarves rsync bc fakeroot build-essential  xz-utils  libncurses5-dev
apt install gcc-arm-linux-gnueabihf

1. Из документации по orangepi хедеры на текущее ядро лежат в каталоге /opt
Проверив этот каталог мы увидим deb файл, который просто нужно доставить в систему:
dpkg -i /opt/linux-headers-legacy-rockchip-rk356x_1.x.x_arm64.deb

2. После установки у нас появятся в каталоге /usr/src хедеры ядра
ls /usr/src

Так же из документации orangepi есть пример как собирать костюмный модуль ядра:

#0. Создаем код модуля ядра
cat >  hello.c << "EOF"
#include 
#include 

static int hello_init(void)
{
printk("Hello Orange Pi -- init\n");
return 0;
}
static void hello_exit(void)
{
printk("Hello Orange Pi -- exit\n");
return;
}

module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
EOF

#1. Создаем Makefaile для сборки модуля
cat > Makefile << "EOF"
ifneq ($(KERNELRELEASE),)
obj-m:=hello.o
else
KDIR :=/lib/modules/$(shell uname -r)/build
PWD :=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod *.symvers *.cmd *.mod.c *.order
endif
EOF


#2. Собираем
make V=1

#3. Проверяем что собралось
ls *.ko

#4. Загружаем модуль ядра (вообще лучше такое делать через modprobe вместо ismod)
insmod hello.ko

#5. Проверяем что наш модуль загрузился
dmesg | grep "Hello"

#6. Выгружаем модуль ядра
rmmod hello

Сборка peraso

# Для потомков 
# root@peraso1:/opt/13.3.328/src/drivers/net/wireless/prs# uname -a
# Linux peraso1 5.10.160-rockchip-rk356x #1.0.6 SMP Mon May 27 17:03:18 CST 2024 aarch64 GNU/Linux
# root@peraso1:/opt/13.3.328/src/drivers/net/wireless/prs# lsusb
# Bus 006 Device 002: ID 2932:0720 Peraso Technologies Inc. Peraso PRS460


0. Переходим в каталог с Makefile
cd /opt/13.3.328/src/drivers/net/wireless/prs

1. Собираем модуль 
make -C /lib/modules/5.10.160-rockchip-rk356x/build M=$PWD CONFIG_PRS_FALCON=m modules V=1

2. Пробуем подгрузить собравшийся модуль:
insmod prs_falcon.ko 

3. Проверяем 
lsmod | grep prs_falcon
dmesg | grep prs_falcon 

4. Если все ок и ошибок в третьем пункте нет, продолжаем:
4.1 Копируем модуля ядра в каталок к модулям текущего ядра:
cp prs_falcon.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/
4.2 Обновляем зависимости
depmod -a
4.3 Пробуем загрузить:
modprobe prs_falcon

5. Проверяем сделанное:
lsmod | grep prs
dmesg | tail -20

Запуск точки доступа и клиента:

Клиент Client:
wpa_supplicant -D nl80211  -i wlan0 -c /etc/wpa_supplicant.conf -B
wpa_supplicant -Dnl80211 -iwlan0 -c wpa.conf
wpa_supplicant -Dwext -iwlx20cec40343d9 -c wpa_suplicant.conf 

Точка доступа AP:
hostapd -B /etc/hostapd.conf
hostapd -dddd -g /var/run/hostapd/global hostapd.conf



Пример конфига hostapd:
cat > hostapd.conf << EOF
driver=nl80211
interface=wlx20cec40343d9
ssid=clear-link
channel=2
hw_mode=ad
country_code=US
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
EOF


Пример конфига wpa_supplicant:
cat > wpa_suplicant.conf << "EOF"
ctrl_interface=/var/run/wpa_supplicant 
network={ 
  ssid="clear-link" 
  frequency=60480
  scan_ssid=1 
  key_mgmt=NONE 
}
EOF



Тест:
wpa_supplicant -Dnl80211 -iwlx20cec40343da -c wpa_suplicant.conf 
hostapd -dddd -g /var/run/hostapd/global hostapd.conf