Додавання підтримки нового пристрою
Ця стаття передбачає, що ваш пристрій побудований на платформі, яка вже підтримується OpenWrt. Якщо вам потрібно додати нову платформу, дивіться → add.new.platform
Якщо ви вже реалізували підтримку пристрою і шукаєте інструкції щодо подачі змін, зверніться до Політика підтримки пристроїв / найкращі практики
Загальний підхід
- Складіть детальний список мікросхем пристрою та знайдіть інформацію про їхню підтримку. Зосередьтеся на процесорі, flash-пам’яті, Ethernet і Wi-Fi. Корисні поради є в hw.hacking.first.steps
- Переконайтеся, що ви маєте доступ до консолі та завантажувача (bootloader).
- Підготуйте та встановіть прошивку, слідкуйте за логами під час завантаження на наявність помилок.
- Перевірте розділення flash-пам’яті, роботу LED-індикаторів і кнопок.
GPIO
Більшість пристроїв використовують GPIO для керування світлодіодами та кнопками. Універсальних номерів GPIO не існує, тому OpenWrt повинен використовувати індивідуальні відповідності для кожного пристрою. Потрібно визначити, який GPIO відповідає за кожен світлодіод і кнопку.
GPIO-світлодіоди
Якщо світлодіод керується GPIO, потрібно встановити напрямок у `out` і знати полярність:
- Якщо світлодіод вмикається при значенні 1 — це активний рівень “high”
- Якщо світлодіод вмикається при значенні 0 — активний рівень “low”
Приклад перевірки одного 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
- Натиснути та утримувати кнопку
- Знову зчитати значення всіх 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
- Знайдіть ідентифікатор плати в OEM-джерелах, наприклад у `boardparms.c`
- Адаптуйте `imagetag.c` та логіку складання прошивки
- При необхідності застосуйте XOR до образу прошивки
Платформа Ramips
- Створіть профіль плати в `target/linux/ramips`
- Зареєструйте GPIO для LED, кнопок, Ethernet, Wi-Fi, макет розділів flash тощо
- Оновіть скрипти визначення пристрою та UCI налаштування
Поради
Після додавання нової плати, очистіть кеш збірки:
cd trunk rm -rf tmp make menuconfig
Якщо профіль пристрою не з’являється в `make menuconfig`, оновіть мітку часу Makefile:
touch target/linux/*/Makefile