Рубрики
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
Рубрики
orangepi

home-assistant / orangepi cm4 / debian 12 / container

Links:

http://www.orangepi.org/orangepiwiki/index.php/Orange_Pi_CM4 - инструкции
http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html - инструкции
https://drive.google.com/drive/folders/1MJl-pIU2I7EHDN6rlirumVkBOz7utvyE - другие образы 
https://drive.google.com/file/d/1v7q46pRilxLxOvBu_dz5CscEU7ifb9mS/view?usp=drive_link  - образ диска дебиана
https://drive.google.com/drive/folders/1m3pEc9Oib9JYOaiHP2TUx89Qq5Zd-tT6 - различные ультелиты
https://drive.google.com/file/d/1dAaW_FetnrKWsNU8HrOoYkZBOh0q8WNJ/view?usp=drive_link - пре загрузчик для devrktool

https://www.home-assistant.io/installation/#about-installation-methods
https://www.home-assistant.io/installation/raspberrypi/

https://www.home-assistant.io/installation/raspberrypi-other
https://www.home-assistant.io/installation/raspberrypi/
https://www.home-assistant.io/installation/linux
https://www.home-assistant.io/installation/alternative

https://github.com/NabuCasa/buildroot-installer/releases
https://github.com/home-assistant/buildroot
https://github.com/home-assistant/operating-system/releases/download/16.1/haos_rpi4-64-16.1.img.xz

https://developers.home-assistant.io/docs/operating-system/getting-started

https://docs.docker.com/compose/install/linux/
https://docs.docker.com/engine/install/debian/#install-using-the-repository
https://docs.docker.com/engine/install/debian/#install-using-the-repository

Install:

apt-get update
apt-get install docker-compose-plugin

docker compose version

Install Docker from repo docker:

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo docker run hello-world

Install docker from docker get:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Uninstall Docker Engine:

sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.asc

install home-assist:

https://www.home-assistant.io/installation/odroid

apt-get install docker-compose-plugin

cd /opt
mkdir home-assistant
cd home-assistant
cat > compose.yaml << "EOF"
services:
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - /PATH_TO_YOUR_CONFIG:/config
      - /etc/localtime:/etc/localtime:ro
      - /run/dbus:/run/dbus:ro
    restart: unless-stopped
    privileged: true
    network_mode: host
    devices:
      - /dev/ttyS9:/dev/ttyS9
    environment:
      DISABLE_JEMALLOC: true
EOF

Проброс железяки в докер:
- /dev/ttyS9:/dev/ttyS9
- /dev/ttyUSB0:/dev/ttyUSB0

Отключение OOM Killer для контейнера:
DISABLE_JEMALLOC: true

Запуск всего безобразия:
docker compose up -d

cm4 env:

cat /boot/orangepiEnv.txt 
-------------------------
verbosity=1
bootlogo=false
extraargs=cma=128M
overlay_prefix=rk356x
rootdev=UUID=a0f8ca89-7eb7-4a1e-947a-2341637b4782
rootfstype=ext4
overlays=uart3-m0 uart7-m2 uart9-m2
console=serial
-------------------------
Рубрики
orangepi

home-assistant / orangepi cm4 / install supervised / depricated

links:

https://github.com/home-assistant/os-agent/releases
https://github.com/home-assistant/supervised-installer/releases/

install:

0. Обновляем ос:
apt update  -y && apt upgrade -y 

1. Ставим docker:
sudo  curl -fsSL get.docker.com | sh

2. Добавляем текущего юзера в группу docker:
sudo usermod -aG docker $USER

3. Ставим дополнительные пакеты:
sudo apt install -y jq wget curl udisks2 libglib2.0-bin network-manager dbus


4. Ставим os-agent:
wget https://github.com/home-assistant/os-agent/releases/download/1.7.2/os-agent_1.7.2_linux_aarch64.deb 
sudo apt install ./os-agent_1.7.2_linux_aarch64.deb

5. Cтавим AppArmor:
sudo apt install apparmor


6. Ставим Home Assistant:
wget https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb
sudo apt install  ./homeassistant-supervised.deb


6.1 Ошибка пакет "homeassistant-supervised" не ставится:
dpkg: regarding homeassistant-supervised.deb containing homeassistant-supervised, pre-dependency problem:
 homeassistant-supervised pre-depends on systemd-timesyncd
  systemd-timesyncd is not installed.
dpkg: error processing archive homeassistant-supervised.deb (--install):
 pre-dependency problem - not installing homeassistant-supervised
Errors were encountered while processing:
Выполняем:
sudo apt --fix-broken install
И пробуем поставить пакет заново

6.2 Ошибка:
[info] Waiting for https://checkonline.home-assistant.io/online.txt - network interface might be down...
У вас проблемы с DNS. 
ping ya.ru
если не ок
можно временно поправить файл /etc/resolv добавив строку "nameserver 8.8.8.8"
после установки разберитесь с днс

7. В окошке выбора типа архитектуры выбираем odroid-c2.
ждем мин 5 и пробуем подключится http://YOU_IP:8112
ждем окончания установки

apparmor err

cat /boot/orangepiEnv.txt
-------------------------
verbosity=1
bootlogo=false
extraargs=cma=128M
overlay_prefix=rk356x
rootdev=UUID=a0f8ca89-7eb7-4a1e-947a-2341637b4782
rootfstype=ext4
overlays=uart3-m0
console=serial
apparmor=1 security=apparmor
-------------------------

P.S

А теперь о печальном.
Этот способ установки будет жить и поддерживается до 2025.12.

https://www.home-assistant.io/blog/2025/05/22/deprecating-core-and-supervised-installation-methods-and-32-bit-systems/
из линка:
Поскольку сегодня мы объявили устаревшими методы установки Core и Supervised, мы работаем над удалением всех упоминаний о них из нашей документации.
Рубрики
orangepi

home-assistant / kvm / install

link:

https://www.home-assistant.io/installation/linux
https://github.com/home-assistant/operating-system/releases/download/16.0/haos_ova-16.0.qcow2.xz

Видос:


Поддерживаемые устройства:
https://www.home-assistant.io/integrations/zha/#compatible-hardware%C3%90%C2%A3%C3%91%C2%81%C3%91%C2%82%C3%90%C2%B0%C3%90%C2%BD%C3%90%C2%BE%C3%90%C2%B2%C3%90%C2%BA%C3%90%C2%B0

Образы под arm на гитхаб:
https://github.com/home-assistant/operating-system/releases

образ под arm64:
https://github.com/home-assistant/operating-system/releases/download/16.1/haos_generic-aarch64-16.1.qcow2.xz

Пред настройка kvm:

0. Ставим пакеты:
apt install cockpit-networkmanager  cockpit-machines cockpit-storaged cockpit-ws cockpit-packagekit cockpit-podman
apt install qemu-kvm libvirt-daemon-system ovmf  virtinst
apt install openvswitch-switch

#Под arm64
apt-get install qemu-utils qemu-efi-aarch64 qemu-system-arm  qemu-efi-aarch64 qemu-system-arm qemu-user-static osinfo-db
apt install virt-manager libvirt0 qemu-system libvirt-daemon libvirt-daemon-system libvirt-daemon-system-systemd libvirt-clients libvirt-daemon-config-network qemu-efi-arm qemu-efi-aarch64

usermod -aG kvm user_name
usermod -aG libvirt user_name 

2. Создаем бридж ovs:
ovs-vsctl show
ovs-vsctl add-br ovsbr0
ovs-vsctl add-port ovsbr0 end1
где ovsbr0 - бридж и end1 - сетевая карта

3. Отключаем NetworkManage и настраиваем networking
systemctl disable NetworkManager
systemctl enable networking.service 
vim /etc/network/interfaces
---------------------------
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto end1 
iface end1 inet manual

auto ovsbr0
iface ovsbr0 inet dhcp
---------------------------

Создаем сеть:
vim ovsbr0.xml
-------------------------------------------
<network>
  <name>default</name>
  <forward mode='bridge'/>
  <bridge name='ovsbr0'/>
  <virtualport type='openvswitch'/>
</network>
-------------------------------------------

virsh net-destroy default
irsh net-undefine default 
virsh net-create --file /root/ovsbr0.xml
virsh net-autostart default
virsh net-start default

wget:

wget https://github.com/home-assistant/operating-system/releases/download/16.0/haos_ova-16.0.qcow2.xz 
unxz haos_ova-16.0.qcow2.xz 

install virt-manage:

1. Create a new virtual machine in virt-manager.
2. Select Import existing disk image, provide the path to the QCOW2 image above.
3. Choose Generic Default for the operating system.
4. Check the box for Customize configuration before install.
5.Under Network Selection, select your bridge.
Under customization select Overview > Firmware > UEFI x86_64: …. Make sure to select a non-secureboot version of OVMF (does not contain the word secure, secboot, etc.), e.g., /usr/share/edk2/ovmf/OVMF_CODE.fd.
7. Click Add Hardware (bottom left), and select Channel.
8. Select device type: unix.
9. Select name: org.qemu.guest_agent.0.
10 Finally, select Begin Installation (upper left corner).

install virt-install:

virt-install --name haos \
--description "Home Assistant OS" \
--os-variant=generic \
--ram=4096 \
--vcpus=2 \
--disk ,bus=scsi \
--controller type=scsi,model=virtio-scsi \
--import \
--graphics none \
--boot uefi

install virt arm:

cd /var/lib/libvirt/images
wget https://github.com/home-assistant/operating-system/releases/download/16.1/haos_generic-aarch64-16.1.qcow2.xz


virt-install --name haos \
--description "Home Assistant OS" \
--os-variant=generic \
--osinfo generic \
--ram=2048 --vcpus=2 \
--disk haos_generic-aarch64-16.1.qcow2,bus=scsi \
--controller type=scsi,model=virtio-scsi \
--import --graphics none \
--boot uefi

HACS

HACS - дополнительные интеграции
links:
https://io-home.ru/home-assistant/integrations/ssh-dostup-v-home-assistant/
https://io-home.ru/home-assistant/integrations/dobavljaem-hacs-v-home-assistant/

!!! Вам понадобится учетная запись на Github

0. Установка терминала:
Настройки -> Дополнения -> Магазин дополнений = SSH & Web Terminal

1. В терминале ставим:
1.1 Ставим:
wget -O - https://get.hacs.xyz | bash -
1.2 Перезагружаем:
reboot
2. Устанавливаем HACS
Настройки -> Устройства и службы  -> Добавить интеграцию = HACS

Рубрики
orangepi

orangepi cm4 / uart3 / uart7 / uart9 / test

links:

https://drive.google.com/drive/folders/1lbEI5JdLWwI6y9VoGM0nioFDhzF79QSu
http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-Zero-2W.html

work


#Конфиг env boot:
root@orangepicm4:~# cat /boot/orangepiEnv.txt 
verbosity=1
bootlogo=false
extraargs=cma=128M
overlay_prefix=rk356x
rootdev=UUID=a0f8ca89-7eb7-4a1e-947a-2341637b4782
rootfstype=ext4
overlays=uart3-m0 uart7-m2 uart9-m2
console=serial


#скрипт 1
root@orangepicm4:~# cat uart9.txt
#!/bin/bash
#

xxx=0

while :
do
        echo -n -e "\nHello UART9! ${xxx}"
        echo -n -e "\nHello UART9! ${xxx} \r" > /dev/ttyS9
        #sleep 1
        let xxx++
done

#скрипт 2
root@orangepicm4:~# cat uart7.txt
#!/bin/bash
#

xxx=0

while :
do
        echo -n -e "\nHello UART7! ${xxx}"
        echo -n -e "\nHello UART7! ${xxx} \r" > /dev/ttyS7
        #sleep 1
        let xxx++
done



# Настройка UART7 (например, 115200 бод, 8 бит, без контроля чётности, 1 стоп-бит)
sudo stty -F /dev/ttyS7 115200 cs8 -parenb -cstopb

# Настройка UART9 (такие же параметры)
sudo stty -F /dev/ttyS9 115200 cs8 -parenb -cstopb

Проверить настройки можно так:
stty -F /dev/ttyS7 -a
stty -F /dev/ttyS9 -a
echo "Hello UART!" > /dev/ttyS7
echo "Hello UART!" > /dev/ttyS9


mincom -D /dev/ttyS7 -b 115200
mincom -D /dev/ttyS9 -b 115200


screen /dev/ttyS7 115200
screen /dev/ttyS9 115200


echo "Hello UART!" > /dev/ttyS7
echo "Hello UART!" > /dev/ttyS9
Рубрики
orangepi

orangepi cm4 / i2c / rtc / ds1338 / ds1307 / hwclock

Проверяем а если часы:
dmesg | grep rtc


Проверяем какие модули загружены:
lsmod 

Проверяем что у нас на шине i2c (у нас часы имеют адрес 68)
i2cdetect -y 1

Пробуем прочитать регистры:
i2cget -y 1 0x68 0x00
for reg in {0..6}; do      echo "Регистр 0x0$reg: $(i2cget -y 1 0x68 0x0$reg)";  done

Пробуем изменить вывод на 24 часа:
i2cset -y 1 0x68 0x02 0x12

Добавляем часы в систему что бы можно было с ними взаимодействовать
modprobe rtc-ds1307
echo "ds1307 0x68" > /sys/class/i2c-adapter/i2c-1/new_device
dmesg | grep rtc
hwclock -s -f /dev/rtc1

# Запись системного времени в RTC
hwclock --systohc
hwclock --systohc -f /dev/rtc1

# Чтение времени из RTC
hwclock -v 
hwclock -v -f /dev/rtc1

Для автоматического включения модуля ядра rtc-ds1307:
echo "rtc-ds1307" >> /etc/modules


python script:

apt install python3-smbus2 


cat > clock.py << "EOF"
from smbus2 import SMBus
import time

I2C_BUS = 1      # номер шины (0 или 1)
DEV_ADDR = 0x68  # адрес DES3338 на шине

with SMBus(I2C_BUS) as bus:
    # Чтение 7 байт (секунды, минуты, часы...)
    data = bus.read_i2c_block_data(DEV_ADDR, 0x00, 7)
    print(f"Время: {data[2]}:{data[1]}:{data[0]}")
EOF


python clock.py