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

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

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

  • Складіть детальний список мікросхем пристрою та знайдіть інформацію про їхню підтримку. Зосередьтеся на процесорі, flash-пам’яті, Ethernet і Wi-Fi. Корисні поради є в hw.hacking.first.steps
  • Переконайтеся, що ви маєте доступ до консолі та завантажувача (bootloader).
  • Підготуйте та встановіть прошивку, слідкуйте за логами під час завантаження на наявність помилок.
  • Перевірте розділення flash-пам’яті, роботу LED-індикаторів і кнопок.

Більшість пристроїв використовують GPIO для керування світлодіодами та кнопками. Універсальних номерів GPIO не існує, тому OpenWrt повинен використовувати індивідуальні відповідності для кожного пристрою. Потрібно визначити, який 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-dump.sh` для автоматизації.

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

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

  • Знайдіть ідентифікатор плати в OEM-джерелах, наприклад у `boardparms.c`
  • Адаптуйте `imagetag.c` та логіку складання прошивки
  • При необхідності застосуйте XOR до образу прошивки
  • Створіть профіль плати в `target/linux/ramips`
  • Зареєструйте GPIO для LED, кнопок, Ethernet, Wi-Fi, макет розділів flash тощо
  • Оновіть скрипти визначення пристрою та UCI налаштування

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

cd trunk
rm -rf tmp
make menuconfig

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

touch target/linux/*/Makefile
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/05/25 20:59
  • by vazaz