• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 актуальности нет.
 
Последнее редактирование:
Сверху Снизу