Подключены ESP32|Linux, обновлен интерфейс
This commit is contained in:
@@ -7,24 +7,30 @@
|
||||
|
||||
Рабочая конфигурация проверена на **ESP-IDF v6.0.2** с использованием целевой
|
||||
платформы Linux и TAP-интерфейса без физической платы ESP32.
|
||||
Сборка прошивки для **ESP32** также выполнена успешно; запуск на физической
|
||||
плате пока не проверялся.
|
||||
|
||||
## Структура проекта
|
||||
|
||||
| Модуль | Назначение |
|
||||
| --- | --- |
|
||||
| `components/lwip` | Локальная копия lwIP; в `etharp_input()` установлен перехват ARP |
|
||||
| `patches/lwip/etharp.c` | Изменённый файл lwIP с перехватом ARP в `etharp_input()` |
|
||||
| `patches/lwip/prepare.py` | Подготавливает lwIP из ESP-IDF в каталоге сборки с рабочими исправлениями |
|
||||
| `cmake/prepare_lwip.cmake` | Подключает подготовленную библиотеку при сборке Linux и ESP32 |
|
||||
| `components/arp_monitor` | Принимает IP/MAC из lwIP через очередь FreeRTOS |
|
||||
| `components/device_list` | Хранит до 64 найденных устройств в RAM |
|
||||
| `components/web_server` | Отдаёт HTML-таблицу устройств и обрабатывает `/ping` |
|
||||
| `components/web_server` | GET `/` показывает таблицу; POST `/` запускает Ping с возвратом на главную |
|
||||
| `components/ping` | Запускает стандартный `esp_ping` для выбранных узлов |
|
||||
| `components/protocol_examples_tapif_io` | Подключает lwIP к Linux TAP без ESP32 |
|
||||
| `main/main.c` | Отвечает за инициализацию компонентов |
|
||||
| `patches/protocol_examples_tapif_io` | Исправленные `tapif.c` и `tapif.h` для TAP-компонента ESP-IDF v6.0.2 |
|
||||
| `cmake/tapif_patch.cmake` | Подставляет исправленные файлы при сборке Linux |
|
||||
| `main/main.c` | Инициализирует компоненты и вызывает `example_connect()` |
|
||||
| `main/idf_component.yml` | Подключает TAP-компонент для Linux или `protocol_examples_common` для платы из ESP-IDF |
|
||||
|
||||
Путь входящего пакета:
|
||||
|
||||
1. TAP передаёт Ethernet-кадр в lwIP.
|
||||
1. Сетевой интерфейс (TAP при тестировании на Linux) передаёт Ethernet-кадр в lwIP.
|
||||
2. `ethernet_input()` определяет тип кадра `ETHTYPE_ARP` и вызывает
|
||||
`etharp_input()` из `components/lwip/lwip/src/core/ipv4/etharp.c`.
|
||||
`etharp_input()` из `patches/lwip/etharp.c`.
|
||||
3. После разбора ARP-заголовка `etharp_input()` вызывает
|
||||
`arp_monitor_report()` с IP- и MAC-адресом отправителя.
|
||||
4. `arp_monitor_report()` копирует данные в неблокирующую очередь FreeRTOS.
|
||||
@@ -37,7 +43,10 @@
|
||||
|
||||
## Примечание
|
||||
|
||||
Текущая версия полностью проверена на целевой платформе Linux с использованием
|
||||
TAP-интерфейса без физической платы. Для запуска на ESP32 необходимо
|
||||
дополнительно реализовать инициализацию Wi-Fi и подключение устройства к
|
||||
локальной сети.
|
||||
Проект проверен в работе на Linux/TAP. Прошивка для ESP32 успешно собирается,
|
||||
но на самой плате пока не запускалась.
|
||||
|
||||
Изменённый `etharp.c` хранится в `patches/lwip`. Библиотека lwIP автоматически
|
||||
подготавливается из ESP-IDF v6.0.2 в каталоге сборки. Хранить её в `components`
|
||||
или вручную восстанавливать после клонирования не нужно.
|
||||
TAP-компонент берётся из ESP-IDF с исправлениями из `patches/protocol_examples_tapif_io`.
|
||||
|
||||
Reference in New Issue
Block a user