Preprocess all binary SDK symbols to add an sdk_ prefix

* This fixes the problem of axTLS symbols hmac_md5/hmac_sha1 having same
  name as symbols in libwpa (which have incompatible signatures)

* Also allows for easier identification and piece-by-piece removal of
  binary functions.

* Some libc symbols are not renamed, list is in lib/symbols_norename.txt
This commit is contained in:
Angus Gratton 2015-05-30 19:11:04 +10:00
parent 05019cb0ee
commit e743d03a78
19 changed files with 220 additions and 103 deletions

View file

@ -99,7 +99,7 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
SET_STKREG( XT_STK_A0, 0 ); /* to terminate GDB backtrace */ SET_STKREG( XT_STK_A0, 0 ); /* to terminate GDB backtrace */
SET_STKREG( XT_STK_A1, (uint32_t)sp + XT_STK_FRMSZ ); /* physical top of stack frame */ SET_STKREG( XT_STK_A1, (uint32_t)sp + XT_STK_FRMSZ ); /* physical top of stack frame */
SET_STKREG( XT_STK_A2, pvParameters ); /* parameters */ SET_STKREG( XT_STK_A2, pvParameters ); /* parameters */
SET_STKREG( XT_STK_EXIT, _xt_user_exit ); /* user exception exit dispatcher */ SET_STKREG( XT_STK_EXIT, sdk__xt_user_exit ); /* user exception exit dispatcher */
/* Set initial PS to int level 0, EXCM disabled ('rfe' will enable), user mode. */ /* Set initial PS to int level 0, EXCM disabled ('rfe' will enable), user mode. */
SET_STKREG( XT_STK_PS, PS_UM | PS_EXCM ); SET_STKREG( XT_STK_PS, PS_UM | PS_EXCM );
@ -139,19 +139,19 @@ void PendSV(enum SVC_ReqType req)
* after a Blob SV requests a soft interrupt by calling * after a Blob SV requests a soft interrupt by calling
* PendSV(SVC_MACLayer). * PendSV(SVC_MACLayer).
*/ */
extern portBASE_TYPE MacIsrSigPostDefHdl(void); extern portBASE_TYPE sdk_MacIsrSigPostDefHdl(void);
void SV_ISR(void) void SV_ISR(void)
{ {
portBASE_TYPE xHigherPriorityTaskWoken=pdFALSE ; portBASE_TYPE xHigherPriorityTaskWoken=pdFALSE ;
if(pending_maclayer_sv) if(pending_maclayer_sv)
{ {
xHigherPriorityTaskWoken = MacIsrSigPostDefHdl(); xHigherPriorityTaskWoken = sdk_MacIsrSigPostDefHdl();
pending_maclayer_sv = 0; pending_maclayer_sv = 0;
} }
if( xHigherPriorityTaskWoken || pending_soft_sv) if( xHigherPriorityTaskWoken || pending_soft_sv)
{ {
_xt_timer_int1(); sdk__xt_timer_int1();
pending_soft_sv = 0; pending_soft_sv = 0;
} }
} }
@ -175,14 +175,14 @@ void xPortSysTickHandle (void)
portBASE_TYPE xPortStartScheduler( void ) portBASE_TYPE xPortStartScheduler( void )
{ {
_xt_isr_attach(ETS_SOFT_INUM, SV_ISR); _xt_isr_attach(ETS_SOFT_INUM, SV_ISR);
_xt_isr_unmask(1<<ETS_SOFT_INUM); sdk__xt_isr_unmask(1<<ETS_SOFT_INUM);
/* Initialize system tick timer interrupt and schedule the first tick. */ /* Initialize system tick timer interrupt and schedule the first tick. */
_xt_tick_timer_init(); sdk__xt_tick_timer_init();
vTaskSwitchContext(); vTaskSwitchContext();
_xt_int_exit(); sdk__xt_int_exit();
/* Should not get here as the tasks are now running! */ /* Should not get here as the tasks are now running! */
return pdTRUE; return pdTRUE;
@ -254,7 +254,7 @@ uint16_t _xt_isr_handler(uint16_t i)
} }
} }
_xt_clear_ints(1<<index); sdk__xt_clear_ints(1<<index);
isr[index](); isr[index]();

View file

@ -183,18 +183,21 @@ not necessary for to use this port. They are defined so the common demo files
#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) #define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
/* ESPTODO: These parts of the FreeRTOS support are still in binary libraries */
#define vApplicationStackOverflowHook sdk_vApplicationStackOverflowHook
/* XTensa interrupt management functions, used in port.c. /* XTensa interrupt management functions, used in port.c.
Implementations in blob libs */ Some (w/ sdk_ prefix) are implemented in blob libs */
void _xt_int_exit (void); void sdk__xt_int_exit (void);
void _xt_user_exit (void); void sdk__xt_user_exit (void);
void _xt_tick_timer_init (void); void sdk__xt_tick_timer_init (void);
void _xt_isr_unmask (uint32_t unmask); void sdk__xt_isr_unmask (uint32_t unmask);
void _xt_isr_mask (uint32_t mask); void sdk__xt_isr_mask (uint32_t mask);
uint32_t _xt_read_ints (void); uint32_t sdk__xt_read_ints (void);
void _xt_clear_ints(uint32_t mask); void sdk__xt_clear_ints(uint32_t mask);
typedef void (* _xt_isr)(void); typedef void (* _xt_isr)(void);
void _xt_isr_attach (uint8_t i, _xt_isr func); void _xt_isr_attach (uint8_t i, _xt_isr func);
void _xt_timer_int1(void); void sdk__xt_timer_int1(void);
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -55,11 +55,16 @@ OBJCOPY = $(CROSS)objcopy
# of the root, with a 'component.mk' file. # of the root, with a 'component.mk' file.
COMPONENTS ?= FreeRTOS lwip COMPONENTS ?= FreeRTOS lwip
# libraries to link, mainly blobs provided by the esp-iot-rtos SDK # binary esp-iot-rtos SDK libraries to link. These are pre-processed prior to linking.
LIBS ?= gcc main net80211 phy pp ssl wpa hal SDK_LIBS ?= main net80211 phy pp wpa
# open source libraries linked in
LIBS ?= gcc hal
ENTRY_SYMBOL ?= sdk_call_user_start
CFLAGS = -Wall -Werror -Wl,-EL -nostdlib -mlongcalls -mtext-section-literals -std=gnu99 CFLAGS = -Wall -Werror -Wl,-EL -nostdlib -mlongcalls -mtext-section-literals -std=gnu99
LDFLAGS = -nostdlib -Wl,--no-check-sections -Wl,-L$(ROOT)lib -u call_user_start -Wl,-static -Wl,-Map=build/${TARGET}.map LDFLAGS = -nostdlib -Wl,--no-check-sections -Wl,-L$(BUILD_DIR)sdklib -Wl,-L$(ROOT)lib -u $(ENTRY_SYMBOL) -Wl,-static -Wl,-Map=build/${TARGET}.map
ifeq ($(FLAVOR),debug) ifeq ($(FLAVOR),debug)
CFLAGS += -g -O0 CFLAGS += -g -O0
@ -86,6 +91,7 @@ TARGET_DIR := $(dir $(firstword $(MAKEFILE_LIST)))
ROOT := $(dir $(lastword $(MAKEFILE_LIST))) ROOT := $(dir $(lastword $(MAKEFILE_LIST)))
# derive various parts of compiler/linker arguments # derive various parts of compiler/linker arguments
SDK_LIB_ARGS = $(addprefix -l,$(SDK_LIBS))
LIB_ARGS = $(addprefix -l,$(LIBS)) LIB_ARGS = $(addprefix -l,$(LIBS))
TARGET_OUT = $(BUILD_DIR)$(TARGET).out TARGET_OUT = $(BUILD_DIR)$(TARGET).out
LDFLAGS += $(addprefix -T$(ROOT),$(LINKER_SCRIPTS)) LDFLAGS += $(addprefix -T$(ROOT),$(LINKER_SCRIPTS))
@ -158,6 +164,37 @@ COMPONENT_ARS += $$($(1)_AR)
-include $$($(1)_OBJ_FILES:.o=.d) -include $$($(1)_OBJ_FILES:.o=.d)
endef endef
## Linking rules for SDK libraries
## SDK libraries are preprocessed to:
# - prefix all defined symbols with 'sdk_'
# - weaken all global symbols so they can be overriden from the open SDK side
# SDK binary libraries are preprocessed into build/lib
SDK_PROCESSED_LIBS = $(addsuffix .a,$(addprefix $(BUILD_DIR)sdklib/lib,$(SDK_LIBS)))
# Make rule for preprocessing each SDK library
#
$(BUILD_DIR)sdklib/%.a: $(ROOT)lib/%.a $(BUILD_DIR)sdklib/allsymbols.rename
$(vecho) "Pre-processing SDK library $< -> $@"
$(Q) $(OBJCOPY) --redefine-syms $(word 2,$^) --weaken $< $@
# Generate a regex to match symbols we don't want to rename, by parsing
# a list of symbol names
$(BUILD_DIR)sdklib/norename.match: $(ROOT)lib/symbols_norename.txt | $(BUILD_DIR)sdklib
grep -v "^#" $< | sed ':begin;$!N;s/\n/\\|/;tbegin' > $@
# Generate list of symbols to rename from a single library. Uses grep & sed.
$(BUILD_DIR)sdklib/%.rename: $(ROOT)lib/%.a $(BUILD_DIR)sdklib/norename.match
$(vecho) "Building symbol list for $< -> $@"
$(Q) $(NM) --defined $< | grep ' T ' | sed -r 's/(.+) T (.+)/\2 sdk_\2/' | grep -v `cat $(BUILD_DIR)sdklib/norename.match` > $@
# Build master list of all SDK-defined symbols to rename
$(BUILD_DIR)sdklib/allsymbols.rename: $(patsubst %.a,%.rename,$(SDK_PROCESSED_LIBS))
cat $^ > $@
## Include components (this is where the actual compiler sections are generated) ## Include components (this is where the actual compiler sections are generated)
$(foreach component,$(COMPONENTS), $(eval include $(ROOT)/$(component)/component.mk)) $(foreach component,$(COMPONENTS), $(eval include $(ROOT)/$(component)/component.mk))
@ -167,16 +204,16 @@ target_ROOT=$(TARGET_DIR)
$(eval $(call component_compile_rules,target)) $(eval $(call component_compile_rules,target))
# final linking step to produce .elf # final linking step to produce .elf
$(TARGET_OUT): $(COMPONENT_ARS) $(TARGET_OUT): $(COMPONENT_ARS) $(SDK_PROCESSED_LIBS)
$(vecho) "LD $@" $(vecho) "LD $@"
$(Q) $(LD) $(LD_SCRIPT) $(LDFLAGS) -Wl,--start-group $(LIB_ARGS) $(COMPONENT_ARS) -Wl,--end-group -o $@ $(Q) $(LD) $(LD_SCRIPT) $(LDFLAGS) -Wl,--start-group $(SDK_LIB_ARGS) $(LIB_ARGS) $(COMPONENT_ARS) -Wl,--end-group -o $@
$(BUILD_DIR) $(FW_BASE): $(BUILD_DIR) $(FW_BASE) $(BUILD_DIR)sdklib:
$(Q) mkdir -p $@ $(Q) mkdir -p $@
$(FW_FILE_1) $(FW_FILE_2): $(TARGET_OUT) $(FW_BASE) $(FW_FILE_1) $(FW_FILE_2): $(TARGET_OUT) $(FW_BASE)
$(vecho) "FW $@" $(vecho) "FW $@"
$(ESPTOOL) elf2image $< -o $(FW_BASE) $(ESPTOOL) elf2image --entry-symbol $(ENTRY_SYMBOL) $< -o $(FW_BASE)
flash: $(FW_FILE_1) $(FW_FILE_2) flash: $(FW_FILE_1) $(FW_FILE_2)
$(ESPTOOL) -p $(ESPPORT) --baud $(ESPBAUD) write_flash $(FW_1) $(FW_FILE_1) $(FW_2) $(FW_FILE_2) $(ESPTOOL) -p $(ESPPORT) --baud $(ESPBAUD) write_flash $(FW_1) $(FW_FILE_1) $(FW_2) $(FW_FILE_2)
@ -196,3 +233,7 @@ rebuild:
clean: clean:
$(Q) rm -rf $(BUILD_DIR) $(Q) rm -rf $(BUILD_DIR)
$(Q) rm -rf $(FW_BASE) $(Q) rm -rf $(FW_BASE)
# prevent "intermediate" files from being deleted
.SECONDARY:

View file

@ -109,17 +109,17 @@ void http_get_task(void *pvParameters)
void user_init(void) void user_init(void)
{ {
uart_div_modify(0, UART_CLK_FREQ / 115200); sdk_uart_div_modify(0, UART_CLK_FREQ / 115200);
printf("SDK version:%s\n", system_get_sdk_version()); printf("SDK version:%s\n", sdk_system_get_sdk_version());
struct station_config config = { struct sdk_station_config config = {
.ssid = WIFI_SSID, .ssid = WIFI_SSID,
.password = WIFI_PASS, .password = WIFI_PASS,
}; };
/* required to call wifi_set_opmode before station_set_config */ /* required to call wifi_set_opmode before station_set_config */
wifi_set_opmode(STATION_MODE); sdk_wifi_set_opmode(STATION_MODE);
wifi_station_set_config(&config); sdk_wifi_station_set_config(&config);
xTaskCreate(&http_get_task, (signed char *)"get_task", 256, NULL, 2, NULL); xTaskCreate(&http_get_task, (signed char *)"get_task", 256, NULL, 2, NULL);
} }

33
include/esp8266.h Normal file
View file

@ -0,0 +1,33 @@
/* esp8266.h
*
* ESP-specific SoC-level addresses, macros, etc.
* Part of esp-open-rtos
*
* Copyright (C) 2105 Superhouse Automation Pty Ltd
* BSD Licensed as described in the file LICENSE
*/
#include <stdint.h>
#ifndef _ESP8266_H
#define _ESP8266_H
/* Use this macro to store constant values in IROM flash instead
of having them loaded into rodata (which resides in DRAM)
Unlike the ESP8266 SDK you don't need an attribute like this for
standard functions. They're stored in flash by default. But
variables need them.
Important to note: IROM flash can only be accessed via 32-bit word
aligned reads. It's up to the user of this attribute to ensure this.
*/
#define IROM __attribute__((section(".irom0"))) const
/* Register addresses
ESPTODO: break this out to its own header file and clean it up, add other regs, etc.
*/
static volatile __attribute__((unused)) uint32_t *ESP_REG_WDT = (uint32_t *)0x60000900;
#endif

View file

@ -18,9 +18,9 @@
#define IPSTR "%d.%d.%d.%d" #define IPSTR "%d.%d.%d.%d"
void os_delay_us(uint16_t us); void sdk_os_delay_us(uint16_t us);
void os_install_putc1(void (*p)(char c)); void sdk_os_install_putc1(void (*p)(char c));
void os_putc(char c); void sdk_os_putc(char c);
#endif #endif

View file

@ -6,7 +6,7 @@
#ifndef __ESP_SOFTAP_H__ #ifndef __ESP_SOFTAP_H__
#define __ESP_SOFTAP_H__ #define __ESP_SOFTAP_H__
struct softap_config { struct sdk_softap_config {
uint8_t ssid[32]; uint8_t ssid[32];
uint8_t password[64]; uint8_t password[64];
uint8_t ssid_len; uint8_t ssid_len;
@ -17,7 +17,7 @@ struct softap_config {
uint16_t beacon_interval; uint16_t beacon_interval;
}; };
bool wifi_softap_get_config(struct softap_config *config); bool sdk_wifi_softap_get_config(struct sdk_softap_config *config);
bool wifi_softap_set_config(struct softap_config *config); bool sdk_wifi_softap_set_config(struct sdk_softap_config *config);
#endif #endif

View file

@ -1,6 +1,8 @@
/* /*
* Copyright (C) 2013 -2014 Espressif System * Copyright (C) 2013 -2014 Espressif System
* *
*
* Adapted from BSD licensed esp_iot_rtos_sdk v0.9.9
*/ */
#ifndef __ESP_STA_H__ #ifndef __ESP_STA_H__
@ -8,27 +10,27 @@
#include "queue.h" #include "queue.h"
struct station_config { struct sdk_station_config {
uint8_t ssid[32]; uint8_t ssid[32];
uint8_t password[64]; uint8_t password[64];
uint8_t bssid_set; uint8_t bssid_set;
uint8_t bssid[6]; uint8_t bssid[6];
}; };
bool wifi_station_get_config(struct station_config *config); bool sdk_wifi_station_get_config(struct sdk_station_config *config);
bool wifi_station_set_config(struct station_config *config); bool sdk_wifi_station_set_config(struct sdk_station_config *config);
bool wifi_station_connect(void); bool sdk_wifi_station_connect(void);
bool wifi_station_disconnect(void); bool sdk_wifi_station_disconnect(void);
struct scan_config { struct sdk_scan_config {
uint8_t *ssid; uint8_t *ssid;
uint8_t *bssid; uint8_t *bssid;
uint8_t channel; uint8_t channel;
uint8_t show_hidden; uint8_t show_hidden;
}; };
struct bss_info { struct sdk_bss_info {
STAILQ_ENTRY(bss_info) next; STAILQ_ENTRY(bss_info) next;
uint8_t bssid[6]; uint8_t bssid[6];
@ -46,14 +48,14 @@ typedef enum {
SCAN_PENDING, SCAN_PENDING,
SCAN_BUSY, SCAN_BUSY,
SCAN_CANCEL, SCAN_CANCEL,
} scan_status_t; } sdk_scan_status_t;
typedef void (* scan_done_cb_t)(void *arg, scan_status_t status); typedef void (* sdk_scan_done_cb_t)(void *arg, sdk_scan_status_t status);
bool wifi_station_scan(struct scan_config *config, scan_done_cb_t cb); bool sdk_wifi_station_scan(struct sdk_scan_config *config, sdk_scan_done_cb_t cb);
uint8_t wifi_station_get_auto_connect(void); uint8_t sdk_wifi_station_get_auto_connect(void);
bool wifi_station_set_auto_connect(uint8_t set); bool sdk_wifi_station_set_auto_connect(uint8_t set);
enum { enum {
STATION_IDLE = 0, STATION_IDLE = 0,
@ -64,6 +66,6 @@ enum {
STATION_GOT_IP STATION_GOT_IP
}; };
uint8_t wifi_station_get_connect_status(void); uint8_t sdk_wifi_station_get_connect_status(void);
#endif #endif

View file

@ -6,14 +6,14 @@
#ifndef __ESP_SYSTEM_H__ #ifndef __ESP_SYSTEM_H__
#define __ESP_SYSTEM_H__ #define __ESP_SYSTEM_H__
enum rst_reason { enum sdk_rst_reason {
DEFAULT_RST = 0, DEFAULT_RST = 0,
WDT_RST = 1, WDT_RST = 1,
EXCEPTION_RST = 2, EXCEPTION_RST = 2,
SOFT_RST = 3 SOFT_RST = 3
}; };
struct rst_info{ struct sdk_rst_info{
uint32_t reason; uint32_t reason;
uint32_t exccause; uint32_t exccause;
uint32_t epc1; uint32_t epc1;
@ -24,26 +24,26 @@ struct rst_info{
uint32_t rtn_addr; uint32_t rtn_addr;
}; };
struct rst_info* system_get_rst_info(void); struct rst_info* sdk_system_get_rst_info(void);
const char* system_get_sdk_version(void); const char* sdk_system_get_sdk_version(void);
void system_restore(void); void sdk_system_restore(void);
void system_restart(void); void sdk_system_restart(void);
void system_deep_sleep(uint32_t time_in_us); void sdk_system_deep_sleep(uint32_t time_in_us);
uint32_t system_get_time(void); uint32_t sdk_system_get_time(void);
void system_print_meminfo(void); void sdk_system_print_meminfo(void);
uint32_t system_get_free_heap_size(void); uint32_t sdk_system_get_free_heap_size(void);
uint32_t system_get_chip_id(void); uint32_t sdk_system_get_chip_id(void);
uint32_t system_rtc_clock_cali_proc(void); uint32_t sdk_system_rtc_clock_cali_proc(void);
uint32_t system_get_rtc_time(void); uint32_t sdk_system_get_rtc_time(void);
bool system_rtc_mem_read(uint8_t src, void *dst, uint16_t n); bool sdk_system_rtc_mem_read(uint8_t src, void *dst, uint16_t n);
bool system_rtc_mem_write(uint8_t dst, const void *src, uint16_t n); bool sdk_system_rtc_mem_write(uint8_t dst, const void *src, uint16_t n);
void system_uart_swap(void); void sdk_system_uart_swap(void);
#endif #endif

View file

@ -7,16 +7,16 @@
#define __ESP_TIMER_H__ #define __ESP_TIMER_H__
/* timer related */ /* timer related */
typedef void os_timer_func_t(void *timer_arg); typedef void sdk_os_timer_func_t(void *timer_arg);
typedef struct _os_timer_t { typedef struct _os_timer_t {
struct _os_timer_t *timer_next; struct _os_timer_t *timer_next;
void *freerots_handle; void *freerots_handle;
uint32_t timer_expire; uint32_t timer_expire;
uint32_t timer_period; uint32_t timer_period;
os_timer_func_t *timer_func; sdk_os_timer_func_t *timer_func;
bool timer_repeat_flag; bool timer_repeat_flag;
void *timer_arg; void *timer_arg;
} os_timer_t; } sdk_os_timer_t;
#endif #endif

View file

@ -1,6 +1,9 @@
/* /*
* Copyright (C) 2013 -2014 Espressif System * Copyright (C) 2013 -2014 Espressif System
* *
* Adapted from BSD licensed esp_iot_rtos_sdk v0.9.9
*
* Functions declared in this header are defined in libmain.a
*/ */
#ifndef __ESP_WIFI_H__ #ifndef __ESP_WIFI_H__
@ -23,8 +26,8 @@ typedef enum _auth_mode {
AUTH_MAX AUTH_MAX
} AUTH_MODE; } AUTH_MODE;
uint8_t wifi_get_opmode(void); uint8_t sdk_wifi_get_opmode(void);
bool wifi_set_opmode(uint8_t opmode); bool sdk_wifi_set_opmode(uint8_t opmode);
enum { enum {
STATION_IF = 0, STATION_IF = 0,
@ -38,29 +41,29 @@ struct ip_info {
struct ip_addr gw; struct ip_addr gw;
}; };
bool wifi_get_ip_info(uint8_t if_index, struct ip_info *info); bool sdk_wifi_get_ip_info(uint8_t if_index, struct ip_info *info);
bool wifi_set_ip_info(uint8_t if_index, struct ip_info *info); bool sdk_wifi_set_ip_info(uint8_t if_index, struct ip_info *info);
bool wifi_get_macaddr(uint8_t if_index, uint8_t *macaddr); bool sdk_wifi_get_macaddr(uint8_t if_index, uint8_t *macaddr);
bool wifi_set_macaddr(uint8_t if_index, uint8_t *macaddr); bool sdk_wifi_set_macaddr(uint8_t if_index, uint8_t *macaddr);
uint8_t wifi_get_channel(void); uint8_t sdk_wifi_get_channel(void);
bool wifi_set_channel(uint8_t channel); bool sdk_wifi_set_channel(uint8_t channel);
void wifi_status_led_install(uint8_t gpio_id, uint32_t gpio_name, uint8_t gpio_func); void sdk_wifi_status_led_install(uint8_t gpio_id, uint32_t gpio_name, uint8_t gpio_func);
void wifi_promiscuous_enable(uint8_t promiscuous); void sdk_wifi_promiscuous_enable(uint8_t promiscuous);
typedef void (* wifi_promiscuous_cb_t)(uint8_t *buf, uint16_t len); typedef void (* sdk_wifi_promiscuous_cb_t)(uint8_t *buf, uint16_t len);
void wifi_set_promiscuous_rx_cb(wifi_promiscuous_cb_t cb); void sdk_wifi_set_promiscuous_rx_cb(sdk_wifi_promiscuous_cb_t cb);
enum phy_mode { enum sdk_phy_mode {
PHY_MODE_11B = 1, PHY_MODE_11B = 1,
PHY_MODE_11G = 2, PHY_MODE_11G = 2,
PHY_MODE_11N = 3 PHY_MODE_11N = 3
}; };
enum phy_mode wifi_get_phy_mode(void); enum phy_mode sdk_wifi_get_phy_mode(void);
bool wifi_set_phy_mode(enum phy_mode mode); bool sdk_wifi_set_phy_mode(enum sdk_phy_mode mode);
#endif #endif

View file

@ -1,6 +1,11 @@
/* This source file contains function prototypes for functions defined /* sdk_prototypes.h
This source file contains function prototypes for functions defined
in the remaining "binary blob" ESP IoT RTOS SDK libraries. Sorted in the remaining "binary blob" ESP IoT RTOS SDK libraries. Sorted
by which library they appear in. by which library they appear in.
Function names here have the 'sdk_' prefix that is put on all binary library functions
by the Open RTOS SDK.
*/ */
#ifndef SDK_PROTOTYPES_H #ifndef SDK_PROTOTYPES_H
#define SDK_PROTOTYPES_H #define SDK_PROTOTYPES_H
@ -18,18 +23,28 @@ struct ip_addr;
uart_no = 0 or 1 for which UART uart_no = 0 or 1 for which UART
new_divisor = Calculated in the form UART_CLK_FREQ / BAUD new_divisor = Calculated in the form UART_CLK_FREQ / BAUD
*/ */
void uart_div_modify(uint32_t uart_no, uint32_t new_divisor); void sdk_uart_div_modify(uint32_t uart_no, uint32_t new_divisor);
/* Read a single character from the UART.
*/
char sdk_uart_rx_one_char(void);
/* Write a single character to the UART.
*/
void sdk_os_putc(char c);
/* Called when an IP gets set on the "station" (client) interface. /* Called when an IP gets set on the "station" (client) interface.
*/ */
void system_station_got_ip_set(struct ip_addr *ip_addr, struct ip_addr *sn_mask, struct ip_addr *gw_addr); void sdk_system_station_got_ip_set(struct ip_addr *ip_addr, struct ip_addr *sn_mask, struct ip_addr *gw_addr);
/* This is a no-op wrapper around ppRecycleRxPkt, which is defined in libpp.a /* This is a no-op wrapper around ppRecycleRxPkt, which is defined in libpp.a
It's called when a pbuf is freed, and allows pp to reuse the 'eb' pointer to ESP-specific It's called when a pbuf is freed, and allows pp to reuse the 'eb' pointer to ESP-specific
pbuf data. (See esp-lwip pbuf.h) pbuf data. (See esp-lwip pbuf.h)
*/ */
void system_pp_recycle_rx_pkt(void *eb); void sdk_system_pp_recycle_rx_pkt(void *eb);
const char* sdk_system_get_sdk_version(void);
#endif #endif

View file

@ -10,15 +10,15 @@ typedef enum {
SPI_FLASH_RESULT_OK, SPI_FLASH_RESULT_OK,
SPI_FLASH_RESULT_ERR, SPI_FLASH_RESULT_ERR,
SPI_FLASH_RESULT_TIMEOUT SPI_FLASH_RESULT_TIMEOUT
} SpiFlashOpResult; } sdk_SpiFlashOpResult;
#define SPI_FLASH_SEC_SIZE 4096 #define SPI_FLASH_SEC_SIZE 4096
uint32_t spi_flash_get_id(void); uint32_t sdk_spi_flash_get_id(void);
SpiFlashOpResult spi_flash_read_status(uint32_t *status); sdk_SpiFlashOpResult sdk_spi_flash_read_status(uint32_t *status);
SpiFlashOpResult spi_flash_write_status(uint32_t status_value); sdk_SpiFlashOpResult sdk_spi_flash_write_status(uint32_t status_value);
SpiFlashOpResult spi_flash_erase_sector(uint16_t sec); sdk_SpiFlashOpResult sdk_spi_flash_erase_sector(uint16_t sec);
SpiFlashOpResult spi_flash_write(uint32_t des_addr, uint32_t *src_addr, uint32_t size); sdk_SpiFlashOpResult sdk_spi_flash_write(uint32_t des_addr, uint32_t *src_addr, uint32_t size);
SpiFlashOpResult spi_flash_read(uint32_t src_addr, uint32_t *des_addr, uint32_t size); sdk_SpiFlashOpResult sdk_spi_flash_read(uint32_t src_addr, uint32_t *des_addr, uint32_t size);
#endif #endif

View file

@ -1,4 +1,8 @@
/* This linker script generated from xt-genldscripts.tpp for LSP . */ /* This linker script generated from xt-genldscripts.tpp for LSP .
Modified for esp open RTOS, this linker script is no longer the same as the esp_iot_rtos_sdk one.
*/
/* Linker Script for ld -N */ /* Linker Script for ld -N */
MEMORY MEMORY
{ {
@ -19,12 +23,12 @@ PHDRS
/* Default entry point: */ /* Default entry point: */
ENTRY(call_user_start) ENTRY(sdk_call_user_start)
EXTERN(_DebugExceptionVector) EXTERN(sdk__DebugExceptionVector)
EXTERN(_DoubleExceptionVector) EXTERN(sdk__DoubleExceptionVector)
EXTERN(_KernelExceptionVector) EXTERN(sdk__KernelExceptionVector)
EXTERN(_NMIExceptionVector) EXTERN(sdk__NMIExceptionVector)
EXTERN(_UserExceptionVector) EXTERN(sdk__UserExceptionVector)
PROVIDE(_memmap_vecbase_reset = 0x40000000); PROVIDE(_memmap_vecbase_reset = 0x40000000);
/* Various memory-map dependent cache attribute settings: */ /* Various memory-map dependent cache attribute settings: */
_memmap_cacheattr_wb_base = 0x00000110; _memmap_cacheattr_wb_base = 0x00000110;

Binary file not shown.

6
lib/symbols_norename.txt Normal file
View file

@ -0,0 +1,6 @@
# this is a stop-gap to avoid renaming some useful libc
# symbols to sdk_xxx
puts
printf
putchar
atoi

View file

@ -47,7 +47,7 @@
#include "netif/etharp.h" #include "netif/etharp.h"
/* declared in libnet80211.a */ /* declared in libnet80211.a */
int8_t ieee80211_output_pbuf(struct netif *ifp, struct pbuf* pb); int8_t sdk_ieee80211_output_pbuf(struct netif *ifp, struct pbuf* pb);
static err_t static err_t
low_level_output(struct netif *netif, struct pbuf *p) low_level_output(struct netif *netif, struct pbuf *p)
@ -55,7 +55,7 @@ low_level_output(struct netif *netif, struct pbuf *p)
struct pbuf *q; struct pbuf *q;
for(q = p; q != NULL; q = q->next) { for(q = p; q != NULL; q = q->next) {
ieee80211_output_pbuf(netif, q); sdk_ieee80211_output_pbuf(netif, q);
} }
LINK_STATS_INC(link.xmit); LINK_STATS_INC(link.xmit);

View file

@ -35,6 +35,14 @@
/* include ESP SDK prototypes as they're used in some LWIP routines */ /* include ESP SDK prototypes as they're used in some LWIP routines */
#include "espressif/sdk_prototypes.h" #include "espressif/sdk_prototypes.h"
/* ESP8266 SDK Interface
The lwip-esp stack is designed to be also compatible with other ESP8266 SDKs,
so we can't use our 'sdk_' prefixes there
*/
#define system_station_got_ip_set sdk_system_station_got_ip_set
#define system_pp_recycle_rx_pkt sdk_system_pp_recycle_rx_pkt
/* Include some files for defining library routines */ /* Include some files for defining library routines */
#include <stdio.h> /* printf, fflush, FILE */ #include <stdio.h> /* printf, fflush, FILE */
#include <stdlib.h> /* abort */ #include <stdlib.h> /* abort */

View file

@ -37,6 +37,8 @@
#include "queue.h" #include "queue.h"
#include "semphr.h" #include "semphr.h"
/* MBOX primitives */
#define SYS_MBOX_NULL ( ( xQueueHandle ) NULL ) #define SYS_MBOX_NULL ( ( xQueueHandle ) NULL )
#define SYS_SEM_NULL ( ( xSemaphoreHandle ) NULL ) #define SYS_SEM_NULL ( ( xSemaphoreHandle ) NULL )
#define SYS_DEFAULT_THREAD_STACK_DEPTH configMINIMAL_STACK_SIZE #define SYS_DEFAULT_THREAD_STACK_DEPTH configMINIMAL_STACK_SIZE