Table of Contents

Додавання підтримки нового пристрою

Ця стаття передбачає, що ваш пристрій побудований на платформі, яка вже підтримується OpenWrt. Якщо вам потрібно додати нову платформу, дивіться → add.new.platform

Якщо ви вже реалізували підтримку пристрою і шукаєте інструкції щодо подачі змін, зверніться до Політика підтримки пристроїв / найкращі практики

Загальний підхід

GPIO

Більшість пристроїв використовують GPIO для керування світлодіодами та кнопками. Універсальних номерів GPIO не існує, тому OpenWrt повинен використовувати індивідуальні відповідності для кожного пристрою. Потрібно визначити, який GPIO відповідає за кожен світлодіод і кнопку.

GPIO-світлодіоди

Якщо світлодіод керується GPIO, потрібно встановити напрямок у `out` і знати полярність:

Приклад перевірки одного GPIO:

cd /sys/class/gpio
GPIO=3
echo $GPIO > export
echo "out" > gpio$GPIO/direction
echo 0 > gpio$GPIO/value
sleep 1s
echo 1 > gpio$GPIO/value
sleep 1s
echo $GPIO > unexport

Складіть таблицю, подібну до такої:

Колір Назва GPIO Полярність
Зелений Power 0 Active high
Синій WLAN 7 Active high
Синій USB 12 Active low

Для пришвидшення тестування всіх GPIO рекомендується використовувати скрипт `gpio-test.sh`, який перебирає всі пін-порти.

GPIO-кнопки

У випадку GPIO-кнопок значення змінюється під час натискання. Рекомендований підхід:

Використовуйте скрипт `gpio-dump.sh` для автоматизації.

Якщо значення змінюється з 1 на 0 під час натискання — кнопка має рівень - active low, інакше — active high.

KSEG1ADDR() та доступ до NOR flash

Для отримання MAC-адреси, EEPROM або калібрувальних даних з flash-пам’яті, можливо, буде потрібно читати flash у ядрі через макрос `KSEG1ADDR()`, який транслює фізичну адресу в віртуальну. Наприклад: `KSEG1ADDR(0x1fff0000)` дозволяє читати останні 64КБ flash, незалежно від її розміру (4, 8, 16 МБ).

Приклади

Платформа Brcm63xx

Платформа Ramips

Поради

Після додавання нової плати, очистіть кеш збірки:

cd trunk
rm -rf tmp
make menuconfig

Якщо профіль пристрою не з’являється в `make menuconfig`, оновіть мітку часу Makefile:

touch target/linux/*/Makefile