• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Сетевой драйвер (wifi) в esp8266

panzerito

New member
Здравствуйте

Не могу разобраться, какие ф-ии вызывает и какими вызывается lwip, для получения raw данных от wifi, чтобы lwip потом их засунул/вытянул из своих структур. Где находится драйвер wifi в sdk и какое api он предоставляет? Я попробовал найти самостоятельно:

include/lwip/netif.h:
Код:
typedef err_t (*netif_input_fn)(struct pbuf *p, struct netif *inp);
/** Function prototype for netif->output functions. Called by lwIP when a packet
 * shall be sent. For ethernet netif, set this to 'etharp_output' and set
 * 'linkoutput'.
 *
 * @param netif The netif which shall send a packet
 * @param p The packet to send (p->payload points to IP header)
 * @param ipaddr The IP address to which the packet shall be sent
 */
typedef err_t (*netif_output_fn)(struct netif *netif, struct pbuf *p,
  ip_addr_t *ipaddr);
/** Function prototype for netif->linkoutput functions. Only used for ethernet
 * netifs. This function is called by ARP when a packet shall be sent.
esp8266web-master$ grep netif_input_fn -R *
app/sdklib/lwip/core/netif.c: ip_addr_t *gw, void *state, netif_init_fn init, netif_input_fn input)
app/sdklib/lwip/api/netifapi.c: netif_input_fn input)
include/lwip/netif.h:typedef err_t (*netif_input_fn)(struct pbuf *p, struct netif *inp);
include/lwip/netif.h: netif_input_fn input; // +16
include/lwip/netif.h: ip_addr_t *gw, void *state, netif_init_fn init, netif_input_fn input)ICACHE_FLASH_ATTR;
include/lwip/netifapi.h: netif_input_fn input;
include/lwip/netifapi.h: netif_input_fn input);

Интересны только neif.c и netifapi.c, но там инклудятся только файлы из lwip - никакой связи с драйвером.

В rom_phy.h есть rfcal_*, но что они делают неизвестно. Просто имя ф-ии и адрес. Ни адреса буфера для raw-данных, ничего.

P.S.
GitHub - kadamski/esp-lwip: LWIP for ESP8266:
This project does not contain complete LwIP stack. The code for network driver was not released by Espressif. Currently we only provide replacement for eagle_lwip_if.o from libmain.a. This module is responsible for setting up struct netif and calling netif_add() from LwIP.

Тему можно закрывать.

pps
pvvx говорил, что для rtl8710 можно без особых проблем собрать другой tcpip стек, а не только lwip. Там есть исходники сетевого драйвера?
 
Последнее редактирование:

pvvx

Активный участник сообщества
pps
pvvx говорил, что для rtl8710 можно без особых проблем собрать другой tcpip стек, а не только lwip. Там есть исходники сетевого драйвера?
Для ESP стыковка с LwIP к последним SDK (2.0.0) : esp8266web/eagle_lwip_if.c at master · pvvx/esp8266web · GitHub
Для RTL - в его SDK... WiFi часть везде "секретная" :)
Для ESP вам ещё надо менять "закрытые" инициализацию и прочие "события" из LwIP, DHСP, mDNS, и т.д.
В RTL почему-то "засикретили" только mDNS, но для ARM натаскан IDA и можно всё разобрать не затрачивая много времени...
 
Последнее редактирование:

panzerito

New member
А зачем в libpp.a есть mac_frame.o без внешних функций? Как ld сможет связать его с другим кодом? Или это какой-то хитрый трюк?

Код:
mac_frame.o:     file format elf32-xtensa-le
SYMBOL TABLE:
00000000 l    d  .text  00000000 .text
00000000 l    d  .data  00000000 .data
00000000 l    d  .bss   00000000 .bss
00000000 l    d  .comment       00000000 .comment
00000000 l    d  .xtensa.info   00000000 .xtensa.info
 

pvvx

Активный участник сообщества
А зачем в libpp.a есть mac_frame.o без внешних функций? Как ld сможет связать его с другим кодом? Или это какой-то хитрый трюк?

Код:
mac_frame.o:     file format elf32-xtensa-le
SYMBOL TABLE:
00000000 l    d  .text  00000000 .text
00000000 l    d  .data  00000000 .data
00000000 l    d  .bss   00000000 .bss
00000000 l    d  .comment       00000000 .comment
00000000 l    d  .xtensa.info   00000000 .xtensa.info
А там много такого.
Маке заходит в каталог, смотрит и видит *.c файл. Создает *.obj, даже если файл *.c пуст...
Так собраны либы у китайцев. C опциями -ffunction-sections -fdata-sections и подобным для более упрощенной выборки что вставлять в проект пользователя китайцы в Espressif ещё не знакомы. По этому у них ныне минимальная прошивка лезет только в 1 мегабайтную flash. Возможно, лет через десять в Espressif программист обучиться, но думается, что к тому времени никто не вспомнит о том, что была такая шарашкина конторка - Espressif.:)

Всё лишнее я выкидываю. См. *.bat esp8266web/lib at master · pvvx/esp8266web · GitHub

PS: Да, и я не программист, и не претендую...
 
Последнее редактирование:

panzerito

New member
Для ESP стыковка с LwIP к последним SDK (2.0.0) : esp8266web/eagle_lwip_if.c at master · pvvx/esp8266web · GitHub
Для RTL - в его SDK... WiFi часть везде "секретная" :)
Для ESP вам ещё надо менять "закрытые" инициализацию и прочие "события" из LwIP, DHСP, mDNS, и т.д.
В RTL почему-то "засикретили" только mDNS, но для ARM натаскан IDA и можно всё разобрать не затрачивая много времени...
Как я сейчас понял, есть tcpip стек - lwip, есть 802.11 стек в libnet80211.a. eagle_lwip_if.o связывает lwip и 802.11 стек, то есть даже api 802.11 стека засекречен. Попробовал разобраться так же с ameba, но не нашел вообще никаких библиотек в sdk-ameba-rtl8710af-v3.5a_without_NDA_GCC_V1.0.0. Собрал и изучил RTL00_HelloWorld - там вызываются ф-ии из rom-bios, никаких линковок с закрытыми библиотеками. Нужен какой-то другой sdk?

Откуда, кстати, espressif/realtek взяли 802.11 стек, вряд ли они его сами написали? из какой-то opensource реализации для contiki? Или у bsd?

ps В RTL00_HelloWorld нужно исправить имя rtl8710_flash_boot.s на rtl8710_flash_boot.S иначе make не найдет файл в linux.

pps Нашел библиотеки. Они подходят и для 8710?
sdk-ameba-rtl8710af-v3.5a_without_NDA_GCC_V1.0.0$ find ./ -name "lib*.a"
./component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_wlan_mp.a
./component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_sdcard.a
./component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_p2p.a
./component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_wps.a
./component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_websocket.a
./component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_rtlstd.a
./component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_wlan.a
./component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_platform.a
./component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_xmodem.a
./tools/simple_config_wizard/iOS/SimpleConfigWizard_v109/SimpleConfig/include/ZBarSDK/libzbar.a
./tools/simple_config_wizard/iOS/SimpleConfigWizard_v109/SimpleConfig/include/LibSimpleConfig/libLibSimpleConfig.a
 
Последнее редактирование:

pvvx

Активный участник сообщества
Откуда, кстати, espressif/realtek взяли 802.11 стек, вряд ли они его сами написали? из какой-то opensource реализации для contiki? Или у bsd?
Realtek наверно мучался сам.
Espressif взял что-то линиксовых и долго, долго правил.
что-то из этого freebsd/sys/net80211 at master · freebsd/freebsd · GitHub
У Espressif из него вырезано к 50%...
Вообще, начало всех исходников для WiFI вроде и вышло из Realtek... Если не путаю, т.к. давно это было.
pps Нашел библиотеки. Они подходят и для 8710?
Всё что 8195 подходит для 8710, кроме USB
На ESP так никто и не решился ревеснуть хоть что-то от WiFi. Заявлять - заявляли, я ждал, но тишина. По этому и не брался. А теперь для ESP актуальности нет.
 
Последнее редактирование:
Сверху Снизу