Собственно где брать 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
0. Ставим пакеты:
apt install git libudev-dev libusb-1.0-0-dev dh-autoreconf
# На случай ошибки при configure с libusb, нужно доставить эти пакеты:
apt install pkg-config libusb-1.0
1. Качаем дистрибутив rkdevtool
cd /opt
git clone https://github.com/rockchip-linux/rkdeveloptool
2. Входим в каталог
cd /opt/rkdeveloptool
3. Выполняем:
./autogen.sh
4. Выполняем:
./configure
!!! если все успешно то у вас появится Makefile
5. Производим сборку
make
6. Производим установку в систему:
make install
Основные команды:
rkdevtool ld - показать устройства в maskrom
rkdevtool db name_boot_loder - загрузка загрузчика (мелкий файл)
rkdevtool wl 0 name_image - загрузка образа системы (большой файл)
Пустой образ или затереть nand:
создаем образ пустой
dd if=/dev/zero cont=500 bs=1M of=zero.img
rkdevtool db грузим_загручик
записываем пустышку
rkdevtool wl 0 zero.img
# Ставлю под рутом ^_^
0. Ставим пакеты:
apt-get install -y curl
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
apt-get install -y nodejs git make g++ gcc libsystemd-dev tmux
apt install -y mosquitto mosquitto-clients
corepack enable
1. Создадим каталог
mkdir /opt/zigbee2mqtt
2. На случай если ставили не от рута нужно дать права на каталог
sudo chown -R ${USER}: /opt/zigbee2mqtt
3. Скачиваем гит в каталог
git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
4. Переходим в каталог:
cd /opt/zigbee2mqtt
5. Запустим tmux и продолжим сборку в нем:
tmux
6. Собираем приложение:
pnpm install --frozen-lockfile
6.1 !!! Вот тут могут возникнуть проблемы, если у вас мало оперативки скорее всего сборка зависнет, запустим в один поток сборку
pnpm install --frozen-lockfile --child-concurrency=1
7. После сборки выполняем запуск:
cd /opt/zigbee2mqtt
pnpm start
А теперь о печальном.
Этот способ установки будет жить и поддерживается до 2025.12.
https://www.home-assistant.io/blog/2025/05/22/deprecating-core-and-supervised-installation-methods-and-32-bit-systems/
из линка:
Поскольку сегодня мы объявили устаревшими методы установки Core и Supervised, мы работаем над удалением всех упоминаний о них из нашей документации.
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.youtube.com/watch?v=zLC8GuOkHl0&ab_channel=ArmenakAvetisyan
Поддерживаемые устройства:
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
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).
Проверяем а если часы:
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
общие команды:
logout - Быстрый выход из сессии интерфейса командной строки config, global-viewconfig
do - Выполнение команды глобального режима CLI (command_sequence) без выхода из режима конфигурирования config
root - Выход на верхний уровень режима конфигурирования config
end - Выход из любого уровня режима конфигурирования в глобальный режим config
quit - Выход из сессии интерфейса командной строки global-view
В глобальном режиме интерфейса командной строки доступны команды просмотра оперативного состояния системы (show-команды),
команды управления компонентами системы (например, reload, hw-module),
запуска различных диагностических тестов и работы с образами операционной системы.
Для уменьшения объема отображаемых данных в ответ за запросы пользователя и облегчения поиска необходимой информации можно воспользоваться фильтрацией.
Для фильтрации вывода команд нужно добавить в конец командной строки символ "|" и использовать одну из опций фильтрации:
formal — модификация выводов "show running-config" и "show candidate-config" из древовидного в линейный
begin — выводить всё после строки, содержащей заданный шаблон
include — выводить все строки, содержащие заданный шаблон
exclude — выводить все строки, не содержащие заданный шаблон
count — произвести подсчёт количества строк в выводе команды.
без конфигуре global-view :
rootshell - попасть в linux shell :)
show interfaces description - показать статус интерфейсов
show running-config - показать конфигурацию устройства
show candidate-config - Вывести кандидат-конфигурацию устройства.
configure - Перейти из глобального режима CLI в режим конфигурирования.
в configure:
commit - Применить кандидат-конфигурацию(применить изменения, внесенные во время сеанса редактирования).
abort - Отменить изменения в кандидат конфигурации и выйти из режим конфигурирования.
При выполнении этой команды кандидат-конфигурация становится идентичной текущей (стартовой) конфигурации.
Тип интерфейса:
Физические интерфейсы:
Обозначение физического интерфейса включает в себя его тип и идентификатор.
Идентификатор имеет вид //, где:
- номер устройства в кластере устройств;
- номер модуля в составе устройства;
- порядковый номер интерфейса данного типа в модуле.
Интерфейсы 10Гбит/с Ethernet tengigabitethernet // tengigabitethernet 0/0/10 te 0/0/10
Интерфейсы 40Гбит/с Ethernet fourtygigabitethernet // fourtygigabitethernet 0/0/2 fo 0/0/2
Интерфейсы 100Гбит/с Ethernet hundredgigabitethernet // hundredgigabitethernet 0/0/3 hu 0/0/3
Физические интерфейсы всегда присутствуют в системе.
Группы агрегации каналов bundle-ether bundle-ether 8
Группы агрегации каналов в системе можно создавать и удалять.
Сабинтерфейсы
bundle-ether .
tengigabitethernet //.
fourtygigabitethernet //.
hundredgigabitethernet //.
Сабинтерфейсы в системе можно создавать и удалять.
Интерфейсы локальной петли loopback loopback 100
Интерфейсы локальной петли в системе можно создавать и удалять.
Интерфейсы управления mgmt //
Интерфейсы out-of-band управления - это выделенные ethernetинтерфейсы для доступа и управления маршрутизатором.
В качестве могут выступать 'fmc0' и 'fmc1', в зависимости от аппаратной конфигурации.
'mgmt 0/fmc0/1' - для ME5100
'mgmt 0/fmc0/0' и 'mgmt 0/fmc0/1' для FMC0 в маршрутизаторе ME5000
'mgmt 0/fmc1/0' и 'mgmt 0/fmc1/1' для FMC1 в маршрутизаторе ME5000
Интерфейсы управления всегда присутствуют в системе.
IMPORTANT
Интерфейсы управления не предназначены для передачи транзитного трафика (не участвуют в работе dataplane) и жестко прикреплены к VRF 'mgmt-intf'.
change-privilege Данной командой осуществляется переход на соответствующий уровень привилегий.
change-privilege { p1 | p2 | … | p15 } [ PASSWORD ]
change-privilege p15 mypassword
clear alarm - Данная команда очищает активные аварии в системе.
clear alarm {all | ID }
all — очищаются все активные аварии
ID — очищается авария с указанным идентификатором.
clear alarm 300
clear arp - Данная команда удаляет записи из ARP-таблицы.
address IPv4 — очищается запись при совпадении IPv4-адреса
interface IF — очищаются записи на указанном интерфейсе
vrf VRF — указание VRF, из которого будет браться ARP-таблица
clear arp vrf test 10.0.0.200
clear bgp - Данная команда изменяет состояние BGP-сессии и счётчиков.
clear bgp {{ vrf ARGS | neighbor ARGS} {counters | flap-statistics |soft ARGS}}
vrf VRF — указание VRF, в котором будет выполнятся действие
neighbor {all | ipv4 | ipv6 | IPv4 | IPv6 } — сброс BGP-сессии: всех, всех ipv4/ipv6 unicast или конкретного адреса соседа
counters — очистка счётчиков BGP-сообщений
flap-statistics — очистка счётчиков flap-statistics
soft in|out — реконфигурация маршрутов(in — восстановить свои маршруты, out — отправить соседу свои маршруты).
clear bgp neighbor 10.0.0.10
clear configuration backups - Удаление бэкап-конфигруации.
clear configuration backups [ String ] - String — указание имени backup-файла.
clear configuration backups
clear crash-info all - Удаление логов crash-info.
clear crash-info { all | String }
clear domain-cache - Сброс кэша доменных имён.
clear domain-cache { String }
clear domain-cache eltex-co.ru
clear flow monitor - Сброс статистики потоков.
clear ipv6 neighbors - Данная команда удаляет записи из NDP-таблицы.
clear ipv6 neighbors address 2005:1::1
clear logging - Данная команда очищает файлы системных логов
persistent — указание на очистку лог-файлов, хранящихся в постоянной памяти
system — указание на очистку control-plane лог-файлов
file WORD — указание имени persistent-логов
clear logging persistent file BGP_LOG
clear mpls - Данная команда сбрасывает состояния LDP-сессий и RSVP-сессий и меток.
clear mpls ldp neighbor all
clear ospfv2 - Данная команда сбрасывает состояния OSPFv2-соседств.
clear ospfv2 statistics
clear ospfv3 - Данная команда сбрасывает состояния OSPFv3-соседств.
clear ospfv3 statistics
clear pim - Данная команда сбрасывает состояния PIM-соседств и очищает топологию.
clear pim counters
clear qos counters - Команда сбрасывает счётчики срабатывания политик QoS.
clear qos counters interface te 0/0/2
dir - Данная команда выводит список файлов со смонтированного USB-носителя.
delete - Данная команда удаляет файл на смонтированном USB-носителе
show system - Выведет текущие общие состояние
show system resources cpu - Данной командой осуществляется просмотр информации о текущем использовании процессора устройства.
show system resources cpu
show version - покажет текущую версию
backup to tftp://192.168.16.113/backup_directory/ - Команда создает элемент резервирования конфигурации и переходит в режим настройки этого элемента.
fan lower-speed 60 - Данной командой устанавливается минимальная скорость вращения вентиляторов системы охлаждения устройства, в процентах.
flow rate - Команда позволяет ограничить полосу пропускания для заданного типа трафика, перехватываемого на процессор.
configure
system punt rate-limit
flow ip-ttl rate 100
commit
broadcast-client - Данной командой включается режим приёма широковещательных сообщений NTP-серверов, при этом устройство работает в качестве NTP-клиента.
ntp vrf mgmt-intf
broadcast-client
clock read-calendar - Данная команда синхронизирует значение программных часов системы со значением аппаратных часов.
clock read-calendar
clock update-calendar - Данная команда записывает в аппаратные часы устройства значение программных часов.
clock update-calendar
ntp vrf Команда включает протокол ntp в заданном vrf и переходит в режим его конфигурирования
ntp vrf mgmt-intf
Интервала времени между отправкой сообщений NTP-серверу
maxpoll - Данная команда устанавливает максимальное значение интервала времени между отправкой сообщений NTP-серверу.
Использование отрицательной формы команды устанавливает значение по умолчанию (10, что соответствует 1024 секундам).
minpoll - Данная команда устанавливает минимальное значение интервала времени между отправкой сообщений NTP-серверу.
Использование отрицательной формы команды устанавливает значение по умолчанию (6, что соответствует 64 секундам).
ntp vrf default
server ipv4 192.168.16.36
maxpoll 15
minpoll 3
peer ipv4 - Данная команда используется для установления партнерских отношений между NTP-серверами и перехода в командный режим config-ntp-vrf-peer-ipv4.
ntp vrf default
peer ipv4 192.168.16.36
prefer - Данная команда отмечает текущий NTP-сервер как предпочтительный.
ntp vrf default
server ipv4 192.168.16.36
prefer
show clock - Данная команда выводит текущее время и дату.
tcp - Данная команда устанавливает режим работы по протоколу TCP для текущего удаленного сервера журналирования и задает номер используемого порта.
logging host 10.7.32.4 vrf default
tcp 513
udp - Данная команда устанавливает режим работы по протоколу UDP для текущего удаленного сервера журналирования и задает номер используемого порта.
logging host 10.7.32.4 vrf default
udp 513
ip mtu - Данная команда позволяет установить в конфигурации правило для задания IPv4/IPv6 Maximum Transmission Unit (MTU).
interface tengigabitethernet 0/0/1
ip mtu 6000
mtu - Данная команда позволяет установить в конфигурации правило для задания Layer 2 Maximum Transmission Unit (L2 MTU).
interface tengigabitethernet 0/0/1
mtu 1700
shutdown - Данная команда позволяет создать в конфигурации правило для административного выключения интерфейса и перевода его в состояние administratively down.
interface tengigabitethernet 0/0/1.100
shutdown
speed - Данная команда позволяет задать режим скорости на Ethernet-интерфейсе.
Отрицательная форма команды возвращает значение по умолчанию (auto).
speed { 10 | 100 | 100G | 10G | 1G | 40G | 25G |auto }
no speed
interface tengigabitethernet 0/0/1
speed 1G
vrf Данная команда позволяет создать в конфигурации экземпляр VRF и перейти в режим его конфигурации (config-vrf).
vrf test
vrf - Данная команда относит интерфейс к указанной Virtual Routing & Forwarding сущности (VRF).
interface tengigabitethernet 0/0/1
vrf TEST
description - Данная команда позволяет задать в конфигурации описание для текущего VRF
vrf test
description test
maximum prefix - Данная команда позволяет ограничить максимальное количество маршрутов в данном VRF.
vrf test
maximum prefix 100
rd - Данная команда позволяет задать в конфигурации Route Distinguisher для данного VRF.
vrf test
rd 10.0.0.1:200
show vrf - Данная команда отображает информацию по активным VRF.
show vrf test
vpn-id - Данная команда задает в конфигурации VRF определенный VPN ID, как описано в RFC 2685.
vrf test
vpn-id 100:100
Часто используемые настройки:
Пример задать имя, время, баннер:
configure
hostname NEW-HOSTNAME
clock set 12:00:00 nov 8 2023
banner exec @ hell0 @
commit
Создание пользователя:
configure
username stepan privilege 1 password password
enable password level 15 godemode
privilege exec 1 show running-config
exec 1 configure
commit
Конфигурация ip адреса для интерфейса:
interface GigabitEthernet 1/0/20
ip address 10.10.10.20/24
Конфигурация ip адреса для vlan:
interface vlan 1
ip address 150.20.137.40/24
Создание vlan для интерфейса:
configure
vlan database
vlan 20 name test
interface GigabitEthernet 1/0/1
switchport access vlan 20
commit
Создание/удаления trank vlan:
configure
interface GiggabitEhernet 1/0/1
switchport mode trunk
switchport trunk allowed vlan 10 - если не указать то затрет все vlan и оставит 10
switchport trunk allowed vlan add 10
switchport trunk allowed vlan add 12
switchport trunk allowed vlan add 20-50
switchport trunk allowed vlan remove 10 - для удаления vlan 10
switchport trunk allowed vlan all - разрешает все вланы
commit
Создание voice vlan:
voice vlan oui-table add a8f94b ( первые три байта телефона который мы в войс отправляем)
voice vlan id 10
voice vlan state oui-enable
lldp med network-policy 1 voice vlan 10 vlan-type tagged up 4
interface gigabitethernet 1/0/1
switchport mode general
voice vlan enable
lldp med enable network-policy
lldp med network-policy add 1
switchport general allowed vlan add 20 untagged
switchport general pvid 20
Создание STP:
spanning-tree
spanning-tree mode rstp (включен по умолчанию)
spanning-tree priority {0-61440}
interface GigabitEthernet 1/0/1
spannig-tree cost {1-200000000} - стоимость
spanning-tree disable - выключить rstp
spanning-tree bpdu filtering
spanning-tree bpduguard enable
Защита вланов rapid-pvst:
spanning-tree
spanning-tree mode rapid-pvst (в cisco по умолчанию включено)
vlan 10-20
interface gigabitethentet 1/0/1
switchport mode trunk
switchport trunk allowed vlan add 10-20
Конфигурация VRRP:
interface vlan 100
ip address 172.16.2.2/24 ( на другом устройстве указываем 172.16.2.3 )
vrrp 100 ip 172.16.2.1
vrrp 100 priority 1
vrrp 100 preempt
no vrrp 100 shutdown - отключить
Настройка dhcp server:
ip dhcp server
ip dhcp pool network Test
address low 10.0.1.100 high 10.0.1.150 255.255.255.0
default-route 10.0.1.1
dns-server 10.0.1.1
ip dhcp exluded-address 10.0.1.120 - исключить адрес
exit
interface vlan 10
ip address 10.0.1.1/24
interface GigaEthernet 1/0/11
switchport access vlan 10
Настройка OSPF:
interface vlan 1
ip address 192.168.1.10/24
exit
router ospf 1 - здесь указываем роутер id
router-id 192.168.1.10
network 192.168.1.10 area 0.0.0.0
redistribute connected subnets
Настройка do1x:
dot1x system-auth-control
aaa authentication dot1x default radius none
radius-server host 10.0.1.2 key eltex
interface gigabitethernet1/0/1
switchport access vlan 500
switchport mode access
dot1x host-mode multi-sessions
dot1x port-control auto
dot1x reauthentication
dot1x timeout tx-period 30
Шторм контроль:
errdisable recovery cause storm-control
interface gigabitethernet1/0/3
storm-control broadcat level 15 trap shutdown
storm-control unicast pps 12500 trap shutdown
storm-control multicast kbps 20480 trap shutdown
Борьба с петлями:
loopback-detection enable
loopback-detection mode {src-mac-addr|base-mac-addr|multicast-mac-addr|broadcast-mac-addr}
loopback-detection interval {1-60}
interface gigabitethernet 1/0/1
loopback-detection enable - включаем собстенно
errdisable recovery cause loopback-detection - обратно включаем если петля
Включение защиты порта:
interface GigabitEthernet 1/0/1
port security mode max-address - ограничиваем кол-во адресов
port security max 10
port security discadr trap 100
Включение защиты dhcp-snooping:
ip dhcp snooping
ip dhcp snooping vlan 10
interface gigabiteyhernet 1/0/1
ip dhcp snooping trust
Включение IP secure Guard:
ip dhcp snooping
ip dhcp snooping vlan 1 - для влана
ip source guard
interface gigabitethernet 0/1 для интерфейса
ip source guard
Настройка статической маршрутизации:
Настройка статической маршрутизации:
Статическая маршрутизация — это механизм, при помощи которого в системе можно вручную создавать, удалять и модифицировать IP-маршруты.
Статические маршруты могут быть заданы как в глобальной таблице маршрутизации, так и внутри VRF.
action Задание действия для пакетов для данного маршрута при маршрутизации трафика.
Отрицательная форма команды устанавливает значение по умолчанию (forward).
action { discard | forward | local | reject}
no action
discard — отбросить пакеты, редистрибуция разрешена
forward — отправить пакеты по маршруту
local — отбросить пакеты, редистрибуция запрещена
reject — не инсталлировать маршрут
router static
address-family ipv4 unicast
destination 40.10.0.0/16 40.10.0.1
interface tengigabitethernet 0/0/7
action reject
destination - Создание статического маршрута в конфигурации семейства AFI/SAFI.
Отрицательная форма команды удаляет заданный статический маршрут.
[no] destination { IPv4_pref | IPv6_pref } { IPv4_nhop | IPv6_nhop }
IPv4_pref (X.X.X.X/N) — IPv4 префикс маршрута
IPv6_pref (X:X:X:X::X/N) — IPv6 префикс маршрута
IPv4_nhop (X.X.X.X) — IPv4 адрес следующего узла (nexthop) для маршрута
IPv6_nhop (X:X:X:X::X) — IPv6 адрес следующего узла (nexthop) для маршрута
router static
address-family ipv4 unicast
destination 40.10.0.0/16 40.10.0.1
interface - Команда принудительно задает интерфейс, через который будет направлен трафик по данному статическому маршруту,
и производит переход в режим настройки дополнительных параметров статического маршрута.
Отрицательная форма команды удаляет данный интерфейс из текущего маршрута.
router static
address-family ipv4 unicast
destination 40.10.0.0/16 40.10.0.1
interface tengigabitethernet 0/0/7
router static - Включение поддержки статической маршрутизации и переход в режим настройки статических маршрутов.
tag - Задание тега маршрута. Данный тег является внутренним параметром маршрута, который может быть использован в дальнейшем, например, в правилах редистрибуции.
router static
address-family ipv4 unicast
destination 40.10.0.0/16 40.10.0.1
tag 3
OSPF
Настройка динамической маршрутизации OSPF
Существует три версии протокола OSPF:
v1 — в данный момент практически нигде не используется
v2 — используется для обмена маршрутной информацией протокола IPv4
v3 — используется для обмена маршрутной информацией протокола IPv6
address-prefix - Данная команда позволяет отфильтровать OSPFv2 IP LFA FRR маршруты в правиле lfa filter по префиксу, для которого будет рассчитываться альтернативный маршрут.
router ospfv2 PROCESS_NAME
lfa filter FILTER
address-prefix 10.0.0.0/8
advertise-max-metric - Команда устанавливает максимальную метрику для non-stub линков на период вермени, заданный командой time-to-advertise
router ospfv2 PROCESS_NAME
advertise-max-metric
area - Данная команда создает в конфигурации устройства определенную зону OSPFv2 и позволяет перейти в режим настройки конфигурации этой зоны.
В режиме конфигурации зоны возможно, в первую очередь, непосредственно конфигурировать интерфейсы, которые будут участвовать в процессе маршрутизации OSPFv2.
[no] area AREA
router ospfv2 PROCESS_NAME
area 0.0.0.0
area-aggregate - Данная команда позволяет создать в конфигурации правило для суммарного маршрута с LSA Type 3 или LSA Type 7.
[no] area-aggregate { nssa-external-lsa | summary-lsa } IPv4_PREFIX_FORMAT
area-id - Команда задает номер области (Area ID) для маршрута, анонсируемого командой host.
no area-id - Отрицательная форма команды удаляет настройку.
router ospfv2 PROCESS_NAME
host 10.10.10.10
area-id 10.0.0.0
as-br disable - Данная команда выключает в данном OSPFv2-процессе функционал Autonomous System Border Router (ASBR).
router ospfv2 PROCESS_NAME
as-br disable
authentication-key - Данная команда создает в конфигурации ключ аутентификации OSPF сессий на указанном интерфейсе.
router ospfv2 PROCESS_NAME
area 0.0.0.0
interface tengigabitethernet 0/0/1
authentication-key test
authentication-type - Команда задает тип шифрования, используемый при аутентификации.
router ospfv2 PROCESS_NAME
area 0.0.0.0
interface tengigabitethernet 0/0/1
authentication-type md5
auto-cost reference-bandwidth - Команда задает референсное (максимальное) значение пропускной способности (bandwidth),
относительно которого будет высчитываться стоимость интерфейса.
Стоимость интерфейса с референсным значением будет равна единице.
router ospfv2 PROCESS_NAME
auto-cost reference-bandwidth 1000000
bandwidth - Команда задает значение пропускной способности (bandwidth) на интерфейсе, которое будет использовано
при подсчете стоимости (cost) данного интерфейса относительно референсного значения.
router ospfv2 PROCESS_NAME
area 0.0.0.0
interface tengigabitethernet 0/0/1
bandwidth 100000
dead-interval - Данная команда позволяет задать в конфигурации значение OSPF Dead Interval.
router ospfv2 PROCESS_NAME
area 0.0.0.0
interface tengigabitethernet 0/0/1
dead-interval 10
disable - Данная команда запрещает добавление отфильтрованных OSPFv2 IP LFA FRR маршрутов при использовании фильтра lfa filter.
router ospfv2 PROCESS_NAME
lfa filter FILTER
disable
dscp - Команда указывает значение DSCP для исходящих сообщений OSPF протокола.
router ospfv2 1
area 0.0.0.0
interface twentyfivegigabitethernet 0/0/2
dscp 32
effect - Команда указывает значение DSCP для исходящих сообщений OSPF протокола.
router ospfv2 PROCESS_NAME
area 0.0.0.0
area-aggregate summary-lsa 10.0.0.0/8
effect advertise-matching
external-lsa-refresh-interval - Команда задает интервал между обновлениями external LSA, принадлежащих маршрутизатору.
router ospfv2 PROCESS_NAME
external-lsa-refresh-interval 60
Настройка LACP / LAG
Рассмотрим настройку LACP-группы в режиме active.
В режиме active порты коммутатора являются инициаторами согласования по протоколу LACP.
На встречной стороне порт должен быть настроен как в режиме active, так и в режиме passive.
Необходимо выполнить следующее:
1) Включаем работу LAG глобально на коммутаторе:
configure terminal
set port-channel enable
2) Активируем группу, в которую будем включать интерфейсы:
interface port-channel 2
no shutdown
exit
3) Перейти в режим конфигурирования порта:
interface GigabitEthernet0/2
4) Настроить LACP-группу:
channel-group 2 mode active , где 2 – номер группы
active – добавить порт в LACP-группу в режиме active.
для роутера:
lacp
interface bundle-ether 1
exit
interface tengigabitethernet 0/0/3
bundle id 1
bundle mode active
exit
interface tengigabitethernet 0/0/7
bundle id 1
bundle mode active
exit
exit
Пример конфига свитча с lacp
lan database
vlan 101,135,200,300
exit
!
hostname SW2
!
management access-list ssh
permit service ssh
exit
!
ip ssh server
!
interface tengigabitethernet1/0/1
channel-group 2 mode auto
exit
!
interface tengigabitethernet1/0/2
channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/3
channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/5
channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/6
channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/7
channel-group 2 mode auto
exit
!
interface gigabitethernet1/0/1
switchport access vlan 101
exit
!
interface Port-channel1
switchport access vlan 135
exit
!
interface Port-channel2
ip address 10.0.10.2 255.255.255.0
exit
!
interface Port-channel5
ip address 10.0.50.2 255.255.255.0
exit
!
interface vlan 101
ip address 172.31.0.20 255.255.255.0
exit
!
!
!
!
!
!
ip route 172.30.0.0 /20 172.31.0.1
!
!
!
!
!
!
!
end
Существует 5 типов пакетов протокола OSPF, которые позволяют устанавливать соседство и выполнять обновление маршрутной информации:
Type 1 — Hello. Обнаруживает соседей и поддерживает соседские отношения.
Type 2 — Database Description. Описывает содержимое базы данных состояния канала маршрутизатора.
Type 3 — Link State Request (LSR). Запрос на получение базы данных состояния канала.
Type 4 — Link State Update (LSU). Обновление базы данных состояния канала (передача LSA соседним маршрутизаторам).
Type 5 — Link State Acknowledgment (LSAck). Подтверждение получения обновления.
Каждый пакет Link State Update, генерируемый маршрутизатором, содержит один или несколько LSA. Существует 5 различных типов LSA:
Type 1 — Router-LSA.
Генерируется каждым маршрутизатором для каждой области, которой он принадлежит.
Он описывает состояние интерфейсов маршрутизатора, подключенных к этой области.
Type 2 — Network-LSA.
Генерируется назначенным маршрутизатором (DR).
Он описывает набор маршрутизаторов, подключенных к определенной сети.
Рассылается только в области, содержащей эту сеть.
Type 3 или 4 — Summary-LSA.
Описывают маршруты между областями.
Type 3 Summary-LSA генерируются ABR и описывают маршруты между ABR и внутренними маршрутизаторами локальной области.
Они рассылаются через магистраль другим ABR.
Type 4 Summary-LSA описывают маршруты к ASBR.
Type 5 - AS-external-LSA.
Генерируются ASBR и описывают маршруты к пунктам назначения за пределами автономной системы.
Маршрут по умолчанию для автономной системы также описывается AS-external-LSA
Команды для диогностики ospf
MES5324:
общая инфа:
show ip ospf
соседи:
show ip ospf neighbor
обмен:
show ip ospf database
ME5200
общая инфа:
show ospfv2
соседи:
show ospfv2 neighbors
обмен:
show ospfv2 database
lacp MES5324 + MES5324:
Настройки sw1
interface tengigabitethernet1/0/2
channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/3
channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/5
channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/6
channel-group 5 mode auto
exit
!
interface Port-channel5
ip address 10.0.50.1 255.255.255.0
exit
Настройки sw2
interface tengigabitethernet1/0/2
channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/3
channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/5
channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/6
channel-group 5 mode auto
exit
!
interface Port-channel5
ip address 10.0.50.2 255.255.255.0
exit
lacp MES5324 + ME5200S:
Настройка MES5324:
interface tengigabitethernet1/0/1
channel-group 2 mode auto
exit
!
interface tengigabitethernet1/0/7
channel-group 2 mode auto
exit
!
interface Port-channel2
ip address 10.0.10.2 255.255.255.0
exit
Настройка ME5200S:
lacp
interface bundle-ether 1
exit
interface tengigabitethernet 0/0/3
bundle id 1
bundle mode active
exit
interface tengigabitethernet 0/0/7
bundle id 1
bundle mode active
exit
exit
!
interface bundle-ether 1
ipv4 address 10.0.10.1/24
exit
тесты кабеля
Показать интерфейсы:
show interfaces status
Тест медного кабеля:
test cable-diagnostics tdr interface gi0/1
Показать длину медного кабеля:
show cable-diagnostics cable-length
Показать оптические интерфейсы:
show fiber-ports optical-transceiver
show fiber-ports optical-transceiver interface TengigabitEthernet1/0/7
show fiber-ports optical-transceiver detailed interface TengigabitEthernet1/0/7
Зеркало трафика:
monitor session 1 destination interface gi1/0/3 - куда перенаправить трафик
monitor session 1 source interface gi1/0/2 both - откуда откуда перенаправить трафик
mpls
mpls label = 32 bit
layer2 Header | MPLS Header | IP Packet
MPLS Header:32 Bits (4 Bytes)
The label Value | Exp | S | TTL
20 bits | 3 bits | 1 bits | 8 bits
1 - 1 048 576 | 8 значений | два значения 0 или 1 | 0-255
Стак S
Первый пришёл последний вышел FILO
Fist IN / Fist OUT
0 - еще будет mpls label
1 - все последний mpls label
LSR - LABEL SWITCH ROUTER
Ingress LSR (imposition) - получает IP пакет, пушит в него MPLS Label(stack)
Следовательно вылетает из него MPLS пакет
Egress LSR (disposition) - получает MPLS пакет, удаляет из него лейбл.
Следовательно вылетает из него уже IP пакет.
Ingress/Egress LSR - находятся по краям (edge)mpls сети.
Часто их называют PE(provider edge) устройствами
Intermediate LSR - получает MPLS пакет, производит операции над ним и отправляет MPLS трафик дальше.
Часто называются P (Provider) устройствами
ip -> LSR -> ip = IP FORWARDING
mpls -> LSR -> mpls = INTERMEDIA LSR (P - provider)
mpls -> LSR -> ip = EGRESS LSR
ip -> LSR -> mpls = INGRESS LSR
CE ->> PE --> MPLS(P) <-- PE <--CE
CE - Costome Edge (оборудование которое ничего не знает про MPLS)
PE - Provider Edge ( на границе сети ) (Оборудование которое как то взаимодействует с MPLS, например ip -> mpls)
P - Provider Router ( внутри сети) (оборудование общающееся исключительно через MPLS)
imposition - добавление метки mpls
desposition - убирание метки mpls
LABEL SWITCH PATH (LSP). FEC
LSP - это простой список из LSR которые коммутируют MPLS пакет через всю MPLS сеть, либо через часть MPLS сети
Forwarding Equivalence Class (FEC) - группа пакетов которые коммутируются по одному и тому же пути и обслуживают одинаково
Все пакеты принадлежавшие одному FEC будут иметь один и тот же лейбл.
При этом пакеты с одним и тем же лейблом не всегда принадлежат к одному FEC, например, в случае если их mpls EXP отличаются.
Ingress LSR принимает решения о том, к каким FEC принадлежат приходящие в него пакеты.
LFIB - база меток mpls (Label Forwarding instance(information)Base
Содержит ipv4/ipv6 prefix, VPN prefix, TE tunnel, l2 forwarding entry, local label, remote label
85 17 eth1
11 22 eth2
13 33 eth3
Local Label - метка, которую локальный LSR назначил на префикс
Remote Label - метка, которую LSR получил от соседнего LSR
Протоколы получения лейблов:
1. Static ( возможность есть, но никогда так не делай! )
2. LDP ( сам все сделал, сам настроил )
3. RSGP-TE ( можно явно задать хождение трафика ) / Trafic Engineering
4. BGP
5. SR - mpls
SRv6
(модное под капотом OSPF/ISIS)
LDP = LABEL DISTRIBUTION PROTOCOL
назначает лейблы на все префиксы в таблице маршрутизации и передает соседям label binding
Prefix+label=binding
Labal binding передается соседям автоматически без каких то дополнительных запросов
SWAP - замена лейбла на другой
PUSH - был ip пакет ушел mpls
POP - был mpls ушел ip
Включение mpls на cisco
mpls ldp router-id lo0
mpls ip
int gi 0/0
mpls ip
show mpls forwarding-table
show ip route
Включение mpls на eltex ME5200S
mpls
forwarding
interface loopback 1
interface tengigabitethernet 0/0/4
exit
ldp
discovery interface tengigabitethernet 0/0/4
exit
neighbor 10.50.50.4 - сосед
exit
exit
router-id 10.50.50.1 - наш ип на loopback
transport-address 10.50.50.1 - наш ип на loopback
exit
show mpls ldp forwarding - покажет метки
show mpls ldp bindings local - покажет распределение меток локально
show mpls ldp bindings remote - покажет распределение меток удаленных
show mpls ldp bindings mldp - покажет распределение меток
sh run cluster
sh run bridges 100
bridge 100
vlan 1
ip firewall disable !!! ПОтотм включим как убедимся что заработало
ip фввкуыы 192.168.100.1/24
unit 1
ip address 192.168.100.2/24
unit 2
vrpp forse-up
vrrp id 100
vrrp 192.168.100.100/24
vrrp group 1
vrrp preempt disable
vrrp timers garp refrash 1
vrrp
enable
exit
Проверка
show cluster status
show cluster sync status
Интерфесы на первом юните нумеруется 1/0/1 а на втором 2/0/1
sh run int gi 1/0/1 - покажет первый юнит
sh run int gi 2/0/1 - покажет второй юнит
bridge 20
vlan 20
security-zone trusted
ip address 172.16.1.2/24 unit 1
ip address 172.16.1.3/24 unit 2
vrrp id 20
vrrp ip 172.16.1.1/24
vrrp group 1
vrrp timers garp refrash 1
vrrp
enable
exit
object-group network sync_dst
ip address-range 192.168.100.2 unit 1
ip address-range 192.168.100.1 unit 2
exit
object-group network sync_src
ip address-range 192.168.100.1 uni1
ip address-range 192.168.100.2 unit2
exit
по поводу фаервола:
sh run failovers
ip failover
local-address object-group sync_src
remote-address object-group sync_dst
vrrp-group 1
exit
ip firewall failover
sync-type unicast
port 9999
enable
exit
ip dhcp-server failover
mode active-standby
enable
exit
crypro-sync
enable
exit
Проверка доступных сервисов:
show higj-availability state
Включение фаервола:
Проверяем сессии:
show ip firewall sessions inside-source-address 192.168.100.1
0. Подготовка системы debian/ubuntu:
apt update
apt install lz4 vim sudo gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python3 python3-pip python3-pyelftools python3-pexpect xz-utils debianutils iputils-ping libsdl1.2-dev xterm
1. Опционально, команда python выполняет python3
update-alternatives --install /usr/bin/python python /usr/bin/python3 1
2. Настраиваем локаль:
vim /etc/locale.gen
-------------------
en_US.UTF-8 <---------- найти и раскоментить
------------------
Перечитать local:
locale-gen
На этом все, теперь у вас должна появится local en_US.UTF-8
Подготовка yocto:
0. Качаем репу:
git clone git://git.yoctoproject.org/poky
cd poky
1. Меняем репу на dunfell
git checkout dunfell
2. Преступаем к сборке
source oe-init-build-env
3. Настраиваем конфигурацию
vim conf/local.conf
-------------------
MACHINE = "raspberrypi4"
-------------------
Еще варианты:
MACHINE = "qemux86-64"
MACHINE = "qemux86"
Начинаем сборку:
Теперь можно приступить к сборке образа.
Например, для создания минимального образа:
bitbake core-image-minimal
Если вам нужен образ с графическим интерфейсом:
bitbake core-image-sato
Создание образа SD-карты:
После завершения сборки, образ будет находиться в директории tmp/deploy/images//
cd tmp/deploy/images/raspberrypi4/
dd if=core-image-minimal-raspberrypi4.rpi-sdimg of=/dev/sdX bs=4M status=progress
wic
Создайте файл, например, my-image.wic, с таким содержимым:
cat > my-image.wic << "EOF"
part /boot --source bootimg-partition --ondisk mmcblk0 --fstype=vfat --label boot --active --align 4
part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --label root --align 4
EOF
Этот файл описывает образ с двумя разделами:
/boot — загрузочный раздел с файловой системой FAT32.
/ — корневой раздел с файловой системой ext4.
После того как вы собрали образ с помощью Yocto (например, bitbake core-image-minimal),
вы можете использовать wic для создания образа SD-карты.
wic create my-image.wic -e <имя_образа>
Здесь:
my-image.wic — это ваш конфигурационный файл.
-e <имя_образа> — указывает, какой образ использовать (например, core-image-minimal).
Пример:
wic create my-image.wic -e core-image-minimal
Если вам нужно добавить дополнительные разделы или изменить структуру образа, вы можете редактировать .wic файл.
Например:
part /data --source empty --ondisk mmcblk0 --fstype=ext4 --label data --size 1G
part /home --source rootfs --ondisk mmcblk0 --fstype=ext4 --label home --rootfs-dir=home
Использование готовых wic-шаблонов
wic list images
wic create sdimage-bootpart -e core-image-minimal
Если вам нужно добавить кастомные файлы или скрипты в образ, вы можете использовать директиву --source в .wic файле.
Например:
part /scripts --source script --ondisk mmcblk0 --fstype=ext4 --label scripts --script myscript.sh
Создайте файл x86-image.wic:
# x86-image.wic
part /boot --source bootimg-pc --ondisk sda --fstype=vfat --label boot --active --align 4
part / --source rootfs --ondisk sda --fstype=ext4 --label root --align 4
wic create x86-image.wic -e core-image-minimal
0. Подготовка системы debian/ubuntu:
apt install lz4 vim sudo gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python3 python3-pip python3-pyelftools python3-pexpect xz-utils debianutils iputils-ping libsdl1.2-dev xterm
1. Опционально, команда python выполняет python3
update-alternatives --install /usr/bin/python python /usr/bin/python3 1
2. Настраиваем локаль:
vim /etc/locale.gen
-------------------
en_US.UTF-8 <---------- найти и раскоментить
------------------
Перечитать local:
locale-gen
На этом все, теперь у вас должна появится local en_US.UTF-8
3. Создаем пользователя например useryocto
useradd useryocto
Входим под пользователем useryocto
su - useryocto
4. Создаем директорию yocto и cкачиваем репазитори napi
mkdir yocto
cd yocto
git clone --depth 1 git://git.yoctoproject.org/poky -b kirkstone
cd poky
git clone --depth 1 git://git.openembedded.org/meta-openembedded.git -b kirkstone
git clone --depth 1 git://git.yoctoproject.org/meta-arm.git -b kirkstone
git clone --depth 1 https://gitlab.nnz-ipc.net/pub/napilinux/meta-influx.git -b kirkstone
git clone --depth 1 https://gitlab.nnz-ipc.net/pub/napilinux/meta-nnz.git -b kirkstone
git clone --depth 1 https://github.com/sbabic/meta-swupdate -b kirkstone
git clone git://git.yoctoproject.org/meta-raspberrypi -b kirkstone
5. После загрузки выполняем
source oe-init-build-env
6. На этом этапе мы можем скопировать настроенные слои
# napi image :
# -- # cp ../meta-nnz/conf/bblayers.conf.sample.napi conf/bblayers.conf
# frontcontrol image:
# -- # cp ../meta-nnz/conf/bblayers.conf.sample.fc conf/bblayers.conf
Я копирую слой для rpi
cp ../meta-nnz/conf/bblayers.conf.sample.rpi conf/bblayers.conf
7. Еще нужно добавить основной конфиг в котором мы в будущем выберем нужную платформу
cp ../meta-nnz/conf/local.conf.sample conf/local.conf
8. Редактируем файл local.conf
vim conf/local.conf
---------------------------
MACHINE ?= "napi-rk3308b-s" <----------------- ищем строку MACHINE
---------------------------
Возможные варианты:
MACHINE ?= "napi-rk3308b-s"
MACHINE ?= "napi-rk3308"
MACHINE ?= "roc-pc-rk3328"
MACHINE ?= "rockpro64-rk3399"
9. Сборка
Возможные варианты сборки:
nnz-frontcontrol-image
nnz-napi-image
nnz-napi-image-dev
nnz-napi-image-dev-noupdate
Пример сборки:
bitbake -k nnz-frontcontrol-image
Загрузка исходников без сборки:
bitbake nnz-frontcontrol-image --runall=fetch
bitbake nnz-napi-image --runall=fetch
bitbake nnz-napi-image-dev --runall=fetch
bitbake nnz-napi-image-dev-noupdate --runall=fetch
Ошибка:
Я собирал от пользователя user и архивы закинул другому пользователю и получил ошибку:
Error, TMPDIR has changed location.
You need to either move it back to /home/user/yocto/poky/build/tmp or delete it and rebuild
Просто удалил файлы сборки из tmp, так как в архиве были нужные исходники для сборки, а самой сборки не производилось.
rm -rf ~/yocto/poky/build/tmp
10. Собранные имеджи искать тут:
~/yocto/poky/build/tmp/deploy/images
11. Учетные данные по умолчанию.
Username: root
Password: napilinux
Прошивка napi (rk3308)
Ссылки:
бутлодеры:
https://dl.radxa.com/rockpis/images/loader/
Образы napi:
https://download.napilinux.ru/linuximg/
Компоненты для rkdeveloptool
sudo apt-get install libudev-dev libusb-1.0-0-dev dh-autoreconf
rkdeveloptool
git clone https://github.com/rockchip-linux/rkdeveloptool
cd rkdeveloptool
autoreconf -i
./configure
make
cp rkdeveloptool /usr/local/bin/
Убедится что нету других rkdeveloptool
whereis rkdeveloptool
Команды rkdeveloptool
rkdeveloptool - справка
rkdeveloptool ld - лист устройств
rkdeveloptool db <файл загрузчика> - загрузка бутлодера
rkdeveloptool wl 0 <файл образа> - загрузка прошивки
Порядок прошивки:
0. нажимаем и удерживаем клавишу Maskrom, затем коротко нажимаем клавишу Reset не отпускаем Maskrom, через несколько секунд отпускаем Maskrom;
1. Грузим бутлодер
sudo rkdeveloptool db rk3308_loader_uart0_m0_emmc_port_support_sd_20190717.bin
Или
sudo rkdeveloptool db rk3308_loader_ddr589MHz_uart0_m0_v2.06.136sd.bin
!!! Если бутлодер не правильный или вы его не загрузили, то получите ошибку: Write LBA failed!
2. Прошиваем прошивку
sudo rkdeveloptool wl 0 <файл образа>
Пример:
rkdeveloptool wl 0 napi-rk3308b-s-latest-dev.img
P.S Очистка nand:
Создаем пустой файл с помощью dd
dd if=/dev/zero of=./zero.img bs=4M count=10
Шьем этим файлом.
rkdeveloptool db <файл загрузчика> - загрузка бутлодера
rkdeveloptool wl 0 zero.img
minicom -D /dev/ttyUSB1 -b15000000
!!! Укажи правильный ip для вашего микротика
!!! также вы можете изменить порт для вебинтерфеса IP-> services-> www-ssl
!!! так же рекомендуется выключить IP -> services ->www
Генерация и установка ssl сертификата:
certificate add name=local-cert common-name=local-cert key-usage=key-cert-sign,crl-sign
certificate sign local-cert
certificate add name=webfig common-name=192.168.88.1
certificate sign webfig
Включение веб сервера с генерированным сертификатом:
ip service
set www-ssl certificate=webfig disabled=no
Переходим в каталог в котором будем собирать ядро:
cd /opt
Ставим не обходимые пакеты для сборки в систему:
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
Скачиваем патчи солидрана:
git clone https://github.com/SolidRun/lx2160a_build.git
Скачиваем ядро:
git clone --depth 1 https://github.com/nxp-qoriq/linux -b LSDK-21.08
Переходим в каталог ядра:
cd linux
Производим слияние конфигов:
cp ../lx2160a_build/configs/linux/lx2k_additions.config arch/arm64/configs/
./scripts/kconfig/merge_config.sh arch/arm64/configs/defconfig arch/arm64/configs/lsdk.config arch/arm64/configs/lx2k_additions.config
Нужно как то себя обозначить для дальнейшего использования git:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
Применяем патчи:
git am ../lx2160a_build/patches/linux-LSDK-21.08/*.patch
Получаем настройки текущего ядра:
Достаточно любой из команд, но ничего страшного если выполните по рядку
zcat /proc/config.gz > .config
make oldconfig
На этом этапе можно добавить batman_adv в конфиг
vim .config
найти строку CONFIG_BATMAN_ADV ( используй / для поиска)
и привести ее к виду
CONFIG_BATMAN_ADV=m
CONFIG_BONDING=m
Теперь производим сборку и установку
make -j$(nproc)
make modules_install
make install
Если требуется можно сохранить старое ядро
mv /boot/Image /boot/Image.original
mv /boot/Image.gz /boot/Image.gz.original
Вот так мы установим новое ядро:
cp arch/arm64/boot/Image.gz arch/arm64/boot/Image /boot/
скрипт для поднятия сети
cat > /usr/local/sbin/cx-lx2-network.sh << "EOF"
#!/bin/bash
# Script to bring up high speed network interfaces ont the SolidRun LX2160A
# Clearfog / Honeycomb
for n in 9 7 10 8
do /usr/bin/ls-addni dpmac.$n
done
exit 0
EOF
cat > /etc/systemd/system/ls-addni.service << "EOF"
[Unit]
DefaultDependencies=no
Description=Bring up high-speed network interfaces
Before=network-pre.target
Wants=network-pre.target
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/cx-lx2-network.sh
TimeoutSec=0
RemainAfterExit=yes
[Install]
RequiredBy=network.target
EOF
chmod +x /usr/local/sbin/cx-lx2-network.sh
systemctl daemon-reload
systemctl enable ls-addni.service
apt install -y git libnl-3-dev libnl-genl-3-dev libnl-genl-3-dev make pkg-config gcc
Установка нового модуля batman-adv
cd /opt/
git clone https://github.com/open-mesh-mirror/batman-adv.git
cd batman-adv
git checkout v2024.2
sed -i '/export/s/=n/=y/' Makefile
make -j`nproc`
make install
echo "batman-adv" | tee -a /etc/modules
Сборка и установка программы управления batman_adv
cd /opt/
git clone https://github.com/open-mesh-mirror/batctl.git
cd batctl/
git checkout v2024.2
make -j`nproc`
make install
solidrun 2160
https://solidrun.atlassian.net/wiki/spaces/developer/pages/197494288/HoneyComb+LX2+ClearFog+CX+LX2+Quick+Start+Guide
https://github.com/SolidRun/lx2160a_build
https://solid-run-images.sos-de-fra-1.exo.io/LX2k/lx2160a_build/20240731-2a7ab21/lx2160acex7_2000_700_3200_8_5_2-2a7ab21.img.xz
1. Включаем загрузку с сд карты (off on on on off)
2. Прерываем загрузку нажатием любой кнопки
3. Записываем в mmc образ
load mmc 0:1 0xa4000000 ubuntu-core.img
mmc dev 1
mmc write 0xa4000000 0 0xd2000
4. Загружаемся в новь созданный образ
boot
5. Логинемся
root/root
6. Меняем разметку на диске mmc
fdisk /dev/mmcblk1
жмем p - показать размер текущей системы
жмем d - удалить раздел
жмем n - создадим раздел
!!! внимание нужно отступить 131072
вводим 131072
после всех операций с разделами для сохранения жмем w
7. Увеличиваем фс
resize2fs /dev/mmcblk1p1
8. Выключаем устройство и переключаем перемычки на загрузку mmc
(off on on off off)
9. ssh root
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
systemctl restart sshd
10. dhcp
cat > /etc/network/interfaces.d/eth2 << "EOF"
auto eth2
iface eth2 inet dhcp
EOF
Показать доступные адаптеры
i2cdetect -l
i2c-0 i2c 2180000.i2c I2C adapter
i2c-1 i2c 21b0000.i2c I2C adapter
Вывод команды i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- 18 19 -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 -- -- -- -- 35 -- -- 38 -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- 51 -- -- UU UU -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
--: Указывает, что по этому адресу на I2C-шине не было обнаружено устройства.
UU: Указывает, что устройство по этому адресу используется ядром (или драйвером) и недоступно для работы через i2c-tools
число (например, 18, 19, 30): Указывает на обнаруженное устройство по этому адресу.
Здесь показаны устройства, обнаруженные на шине 0 I2C.
Они находятся по следующим адресам:
0x18
0x19
0x30
0x35
0x38
0x51
Адреса 0x54 и 0x55 помечены как UU, что означает,
что эти устройства уже используются ядром,
скорее всего драйвером.
Проверьте загруженные модули ядра:
Используйте команду lsmod, чтобы увидеть, какие модули ядра загружены, и попробуйте найти тот, который использует адреса 0x54 и 0x55.
Выключите соответствующие модули:
Если возможно, выгрузите модули ядра, которые используют эти устройства.
Например:
rmmod имя_модуля
Вернуть модуль ядра:
modprobe имя_модуля
Команда i2cset
Команда i2cset используется для записи данных в регистр устройства на I2C-шине.
i2cset -y 0 0x54 0x00 0x12 0x34 0x56 0x78 0x9a i
-y: Отключает интерактивный запрос подтверждения (позволяет выполнять команду без подтверждения).
0: Номер I2C-шины (обычно 0 или 1).
0x54: Адрес I2C-устройства.
0x00: Адрес регистра, в который будут записаны данные.
0x12 0x34 0x56 0x78 0x9a: Данные, которые будут записаны в регистр.
i: Указывает, что данные должны быть записаны как последовательность байтов (I2C block write).
Команда i2cget
Команда i2cget используется для чтения данных из регистра устройства на I2C-шине.
i2cget -y 0 0x54 0x00 i 5
-y: Отключает интерактивный запрос подтверждения.
0: Номер I2C-шины.
0x54: Адрес I2C-устройства.
0x00: Адрес регистра, из которого будут прочитаны данные.
i: Указывает, что чтение будет выполнено как последовательность байтов (I2C block read).
5: Количество байтов для чтения.
Стирание данных
i2cset -y 0 0x54 0x00 0x00 0x00 0x00 0x00 0x00 i
i2cset -y 0 0x54 0x05 0x00 0x00 0x00 0x00 0x00 i
Стирание большого объёма данных баш скрипт
-------------------------------
#!/bin/bash
DEVICE_ADDRESS=0x54
START_REGISTER=0x00
BLOCK_SIZE=16 # размер блока данных для стирания за раз
# Цикл для записи нулей по всем регистрам
for ((i=0; i<256; i+=BLOCK_SIZE)); do
i2cset -y 0 $DEVICE_ADDRESS $((START_REGISTER + i)) $(printf '0x00%.0s' $(seq 1 $BLOCK_SIZE)) i
done
-------------------------------
Частный случай записи в eprom
# выгрузили модуль ядра
rmmod at24
#конвертация ASCII-кодов
echo -n "bs04" | od -An -t x1
# ASCII-кодов
printf "x62x73x30x34" | echo -e $(cat -)
# пример записи в bs04
#i2cset -y 0 0x54 0x00 0x62 0x73 0x30 0x34 i
#через звездочку удалять не стоит может будущем аукнутся
rm /var/lib/nexuscli/access_token
rm /var/lib/nexuscli/device_id
rm /var/lib/nexuscli/refresh_token
#вот так можно прочитать
i2cget -y 0 0x54 0x00 i 6
#загрузили модуль ядра
modprobe at24
!!! kernel linux < 6
!!! прочтите инструкции в файле README.md
!!! cat README.md
Ставим необходимы пакеты:
apt-get install dkms
dkms status
git clone https://github.com/brektrou/rtl8821CU.git
cd rtl8821CU
Выполняем установку
./dkms-install.sh
dkms status
Удаление драйвера установленного через DKMS
Проверяем что там у нас установлено используем команду "dkms status ":
dkms status
rtl8821cu, 5.12.0.4: added
rtl8821CU, 5.4.1: added
Удаляем ( rtl8821cu/5.12.0.4):
dkms uninstall rtl8821cu/5.12.0.4
dkms remove rtl8821cu/5.12.0.4 --all
8821cu-20210916 RPI 3B+
https://github.com/morrownr/8821cu-20210916?tab=readme-ov-file
Ставим пакеты для сборки:
apt install -y bc git dkms build-essential raspberrypi-kernel-headers
wget https://raw.githubusercontent.com/RPi-Distro/rpi-source/master/rpi-source -O /usr/local/bin/rpi-source
chmod +x /usr/local/bin/rpi-source && /usr/local/bin/rpi-source -q --tag-update
Качаем драйверы:
cd /opt
git clone https://github.com/morrownr/8821cu-20210916
Устанавливаем драйвер
!!! В Makefile уже установлена авто определения драйвера.
cd 8821cu-20210916/
make -j4
./dkms-make.sh
./install-driver.sh
## Что у нас есть
/dev/ttyS0 - порт 485 на напи
115200 - скорость
полярность:
a +
b -
Для GW modbus:
1 . Создать необходимые директории и файлы:
#/etc/mbusd/mbusd-ttyS0.conf
# Внимание имя конфиг файла должно иметь правильное название
# для mbusd@ttyS1.service файл будет иметь название mbusd-ttyS1.conf и etc.
# а иначе если файла не будет, то сервис запустится с параметрами по умолчанию
mkdir /etc/mbusd
touch /etc/mbusd/mbusd-ttyS0.conf
2. Запуск демона.
systemctl enable mbusd@ttyS0.service
systemctl start mbusd@ttyS0.service
systemctl status mbusd@ttyS0.service
3. Настроить правильно конфиг:
Пример конфига:
https://github.com/3cky/mbusd/blob/master/conf/mbusd.conf.example
Тут нужно поменять :
device = /dev/ttyS3
speed = 115200
maxconn = 100
timeout = 10
pause = 50
wait = 50
default conf:
#############################################
# #
# Sample configuration file for mbusd #
# #
#############################################
########## Serial port settings #############
# Serial port device name
device = /dev/ttyS0
# Serial port speed
speed = 9600
# Serial port mode
mode = 8n1
# RS-485 data direction control type (addc, rts, sysfs_0, sysfs_1)
trx_control = addc
# Sysfs file to use to control data direction
# trx_sysfile =
############# TCP port settings #############
# TCP server address to bind
address = 0.0.0.0
# TCP server port number
port = 502
# Maximum number of simultaneous TCP connections
maxconn = 32
# Connection timeout value in seconds
timeout = 60
######### Request/response settings #########
# Maximum number of request retries
retries = 3
# Pause between requests in milliseconds
pause = 100
# Response wait time in milliseconds
wait = 500
# Reply on Broadcast
replyonbroadcast = no