mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-05-21 00:56:38 +08:00
NEW VERSION: 1.2.0
1. add modified version libgcc.a, remove functions which are already in rom, for removed functions, refer to eagle.rom.addr.v6.ld; 2. add modified version libcirom.a, remove functions which are already in rom, for removed functions, refer to eagle.rom.addr.v6.ld; 3. modify eagle.rom.addr.v6.ld; 4. modify Makefile, project can be separated from SDK; 5. add a project template in examples folder, it's IMPORTANT, PLS refer to readme.txt in project_template; 6. remove app project folder, project_template is a good startup; 7. use gcc by default; 8. modify ld struct, add some comment and Flash MAP, it's clear now; 9. add upgrade.h; 10.other minor changes;
This commit is contained in:
60
Makefile
60
Makefile
@ -4,20 +4,20 @@ ifndef PDIR
|
|||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(COMPILE), gcc)
|
ifeq ($(COMPILE), xcc)
|
||||||
|
AR = xt-ar
|
||||||
|
CC = xt-xcc
|
||||||
|
NM = xt-nm
|
||||||
|
CPP = xt-xt++
|
||||||
|
OBJCOPY = xt-objcopy
|
||||||
|
OBJDUMP = xt-objdump
|
||||||
|
else
|
||||||
AR = xtensa-lx106-elf-ar
|
AR = xtensa-lx106-elf-ar
|
||||||
CC = xtensa-lx106-elf-gcc
|
CC = xtensa-lx106-elf-gcc
|
||||||
NM = xtensa-lx106-elf-nm
|
NM = xtensa-lx106-elf-nm
|
||||||
CPP = xtensa-lx106-elf-g++
|
CPP = xtensa-lx106-elf-g++
|
||||||
OBJCOPY = xtensa-lx106-elf-objcopy
|
OBJCOPY = xtensa-lx106-elf-objcopy
|
||||||
OBJDUMP = xtensa-lx106-elf-objdump
|
OBJDUMP = xtensa-lx106-elf-objdump
|
||||||
else
|
|
||||||
AR = xt-ar
|
|
||||||
CC = xt-xcc
|
|
||||||
NM = xt-nm
|
|
||||||
CPP = xt-xt++
|
|
||||||
OBJCOPY = xt-objcopy
|
|
||||||
OBJDUMP = xt-objdump
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
BOOT?=none
|
BOOT?=none
|
||||||
@ -238,14 +238,14 @@ $(BINODIR)/%.bin: $(IMAGEODIR)/%.out
|
|||||||
@mkdir -p $(BINODIR)
|
@mkdir -p $(BINODIR)
|
||||||
|
|
||||||
ifeq ($(APP), 0)
|
ifeq ($(APP), 0)
|
||||||
@$(RM) -r ../bin/eagle.S ../bin/eagle.dump
|
@$(RM) -r $(BIN_PATH)/eagle.S $(BIN_PATH)/eagle.dump
|
||||||
@$(OBJDUMP) -x -s $< > ../bin/eagle.dump
|
@$(OBJDUMP) -x -s $< > $(BIN_PATH)/eagle.dump
|
||||||
@$(OBJDUMP) -S $< > ../bin/eagle.S
|
@$(OBJDUMP) -S $< > $(BIN_PATH)/eagle.S
|
||||||
else
|
else
|
||||||
@mkdir -p ../bin/upgrade
|
@mkdir -p $(BIN_PATH)/upgrade
|
||||||
@$(RM) -r ../bin/upgrade/$(BIN_NAME).S ../bin/upgrade/$(BIN_NAME).dump
|
@$(RM) -r $(BIN_PATH)/upgrade/$(BIN_NAME).S $(BIN_PATH)/upgrade/$(BIN_NAME).dump
|
||||||
@$(OBJDUMP) -x -s $< > ../bin/upgrade/$(BIN_NAME).dump
|
@$(OBJDUMP) -x -s $< > $(BIN_PATH)/upgrade/$(BIN_NAME).dump
|
||||||
@$(OBJDUMP) -S $< > ../bin/upgrade/$(BIN_NAME).S
|
@$(OBJDUMP) -S $< > $(BIN_PATH)/upgrade/$(BIN_NAME).S
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@$(OBJCOPY) --only-section .text -O binary $< eagle.app.v6.text.bin
|
@$(OBJCOPY) --only-section .text -O binary $< eagle.app.v6.text.bin
|
||||||
@ -255,22 +255,28 @@ endif
|
|||||||
|
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "!!!"
|
@echo "!!!"
|
||||||
|
@echo "SDK_PATH: $(SDK_PATH)"
|
||||||
|
|
||||||
ifeq ($(app), 0)
|
ifeq ($(app), 0)
|
||||||
@python ../tools/gen_appbin.py $< 0 $(mode) $(freqdiv) $(size_map)
|
@python $(SDK_PATH)/tools/gen_appbin.py $< 0 $(mode) $(freqdiv) $(size_map)
|
||||||
@mv eagle.app.flash.bin ../bin/eagle.flash.bin
|
@mv eagle.app.flash.bin $(BIN_PATH)/eagle.flash.bin
|
||||||
@mv eagle.app.v6.irom0text.bin ../bin/eagle.irom0text.bin
|
@mv eagle.app.v6.irom0text.bin $(BIN_PATH)/eagle.irom0text.bin
|
||||||
@rm eagle.app.v6.*
|
@rm eagle.app.v6.*
|
||||||
|
@echo "BIN_PATH: $(BIN_PATH)"
|
||||||
|
@echo ""
|
||||||
@echo "No boot needed."
|
@echo "No boot needed."
|
||||||
@echo "Generate eagle.flash.bin and eagle.irom0text.bin successully in folder bin."
|
@echo "Generate eagle.flash.bin and eagle.irom0text.bin successully in BIN_PATH"
|
||||||
@echo "eagle.flash.bin-------->0x00000"
|
@echo "eagle.flash.bin-------->0x00000"
|
||||||
@echo "eagle.irom0text.bin---->0x40000"
|
@echo "eagle.irom0text.bin---->0x40000"
|
||||||
else
|
else
|
||||||
|
@echo "BIN_PATH: $(BIN_PATH)/upgrade"
|
||||||
|
@echo ""
|
||||||
|
|
||||||
ifneq ($(boot), new)
|
ifneq ($(boot), new)
|
||||||
@python ../tools/gen_appbin.py $< 1 $(mode) $(freqdiv) $(size_map)
|
@python $(SDK_PATH)/tools/gen_appbin.py $< 1 $(mode) $(freqdiv) $(size_map)
|
||||||
@echo "Support boot_v1.1 and +"
|
@echo "Support boot_v1.1 and +"
|
||||||
else
|
else
|
||||||
@python ../tools/gen_appbin.py $< 2 $(mode) $(freqdiv) $(size_map)
|
@python $(SDK_PATH)/tools/gen_appbin.py $< 2 $(mode) $(freqdiv) $(size_map)
|
||||||
|
|
||||||
ifeq ($(size_map), 6)
|
ifeq ($(size_map), 6)
|
||||||
@echo "Support boot_v1.4 and +"
|
@echo "Support boot_v1.4 and +"
|
||||||
@ -283,9 +289,9 @@ else
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@mv eagle.app.flash.bin ../bin/upgrade/$(BIN_NAME).bin
|
@mv eagle.app.flash.bin $(BIN_PATH)/upgrade/$(BIN_NAME).bin
|
||||||
@rm eagle.app.v6.*
|
@rm eagle.app.v6.*
|
||||||
@echo "Generate $(BIN_NAME).bin successully in folder bin/upgrade."
|
@echo "Generate $(BIN_NAME).bin successully in BIN_PATH"
|
||||||
@echo "boot.bin------------>0x00000"
|
@echo "boot.bin------------>0x00000"
|
||||||
@echo "$(BIN_NAME).bin--->$(addr)"
|
@echo "$(BIN_NAME).bin--->$(addr)"
|
||||||
endif
|
endif
|
||||||
@ -389,8 +395,6 @@ $(foreach image,$(GEN_IMAGES),$(eval $(call MakeImage,$(basename $(image)))))
|
|||||||
# Required for each makefile to inherit from the parent
|
# Required for each makefile to inherit from the parent
|
||||||
#
|
#
|
||||||
|
|
||||||
INCLUDES := $(INCLUDES) -I $(PDIR)include -I $(PDIR)extra_include
|
INCLUDES := $(INCLUDES) -I $(SDK_PATH)/include -I $(SDK_PATH)/extra_include
|
||||||
INCLUDES += -I $(PDIR)include/lwip -I $(PDIR)include/lwip/ipv4 -I $(PDIR)include/lwip/ipv6
|
INCLUDES += -I $(SDK_PATH)/include/lwip -I $(SDK_PATH)/include/lwip/ipv4 -I $(SDK_PATH)/include/lwip/ipv6
|
||||||
INCLUDES += -I $(PDIR)include/espressif
|
INCLUDES += -I $(SDK_PATH)/include/espressif
|
||||||
PDIR := ../$(PDIR)
|
|
||||||
sinclude $(PDIR)Makefile
|
|
||||||
|
46
README.md
46
README.md
@ -1,22 +1,48 @@
|
|||||||
esp_iot_rtos_sdk
|
# esp_iot_rtos_sdk #
|
||||||
================
|
|
||||||
|
----------
|
||||||
ESP8266 new SDK based on FreeRTOS
|
|
||||||
|
|
||||||
|
ESP8266 SDK based on FreeRTOS.
|
||||||
|
|
||||||
Note
|
## Note ##
|
||||||
|
|
||||||
APIs of "esp_iot_rtos_sdk" are same as "esp_iot_sdk"
|
APIs of "esp_iot_rtos_sdk" are same as "esp_iot_sdk"
|
||||||
|
|
||||||
More details in "Wiki" !
|
More details in "Wiki" !
|
||||||
|
|
||||||
|
## Requrements ##
|
||||||
Compile
|
|
||||||
|
|
||||||
using command: ./gen_misc.sh
|
You can use both xcc and gcc to compile your project, gcc is recommended.
|
||||||
|
For gcc, please refer to [esp-open-sdk](https://github.com/pfalcon/esp-open-sdk).
|
||||||
|
|
||||||
Download
|
|
||||||
|
## Compile ##
|
||||||
|
|
||||||
|
Clone esp_iot_rtos_sdk, e.g., to ~/esp_iot_rtos_sdk.
|
||||||
|
|
||||||
|
$git clone https://github.com/espressif/esp_iot_rtos_sdk.git
|
||||||
|
|
||||||
|
Set sdk path:
|
||||||
|
|
||||||
|
$export SDK_PATH=~/esp_iot_rtos_sdk
|
||||||
|
|
||||||
|
Set bin path:
|
||||||
|
|
||||||
|
$export BIN_PATH=~/esp8266_bin
|
||||||
|
|
||||||
|
Generated bins will be located here.
|
||||||
|
|
||||||
|
SDK_PATH and BIN_PATH **MUST** be set firstly, you can write to .bashrc or other shell init sript.
|
||||||
|
|
||||||
|
esp_iot_rtos_sdk/examples/project_template is a project template, you can copy this to anywhere, e.g., to ~/workspace/project_template.
|
||||||
|
|
||||||
|
Generate bin:
|
||||||
|
|
||||||
|
./gen_misc.sh
|
||||||
|
|
||||||
|
Just follow the tips and steps.
|
||||||
|
|
||||||
|
## Download ##
|
||||||
|
|
||||||
eagle.app.v6.flash.bin, downloads to flash 0x00000
|
eagle.app.v6.flash.bin, downloads to flash 0x00000
|
||||||
|
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
1¡¢compile options
|
|
||||||
|
|
||||||
(1) COMPILE
|
|
||||||
Possible value: gcc
|
|
||||||
Default value:
|
|
||||||
If not set, use xt-xcc by default.
|
|
||||||
|
|
||||||
(2) BOOT
|
|
||||||
Possible value: none/old/new
|
|
||||||
none: no need boot
|
|
||||||
old: use boot_v1.1
|
|
||||||
new: use boot_v1.2
|
|
||||||
Default value: none
|
|
||||||
|
|
||||||
(3) APP
|
|
||||||
Possible value: 0/1/2
|
|
||||||
0: original mode, generate eagle.app.v6.flash.bin and eagle.app.v6.irom0text.bin
|
|
||||||
1: generate user1
|
|
||||||
2: generate user2
|
|
||||||
Default value: 0
|
|
||||||
|
|
||||||
(3) SPI_SPEED
|
|
||||||
Possible value: 20/26.7/40/80
|
|
||||||
Default value: 40
|
|
||||||
|
|
||||||
(4) SPI_MODE
|
|
||||||
Possible value: QIO/QOUT/DIO/DOUT
|
|
||||||
Default value: QIO
|
|
||||||
|
|
||||||
(4) SPI_SIZE_MAP
|
|
||||||
Possible value: 0/2/3/4/5/6
|
|
||||||
Default value: 0
|
|
||||||
|
|
||||||
For example:
|
|
||||||
make COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=0
|
|
||||||
|
|
||||||
2¡¢You can also use gen_misc to make and generate specific bin you needed.
|
|
||||||
Linux: ./gen_misc.sh
|
|
||||||
Windows: gen_misc.bat
|
|
||||||
Follow the tips and steps.
|
|
@ -1,172 +0,0 @@
|
|||||||
/******************************************************************************
|
|
||||||
* Copyright 2013-2014 Espressif Systems (Wuxi)
|
|
||||||
*
|
|
||||||
* FileName: user_main.c
|
|
||||||
*
|
|
||||||
* Description: entry file of user application
|
|
||||||
*
|
|
||||||
* Modification history:
|
|
||||||
* 2014/12/1, v1.0 create this file.
|
|
||||||
*******************************************************************************/
|
|
||||||
#include "esp_common.h"
|
|
||||||
|
|
||||||
#include "freertos/FreeRTOS.h"
|
|
||||||
#include "freertos/task.h"
|
|
||||||
|
|
||||||
#include "lwip/sockets.h"
|
|
||||||
#include "lwip/dns.h"
|
|
||||||
#include "lwip/netdb.h"
|
|
||||||
|
|
||||||
#define server_ip "192.168.101.142"
|
|
||||||
#define server_port 9669
|
|
||||||
|
|
||||||
void task2(void *pvParameters)
|
|
||||||
{
|
|
||||||
printf("Hello, welcome to client!\r\n");
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
int recbytes;
|
|
||||||
int sin_size;
|
|
||||||
int str_len;
|
|
||||||
int sta_socket;
|
|
||||||
|
|
||||||
struct sockaddr_in local_ip;
|
|
||||||
struct sockaddr_in remote_ip;
|
|
||||||
|
|
||||||
sta_socket = socket(PF_INET, SOCK_STREAM, 0);
|
|
||||||
|
|
||||||
if (-1 == sta_socket) {
|
|
||||||
close(sta_socket);
|
|
||||||
printf("C > socket fail!\n");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("C > socket ok!\n");
|
|
||||||
bzero(&remote_ip, sizeof(struct sockaddr_in));
|
|
||||||
remote_ip.sin_family = AF_INET;
|
|
||||||
remote_ip.sin_addr.s_addr = inet_addr(server_ip);
|
|
||||||
remote_ip.sin_port = htons(server_port);
|
|
||||||
|
|
||||||
if (0 != connect(sta_socket, (struct sockaddr *)(&remote_ip), sizeof(struct sockaddr))) {
|
|
||||||
close(sta_socket);
|
|
||||||
printf("C > connect fail!\n");
|
|
||||||
vTaskDelay(4000 / portTICK_RATE_MS);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("C > connect ok!\n");
|
|
||||||
char *pbuf = (char *)zalloc(1024);
|
|
||||||
sprintf(pbuf, "%s\n", "client_send info");
|
|
||||||
|
|
||||||
if (write(sta_socket, pbuf, strlen(pbuf) + 1) < 0) {
|
|
||||||
printf("C > send fail\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("C > send success\n");
|
|
||||||
free(pbuf);
|
|
||||||
|
|
||||||
char *recv_buf = (char *)zalloc(128);
|
|
||||||
while ((recbytes = read(sta_socket , recv_buf, 128)) > 0) {
|
|
||||||
recv_buf[recbytes] = 0;
|
|
||||||
printf("C > read data success %d!\nC > %s\n", recbytes, recv_buf);
|
|
||||||
}
|
|
||||||
free(recv_buf);
|
|
||||||
|
|
||||||
if (recbytes <= 0) {
|
|
||||||
close(sta_socket);
|
|
||||||
printf("C > read data fail!\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void task3(void *pvParameters)
|
|
||||||
{
|
|
||||||
while (1) {
|
|
||||||
struct sockaddr_in server_addr, client_addr;
|
|
||||||
int server_sock, client_sock;
|
|
||||||
socklen_t sin_size;
|
|
||||||
bzero(&server_addr, sizeof(struct sockaddr_in));
|
|
||||||
server_addr.sin_family = AF_INET;
|
|
||||||
server_addr.sin_addr.s_addr = INADDR_ANY;
|
|
||||||
server_addr.sin_port = htons(80);
|
|
||||||
|
|
||||||
int recbytes;
|
|
||||||
|
|
||||||
do {
|
|
||||||
if (-1 == (server_sock = socket(AF_INET, SOCK_STREAM, 0))) {
|
|
||||||
printf("S > socket error\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("S > create socket: %d\n", server_sock);
|
|
||||||
|
|
||||||
if (-1 == bind(server_sock, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr))) {
|
|
||||||
printf("S > bind fail\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("S > bind port: %d\n", ntohs(server_addr.sin_port));
|
|
||||||
|
|
||||||
if (-1 == listen(server_sock, 5)) {
|
|
||||||
printf("S > listen fail\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("S > listen ok\n");
|
|
||||||
|
|
||||||
sin_size = sizeof(client_addr);
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
printf("S > wait client\n");
|
|
||||||
|
|
||||||
if ((client_sock = accept(server_sock, (struct sockaddr *) &client_addr, &sin_size)) < 0) {
|
|
||||||
printf("S > accept fail\n");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("S > Client from %s %d\n", inet_ntoa(client_addr.sin_addr), htons(client_addr.sin_port));
|
|
||||||
|
|
||||||
char *recv_buf = (char *)zalloc(128);
|
|
||||||
while ((recbytes = read(client_sock , recv_buf, 128)) > 0) {
|
|
||||||
recv_buf[recbytes] = 0;
|
|
||||||
printf("S > read data success %d!\nS > %s\n", recbytes, recv_buf);
|
|
||||||
}
|
|
||||||
free(recv_buf);
|
|
||||||
|
|
||||||
if (recbytes <= 0) {
|
|
||||||
printf("S > read data fail!\n");
|
|
||||||
close(client_sock);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while (0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* FunctionName : user_init
|
|
||||||
* Description : entry of user application, init user function here
|
|
||||||
* Parameters : none
|
|
||||||
* Returns : none
|
|
||||||
*******************************************************************************/
|
|
||||||
void user_init(void)
|
|
||||||
{
|
|
||||||
printf("SDK version:%s\n", system_get_sdk_version());
|
|
||||||
|
|
||||||
/* need to set opmode before you set config */
|
|
||||||
wifi_set_opmode(STATIONAP_MODE);
|
|
||||||
|
|
||||||
{
|
|
||||||
struct station_config *config = (struct station_config *)zalloc(sizeof(struct station_config));
|
|
||||||
sprintf(config->ssid, "ZTE_5560");
|
|
||||||
sprintf(config->password, "espressif");
|
|
||||||
|
|
||||||
/* need to sure that you are in station mode first,
|
|
||||||
* otherwise it will be failed. */
|
|
||||||
wifi_station_set_config(config);
|
|
||||||
free(config);
|
|
||||||
}
|
|
||||||
|
|
||||||
xTaskCreate(task2, "tsk2", 256, NULL, 2, NULL);
|
|
||||||
xTaskCreate(task3, "tsk3", 256, NULL, 2, NULL);
|
|
||||||
}
|
|
||||||
|
|
@ -22,12 +22,12 @@ GEN_IMAGES= eagle.app.v6.out
|
|||||||
GEN_BINS= eagle.app.v6.bin
|
GEN_BINS= eagle.app.v6.bin
|
||||||
SPECIAL_MKTARGETS=$(APP_MKTARGETS)
|
SPECIAL_MKTARGETS=$(APP_MKTARGETS)
|
||||||
SUBDIRS= \
|
SUBDIRS= \
|
||||||
user
|
user \
|
||||||
|
sample_lib
|
||||||
|
|
||||||
endif # } PDIR
|
endif # } PDIR
|
||||||
|
|
||||||
APPDIR = .
|
LDDIR = $(SDK_PATH)/ld
|
||||||
LDDIR = ../ld
|
|
||||||
|
|
||||||
CCFLAGS += -Os
|
CCFLAGS += -Os
|
||||||
|
|
||||||
@ -46,10 +46,11 @@ ifeq ($(FLAVOR),release)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
COMPONENTS_eagle.app.v6 = \
|
COMPONENTS_eagle.app.v6 = \
|
||||||
user/libuser.a
|
user/libuser.a \
|
||||||
|
sample_lib/libsample.a
|
||||||
|
|
||||||
LINKFLAGS_eagle.app.v6 = \
|
LINKFLAGS_eagle.app.v6 = \
|
||||||
-L../lib \
|
-L$(SDK_PATH)/lib \
|
||||||
-Wl,--gc-sections \
|
-Wl,--gc-sections \
|
||||||
-nostdlib \
|
-nostdlib \
|
||||||
-T$(LD_FILE) \
|
-T$(LD_FILE) \
|
||||||
@ -112,8 +113,7 @@ DDEFINES += \
|
|||||||
#
|
#
|
||||||
|
|
||||||
INCLUDES := $(INCLUDES) -I $(PDIR)include
|
INCLUDES := $(INCLUDES) -I $(PDIR)include
|
||||||
PDIR := ../$(PDIR)
|
sinclude $(SDK_PATH)/Makefile
|
||||||
sinclude $(PDIR)Makefile
|
|
||||||
|
|
||||||
.PHONY: FORCE
|
.PHONY: FORCE
|
||||||
FORCE:
|
FORCE:
|
@ -126,11 +126,11 @@ if %input% equ 2 (
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
touch user/user_main.c
|
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo start...
|
echo start...
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
make BOOT=%boot% APP=%app% SPI_SPEED=%spi_speed% SPI_MODE=%spi_mode% SPI_SIZE=%spi_size_map%
|
make clean
|
||||||
|
|
||||||
|
make COMPILE=xcc BOOT=%boot% APP=%app% SPI_SPEED=%spi_speed% SPI_MODE=%spi_mode% SPI_SIZE=%spi_size_map%
|
||||||
|
|
@ -1,6 +1,33 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
echo "gen_misc.sh version 20150819"
|
echo "gen_misc.sh version 20150826"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ $SDK_PATH ]; then
|
||||||
|
echo "SDK_PATH:"
|
||||||
|
echo "$SDK_PATH"
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
echo "ERROR: Please export SDK_PATH firstly, exit!!!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $BIN_PATH ]; then
|
||||||
|
echo "BIN_PATH:"
|
||||||
|
echo "$BIN_PATH"
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
echo "ERROR: Please export BIN_PATH firstly, exit!!!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Please check SDK_PATH & BIN_PATH, enter (Y/y) to continue:"
|
||||||
|
read input
|
||||||
|
|
||||||
|
if [[ $input != Y ]] && [[ $input != y ]]; then
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "Please follow below steps(1-5) to generate specific bin(s):"
|
echo "Please follow below steps(1-5) to generate specific bin(s):"
|
||||||
@ -130,10 +157,9 @@ fi
|
|||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
touch user/user_main.c
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "start..."
|
echo "start..."
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
make COMPILE=gcc BOOT=$boot APP=$app SPI_SPEED=$spi_speed SPI_MODE=$spi_mode SPI_SIZE_MAP=$spi_size_map
|
make clean
|
||||||
|
|
||||||
|
make BOOT=$boot APP=$app SPI_SPEED=$spi_speed SPI_MODE=$spi_mode SPI_SIZE_MAP=$spi_size_map
|
56
examples/project_template/readme.txt
Normal file
56
examples/project_template/readme.txt
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
This is a simple project template.
|
||||||
|
|
||||||
|
sample_lib is an example for multi-level folder Makefile, notice the folder structure and each Makefile, you can get the clue.
|
||||||
|
|
||||||
|
|
||||||
|
HOWTO:
|
||||||
|
1. Copy this folder to anywhere.
|
||||||
|
Example:
|
||||||
|
Copy to ~/workspace/project_template
|
||||||
|
You can rename this folder as you like.
|
||||||
|
|
||||||
|
2. Export SDK_PATH and BIN_PATH.
|
||||||
|
Example:
|
||||||
|
Your SDK path is ~/esp_iot_rtos_sdk, and want generate bin at ~/esp8266_bin.
|
||||||
|
Do follow steps:
|
||||||
|
1>. export SDK_PATH=~/esp_iot_rtos_sdk
|
||||||
|
2>. export BIN_PATH=~/esp8266_bin
|
||||||
|
SDK and project are seperate, you can update SDK without change your project.
|
||||||
|
|
||||||
|
3. Enter project_template folder, run ./gen_misc.sh, and follow the tips and steps.
|
||||||
|
|
||||||
|
|
||||||
|
Compile Options:
|
||||||
|
(1) COMPILE
|
||||||
|
Possible value: xcc
|
||||||
|
Default value:
|
||||||
|
If not set, use gcc by default.
|
||||||
|
|
||||||
|
(2) BOOT
|
||||||
|
Possible value: none/old/new
|
||||||
|
none: no need boot
|
||||||
|
old: use boot_v1.1
|
||||||
|
new: use boot_v1.2
|
||||||
|
Default value: new
|
||||||
|
|
||||||
|
(3) APP
|
||||||
|
Possible value: 0/1/2
|
||||||
|
0: original mode, generate eagle.app.v6.flash.bin and eagle.app.v6.irom0text.bin
|
||||||
|
1: generate user1
|
||||||
|
2: generate user2
|
||||||
|
Default value: 0
|
||||||
|
|
||||||
|
(3) SPI_SPEED
|
||||||
|
Possible value: 20/26.7/40/80
|
||||||
|
Default value: 40
|
||||||
|
|
||||||
|
(4) SPI_MODE
|
||||||
|
Possible value: QIO/QOUT/DIO/DOUT
|
||||||
|
Default value: QIO
|
||||||
|
|
||||||
|
(4) SPI_SIZE_MAP
|
||||||
|
Possible value: 0/2/3/4/5/6
|
||||||
|
Default value: 0
|
||||||
|
|
||||||
|
For example:
|
||||||
|
make COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=0
|
47
examples/project_template/sample_lib/Makefile
Normal file
47
examples/project_template/sample_lib/Makefile
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Required variables for each makefile
|
||||||
|
# Discard this section from all parent makefiles
|
||||||
|
# Expected variables (with automatic defaults):
|
||||||
|
# CSRCS (all "C" files in the dir)
|
||||||
|
# SUBDIRS (all subdirs with a Makefile)
|
||||||
|
# GEN_LIBS - list of libs to be generated ()
|
||||||
|
# GEN_IMAGES - list of images to be generated ()
|
||||||
|
# COMPONENTS_xxx - a list of libs/objs in the form
|
||||||
|
# subdir/lib to be extracted and rolled up into
|
||||||
|
# a generated lib/image xxx.a ()
|
||||||
|
#
|
||||||
|
ifndef PDIR
|
||||||
|
UP_EXTRACT_DIR = ..
|
||||||
|
GEN_LIBS = libsample.a
|
||||||
|
COMPONENTS_libsample = folder1/libfolder1.a \
|
||||||
|
folder2/libfolder2.a
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Configuration i.e. compile options etc.
|
||||||
|
# Target specific stuff (defines etc.) goes in here!
|
||||||
|
# Generally values applying to a tree are captured in the
|
||||||
|
# makefile at its root level - these are then overridden
|
||||||
|
# for a subtree within the makefile rooted therein
|
||||||
|
#
|
||||||
|
#DEFINES +=
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Recursion Magic - Don't touch this!!
|
||||||
|
#
|
||||||
|
# Each subtree potentially has an include directory
|
||||||
|
# corresponding to the common APIs applicable to modules
|
||||||
|
# rooted at that subtree. Accordingly, the INCLUDE PATH
|
||||||
|
# of a module can only contain the include directories up
|
||||||
|
# its parent path, and not its siblings
|
||||||
|
#
|
||||||
|
# Required for each makefile to inherit from the parent
|
||||||
|
#
|
||||||
|
|
||||||
|
INCLUDES := $(INCLUDES) -I $(PDIR)include
|
||||||
|
INCLUDES += -I ./
|
||||||
|
PDIR := ../$(PDIR)
|
||||||
|
sinclude $(PDIR)Makefile
|
||||||
|
|
44
examples/project_template/sample_lib/folder1/Makefile
Normal file
44
examples/project_template/sample_lib/folder1/Makefile
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Required variables for each makefile
|
||||||
|
# Discard this section from all parent makefiles
|
||||||
|
# Expected variables (with automatic defaults):
|
||||||
|
# CSRCS (all "C" files in the dir)
|
||||||
|
# SUBDIRS (all subdirs with a Makefile)
|
||||||
|
# GEN_LIBS - list of libs to be generated ()
|
||||||
|
# GEN_IMAGES - list of images to be generated ()
|
||||||
|
# COMPONENTS_xxx - a list of libs/objs in the form
|
||||||
|
# subdir/lib to be extracted and rolled up into
|
||||||
|
# a generated lib/image xxx.a ()
|
||||||
|
#
|
||||||
|
ifndef PDIR
|
||||||
|
GEN_LIBS = libfolder1.a
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Configuration i.e. compile options etc.
|
||||||
|
# Target specific stuff (defines etc.) goes in here!
|
||||||
|
# Generally values applying to a tree are captured in the
|
||||||
|
# makefile at its root level - these are then overridden
|
||||||
|
# for a subtree within the makefile rooted therein
|
||||||
|
#
|
||||||
|
#DEFINES +=
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Recursion Magic - Don't touch this!!
|
||||||
|
#
|
||||||
|
# Each subtree potentially has an include directory
|
||||||
|
# corresponding to the common APIs applicable to modules
|
||||||
|
# rooted at that subtree. Accordingly, the INCLUDE PATH
|
||||||
|
# of a module can only contain the include directories up
|
||||||
|
# its parent path, and not its siblings
|
||||||
|
#
|
||||||
|
# Required for each makefile to inherit from the parent
|
||||||
|
#
|
||||||
|
|
||||||
|
INCLUDES := $(INCLUDES) -I $(PDIR)include
|
||||||
|
INCLUDES += -I ./
|
||||||
|
PDIR := ../$(PDIR)
|
||||||
|
sinclude $(PDIR)Makefile
|
||||||
|
|
44
examples/project_template/sample_lib/folder2/Makefile
Normal file
44
examples/project_template/sample_lib/folder2/Makefile
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Required variables for each makefile
|
||||||
|
# Discard this section from all parent makefiles
|
||||||
|
# Expected variables (with automatic defaults):
|
||||||
|
# CSRCS (all "C" files in the dir)
|
||||||
|
# SUBDIRS (all subdirs with a Makefile)
|
||||||
|
# GEN_LIBS - list of libs to be generated ()
|
||||||
|
# GEN_IMAGES - list of images to be generated ()
|
||||||
|
# COMPONENTS_xxx - a list of libs/objs in the form
|
||||||
|
# subdir/lib to be extracted and rolled up into
|
||||||
|
# a generated lib/image xxx.a ()
|
||||||
|
#
|
||||||
|
ifndef PDIR
|
||||||
|
GEN_LIBS = libfolder2.a
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Configuration i.e. compile options etc.
|
||||||
|
# Target specific stuff (defines etc.) goes in here!
|
||||||
|
# Generally values applying to a tree are captured in the
|
||||||
|
# makefile at its root level - these are then overridden
|
||||||
|
# for a subtree within the makefile rooted therein
|
||||||
|
#
|
||||||
|
#DEFINES +=
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Recursion Magic - Don't touch this!!
|
||||||
|
#
|
||||||
|
# Each subtree potentially has an include directory
|
||||||
|
# corresponding to the common APIs applicable to modules
|
||||||
|
# rooted at that subtree. Accordingly, the INCLUDE PATH
|
||||||
|
# of a module can only contain the include directories up
|
||||||
|
# its parent path, and not its siblings
|
||||||
|
#
|
||||||
|
# Required for each makefile to inherit from the parent
|
||||||
|
#
|
||||||
|
|
||||||
|
INCLUDES := $(INCLUDES) -I $(PDIR)include
|
||||||
|
INCLUDES += -I ./
|
||||||
|
PDIR := ../$(PDIR)
|
||||||
|
sinclude $(PDIR)Makefile
|
||||||
|
|
@ -38,6 +38,7 @@ endif
|
|||||||
#
|
#
|
||||||
|
|
||||||
INCLUDES := $(INCLUDES) -I $(PDIR)include
|
INCLUDES := $(INCLUDES) -I $(PDIR)include
|
||||||
|
INCLUDES += -I ./
|
||||||
PDIR := ../$(PDIR)
|
PDIR := ../$(PDIR)
|
||||||
sinclude $(PDIR)Makefile
|
sinclude $(PDIR)Makefile
|
||||||
|
|
23
examples/project_template/user/user_main.c
Normal file
23
examples/project_template/user/user_main.c
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
* Copyright 2013-2014 Espressif Systems (Wuxi)
|
||||||
|
*
|
||||||
|
* FileName: user_main.c
|
||||||
|
*
|
||||||
|
* Description: entry file of user application
|
||||||
|
*
|
||||||
|
* Modification history:
|
||||||
|
* 2014/12/1, v1.0 create this file.
|
||||||
|
*******************************************************************************/
|
||||||
|
#include "esp_common.h"
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* FunctionName : user_init
|
||||||
|
* Description : entry of user application, init user function here
|
||||||
|
* Parameters : none
|
||||||
|
* Returns : none
|
||||||
|
*******************************************************************************/
|
||||||
|
void user_init(void)
|
||||||
|
{
|
||||||
|
printf("SDK version:%s\n", system_get_sdk_version());
|
||||||
|
}
|
||||||
|
|
@ -26,8 +26,7 @@ SUBDIRS= \
|
|||||||
|
|
||||||
endif # } PDIR
|
endif # } PDIR
|
||||||
|
|
||||||
APPDIR = .
|
LDDIR = $(SDK_PATH)/ld
|
||||||
LDDIR = ../ld
|
|
||||||
|
|
||||||
CCFLAGS += -Os
|
CCFLAGS += -Os
|
||||||
|
|
||||||
@ -49,7 +48,8 @@ COMPONENTS_eagle.app.v6 = \
|
|||||||
user/libuser.a
|
user/libuser.a
|
||||||
|
|
||||||
LINKFLAGS_eagle.app.v6 = \
|
LINKFLAGS_eagle.app.v6 = \
|
||||||
-L../lib \
|
-L$(SDK_PATH)/lib \
|
||||||
|
-Wl,--gc-sections \
|
||||||
-nostdlib \
|
-nostdlib \
|
||||||
-T$(LD_FILE) \
|
-T$(LD_FILE) \
|
||||||
-Wl,--no-check-sections \
|
-Wl,--no-check-sections \
|
||||||
@ -112,8 +112,7 @@ DDEFINES += \
|
|||||||
#
|
#
|
||||||
|
|
||||||
INCLUDES := $(INCLUDES) -I $(PDIR)include
|
INCLUDES := $(INCLUDES) -I $(PDIR)include
|
||||||
PDIR := ../$(PDIR)
|
sinclude $(SDK_PATH)/Makefile
|
||||||
sinclude $(PDIR)Makefile
|
|
||||||
|
|
||||||
.PHONY: FORCE
|
.PHONY: FORCE
|
||||||
FORCE:
|
FORCE:
|
||||||
|
@ -1,6 +1,33 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
echo "gen_misc.sh version 20150819"
|
echo "gen_misc.sh version 20150826"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ $SDK_PATH ]; then
|
||||||
|
echo "SDK_PATH:"
|
||||||
|
echo "$SDK_PATH"
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
echo "ERROR: Please export SDK_PATH firstly, exit!!!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $BIN_PATH ]; then
|
||||||
|
echo "BIN_PATH:"
|
||||||
|
echo "$BIN_PATH"
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
echo "ERROR: Please export BIN_PATH firstly, exit!!!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Please check SDK_PATH & BIN_PATH, enter (Y/y) to continue:"
|
||||||
|
read input
|
||||||
|
|
||||||
|
if [[ $input != Y ]] && [[ $input != y ]]; then
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "Please follow below steps(1-5) to generate specific bin(s):"
|
echo "Please follow below steps(1-5) to generate specific bin(s):"
|
||||||
@ -130,10 +157,9 @@ fi
|
|||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
touch user/user_main.c
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "start..."
|
echo "start..."
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
make COMPILE=gcc BOOT=$boot APP=$app SPI_SPEED=$spi_speed SPI_MODE=$spi_mode SPI_SIZE_MAP=$spi_size_map
|
make clean
|
||||||
|
|
||||||
|
make BOOT=$boot APP=$app SPI_SPEED=$spi_speed SPI_MODE=$spi_mode SPI_SIZE_MAP=$spi_size_map
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
1¡¢compile options
|
1¡¢compile options
|
||||||
|
|
||||||
(1) COMPILE
|
(1) COMPILE
|
||||||
Possible value: gcc
|
Possible value: xcc
|
||||||
Default value:
|
Default value:
|
||||||
If not set, use xt-xcc by default.
|
If not set, use gcc by default.
|
||||||
|
|
||||||
(2) BOOT
|
(2) BOOT
|
||||||
Possible value: none/old/new
|
Possible value: none/old/new
|
||||||
none: no need boot
|
none: no need boot
|
||||||
old: use boot_v1.1
|
old: use boot_v1.1
|
||||||
new: use boot_v1.2
|
new: use boot_v1.2
|
||||||
Default value: none
|
Default value: new
|
||||||
|
|
||||||
(3) APP
|
(3) APP
|
||||||
Possible value: 0/1/2
|
Possible value: 0/1/2
|
||||||
|
@ -38,6 +38,7 @@ endif
|
|||||||
#
|
#
|
||||||
|
|
||||||
INCLUDES := $(INCLUDES) -I $(PDIR)include
|
INCLUDES := $(INCLUDES) -I $(PDIR)include
|
||||||
|
INCLUDES += -I ./
|
||||||
PDIR := ../$(PDIR)
|
PDIR := ../$(PDIR)
|
||||||
sinclude $(PDIR)Makefile
|
sinclude $(PDIR)Makefile
|
||||||
|
|
||||||
|
48
include/espressif/upgrade.h
Normal file
48
include/espressif/upgrade.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#ifndef __UPGRADE_H__
|
||||||
|
#define __UPGRADE_H__
|
||||||
|
|
||||||
|
#include "lwip/sockets.h"
|
||||||
|
|
||||||
|
#define SPI_FLASH_SEC_SIZE 4096
|
||||||
|
|
||||||
|
#define USER_BIN1 0x00
|
||||||
|
#define USER_BIN2 0x01
|
||||||
|
|
||||||
|
#define UPGRADE_FLAG_IDLE 0x00
|
||||||
|
#define UPGRADE_FLAG_START 0x01
|
||||||
|
#define UPGRADE_FLAG_FINISH 0x02
|
||||||
|
|
||||||
|
#define UPGRADE_FW_BIN1 0x00
|
||||||
|
#define UPGRADE_FW_BIN2 0x01
|
||||||
|
|
||||||
|
typedef void (*upgrade_states_check_callback)(void * arg);
|
||||||
|
|
||||||
|
//#define UPGRADE_SSL_ENABLE
|
||||||
|
|
||||||
|
struct upgrade_server_info {
|
||||||
|
struct sockaddr_in sockaddrin;
|
||||||
|
upgrade_states_check_callback check_cb;
|
||||||
|
uint32 check_times;
|
||||||
|
uint8 pre_version[16];
|
||||||
|
uint8 upgrade_version[16];
|
||||||
|
uint8 *url;
|
||||||
|
void *pclient_param;
|
||||||
|
uint8 upgrade_flag;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define UPGRADE_FLAG_IDLE 0x00
|
||||||
|
#define UPGRADE_FLAG_START 0x01
|
||||||
|
#define UPGRADE_FLAG_FINISH 0x02
|
||||||
|
|
||||||
|
bool system_upgrade_start(struct upgrade_server_info *server);
|
||||||
|
bool system_upgrade_start_ssl(struct upgrade_server_info *server);
|
||||||
|
void system_upgrade_init();
|
||||||
|
void system_upgrade_deinit();
|
||||||
|
bool system_upgrade(uint8 *data, uint32 len);
|
||||||
|
|
||||||
|
#ifdef UPGRADE_SSL_ENABLE
|
||||||
|
bool system_upgrade_start_ssl(struct upgrade_server_info *server);
|
||||||
|
#else
|
||||||
|
bool system_upgrade_start(struct upgrade_server_info *server);
|
||||||
|
#endif
|
||||||
|
#endif
|
@ -110,9 +110,10 @@ extern void PendSV(char req);
|
|||||||
//#define portYIELD() vPortYield()
|
//#define portYIELD() vPortYield()
|
||||||
#define portYIELD() PendSV(1)
|
#define portYIELD() PendSV(1)
|
||||||
|
|
||||||
|
#if 0
|
||||||
//#define portEND_SWITCHING_ISR( xSwitchRequired ) \
|
#define portEND_SWITCHING_ISR( xSwitchRequired ) \
|
||||||
// if(xSwitchRequired) PendSV(1)
|
if(xSwitchRequired) PendSV(1)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define HDL_MAC_SIG_IN_LV1_ISR() PendSV(2)
|
#define HDL_MAC_SIG_IN_LV1_ISR() PendSV(2)
|
||||||
|
|
||||||
|
@ -176,7 +176,8 @@ struct netconn {
|
|||||||
/** the last error this netconn had */
|
/** the last error this netconn had */
|
||||||
err_t last_err;
|
err_t last_err;
|
||||||
/** sem that is used to synchroneously execute functions in the core context */
|
/** sem that is used to synchroneously execute functions in the core context */
|
||||||
sys_sem_t op_completed;
|
sys_sem_t op_completed; //
|
||||||
|
sys_sem_t snd_op_completed; //only for snd semphore
|
||||||
/** mbox where received packets are stored until they are fetched
|
/** mbox where received packets are stored until they are fetched
|
||||||
by the netconn application thread (can grow quite big) */
|
by the netconn application thread (can grow quite big) */
|
||||||
sys_mbox_t recvmbox;
|
sys_mbox_t recvmbox;
|
||||||
|
@ -58,7 +58,8 @@ typedef enum {
|
|||||||
PBUF_TRANSPORT,
|
PBUF_TRANSPORT,
|
||||||
PBUF_IP,
|
PBUF_IP,
|
||||||
PBUF_LINK,
|
PBUF_LINK,
|
||||||
PBUF_RAW
|
PBUF_RAW,
|
||||||
|
PBUF_MAC
|
||||||
} pbuf_layer;
|
} pbuf_layer;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -83,6 +83,8 @@ extern sys_mutex_t lock_tcpip_core;
|
|||||||
#define TCPIP_APIMSG_NOERR(m,f) do { (m)->function = f; tcpip_apimsg(m); } while(0)
|
#define TCPIP_APIMSG_NOERR(m,f) do { (m)->function = f; tcpip_apimsg(m); } while(0)
|
||||||
#define TCPIP_APIMSG(m,f,e) do { (m)->function = f; (e) = tcpip_apimsg(m); } while(0)
|
#define TCPIP_APIMSG(m,f,e) do { (m)->function = f; (e) = tcpip_apimsg(m); } while(0)
|
||||||
#define TCPIP_APIMSG_ACK(m) sys_sem_signal(&m->conn->op_completed)
|
#define TCPIP_APIMSG_ACK(m) sys_sem_signal(&m->conn->op_completed)
|
||||||
|
#define TCPIP_APIMSG_ACK_SND(m) sys_sem_signal(&m->conn->snd_op_completed)
|
||||||
|
|
||||||
#define TCPIP_NETIFAPI(m) tcpip_netifapi(m)
|
#define TCPIP_NETIFAPI(m) tcpip_netifapi(m)
|
||||||
#define TCPIP_NETIFAPI_ACK(m) sys_sem_signal(&m->sem)
|
#define TCPIP_NETIFAPI_ACK(m) sys_sem_signal(&m->sem)
|
||||||
#endif /* LWIP_TCPIP_CORE_LOCKING */
|
#endif /* LWIP_TCPIP_CORE_LOCKING */
|
||||||
|
212
ld/eagle.app.v6.common.ld
Normal file
212
ld/eagle.app.v6.common.ld
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
/* This linker script generated from xt-genldscripts.tpp for LSP . */
|
||||||
|
/* Linker Script for ld -N */
|
||||||
|
|
||||||
|
PHDRS
|
||||||
|
{
|
||||||
|
dport0_0_phdr PT_LOAD;
|
||||||
|
dram0_0_phdr PT_LOAD;
|
||||||
|
dram0_0_bss_phdr PT_LOAD;
|
||||||
|
iram1_0_phdr PT_LOAD;
|
||||||
|
irom0_0_phdr PT_LOAD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Default entry point: */
|
||||||
|
ENTRY(call_user_start)
|
||||||
|
EXTERN(_DebugExceptionVector)
|
||||||
|
EXTERN(_DoubleExceptionVector)
|
||||||
|
EXTERN(_KernelExceptionVector)
|
||||||
|
EXTERN(_NMIExceptionVector)
|
||||||
|
EXTERN(_UserExceptionVector)
|
||||||
|
PROVIDE(_memmap_vecbase_reset = 0x40000000);
|
||||||
|
/* Various memory-map dependent cache attribute settings: */
|
||||||
|
_memmap_cacheattr_wb_base = 0x00000110;
|
||||||
|
_memmap_cacheattr_wt_base = 0x00000110;
|
||||||
|
_memmap_cacheattr_bp_base = 0x00000220;
|
||||||
|
_memmap_cacheattr_unused_mask = 0xFFFFF00F;
|
||||||
|
_memmap_cacheattr_wb_trapnull = 0x2222211F;
|
||||||
|
_memmap_cacheattr_wba_trapnull = 0x2222211F;
|
||||||
|
_memmap_cacheattr_wbna_trapnull = 0x2222211F;
|
||||||
|
_memmap_cacheattr_wt_trapnull = 0x2222211F;
|
||||||
|
_memmap_cacheattr_bp_trapnull = 0x2222222F;
|
||||||
|
_memmap_cacheattr_wb_strict = 0xFFFFF11F;
|
||||||
|
_memmap_cacheattr_wt_strict = 0xFFFFF11F;
|
||||||
|
_memmap_cacheattr_bp_strict = 0xFFFFF22F;
|
||||||
|
_memmap_cacheattr_wb_allvalid = 0x22222112;
|
||||||
|
_memmap_cacheattr_wt_allvalid = 0x22222112;
|
||||||
|
_memmap_cacheattr_bp_allvalid = 0x22222222;
|
||||||
|
PROVIDE(_memmap_cacheattr_reset = _memmap_cacheattr_wb_trapnull);
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
.dport0.rodata : ALIGN(4)
|
||||||
|
{
|
||||||
|
_dport0_rodata_start = ABSOLUTE(.);
|
||||||
|
*(.dport0.rodata)
|
||||||
|
*(.dport.rodata)
|
||||||
|
_dport0_rodata_end = ABSOLUTE(.);
|
||||||
|
} >dport0_0_seg :dport0_0_phdr
|
||||||
|
|
||||||
|
.dport0.literal : ALIGN(4)
|
||||||
|
{
|
||||||
|
_dport0_literal_start = ABSOLUTE(.);
|
||||||
|
*(.dport0.literal)
|
||||||
|
*(.dport.literal)
|
||||||
|
_dport0_literal_end = ABSOLUTE(.);
|
||||||
|
} >dport0_0_seg :dport0_0_phdr
|
||||||
|
|
||||||
|
.dport0.data : ALIGN(4)
|
||||||
|
{
|
||||||
|
_dport0_data_start = ABSOLUTE(.);
|
||||||
|
*(.dport0.data)
|
||||||
|
*(.dport.data)
|
||||||
|
_dport0_data_end = ABSOLUTE(.);
|
||||||
|
} >dport0_0_seg :dport0_0_phdr
|
||||||
|
|
||||||
|
.data : ALIGN(4)
|
||||||
|
{
|
||||||
|
_data_start = ABSOLUTE(.);
|
||||||
|
*(.data)
|
||||||
|
*(.data.*)
|
||||||
|
*(.gnu.linkonce.d.*)
|
||||||
|
*(.data1)
|
||||||
|
*(.sdata)
|
||||||
|
*(.sdata.*)
|
||||||
|
*(.gnu.linkonce.s.*)
|
||||||
|
*(.sdata2)
|
||||||
|
*(.sdata2.*)
|
||||||
|
*(.gnu.linkonce.s2.*)
|
||||||
|
*(.jcr)
|
||||||
|
_data_end = ABSOLUTE(.);
|
||||||
|
} >dram0_0_seg :dram0_0_phdr
|
||||||
|
|
||||||
|
.rodata : ALIGN(4)
|
||||||
|
{
|
||||||
|
_rodata_start = ABSOLUTE(.);
|
||||||
|
*(.rodata)
|
||||||
|
*(.rodata.*)
|
||||||
|
*(.gnu.linkonce.r.*)
|
||||||
|
*(.rodata1)
|
||||||
|
__XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
|
||||||
|
*(.xt_except_table)
|
||||||
|
*(.gcc_except_table)
|
||||||
|
*(.gnu.linkonce.e.*)
|
||||||
|
*(.gnu.version_r)
|
||||||
|
*(.eh_frame)
|
||||||
|
. = (. + 3) & ~ 3;
|
||||||
|
/* C++ constructor and destructor tables, properly ordered: */
|
||||||
|
__init_array_start = ABSOLUTE(.);
|
||||||
|
KEEP (*crtbegin.o(.ctors))
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||||
|
KEEP (*(SORT(.ctors.*)))
|
||||||
|
KEEP (*(.ctors))
|
||||||
|
__init_array_end = ABSOLUTE(.);
|
||||||
|
KEEP (*crtbegin.o(.dtors))
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||||
|
KEEP (*(SORT(.dtors.*)))
|
||||||
|
KEEP (*(.dtors))
|
||||||
|
/* C++ exception handlers table: */
|
||||||
|
__XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
|
||||||
|
*(.xt_except_desc)
|
||||||
|
*(.gnu.linkonce.h.*)
|
||||||
|
__XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
|
||||||
|
*(.xt_except_desc_end)
|
||||||
|
*(.dynamic)
|
||||||
|
*(.gnu.version_d)
|
||||||
|
. = ALIGN(4); /* this table MUST be 4-byte aligned */
|
||||||
|
_bss_table_start = ABSOLUTE(.);
|
||||||
|
LONG(_bss_start)
|
||||||
|
LONG(_bss_end)
|
||||||
|
_bss_table_end = ABSOLUTE(.);
|
||||||
|
_rodata_end = ABSOLUTE(.);
|
||||||
|
} >dram0_0_seg :dram0_0_phdr
|
||||||
|
|
||||||
|
.UserExceptionVector.literal : AT(LOADADDR(.rodata) + (ADDR(.UserExceptionVector.literal) - ADDR(.rodata))) ALIGN(4)
|
||||||
|
{
|
||||||
|
_UserExceptionVector_literal_start = ABSOLUTE(.);
|
||||||
|
*(.UserExceptionVector.literal)
|
||||||
|
_UserExceptionVector_literal_end = ABSOLUTE(.);
|
||||||
|
} >dram0_0_seg :dram0_0_phdr
|
||||||
|
|
||||||
|
.bss ALIGN(8) (NOLOAD) : ALIGN(4)
|
||||||
|
{
|
||||||
|
. = ALIGN (8);
|
||||||
|
_bss_start = ABSOLUTE(.);
|
||||||
|
*(.dynsbss)
|
||||||
|
*(.sbss)
|
||||||
|
*(.sbss.*)
|
||||||
|
*(.gnu.linkonce.sb.*)
|
||||||
|
*(.scommon)
|
||||||
|
*(.sbss2)
|
||||||
|
*(.sbss2.*)
|
||||||
|
*(.gnu.linkonce.sb2.*)
|
||||||
|
*(.dynbss)
|
||||||
|
*(.bss)
|
||||||
|
*(.bss.*)
|
||||||
|
*(.gnu.linkonce.b.*)
|
||||||
|
*(COMMON)
|
||||||
|
. = ALIGN (8);
|
||||||
|
_bss_end = ABSOLUTE(.);
|
||||||
|
_heap_start = ABSOLUTE(.);
|
||||||
|
/* _stack_sentry = ALIGN(0x8); */
|
||||||
|
} >dram0_0_seg :dram0_0_bss_phdr
|
||||||
|
/* __stack = 0x3ffc8000; */
|
||||||
|
|
||||||
|
.text : ALIGN(4)
|
||||||
|
{
|
||||||
|
_stext = .;
|
||||||
|
_text_start = ABSOLUTE(.);
|
||||||
|
*(.UserEnter.text)
|
||||||
|
. = ALIGN(16);
|
||||||
|
*(.DebugExceptionVector.text)
|
||||||
|
. = ALIGN(16);
|
||||||
|
*(.NMIExceptionVector.text)
|
||||||
|
. = ALIGN(16);
|
||||||
|
*(.KernelExceptionVector.text)
|
||||||
|
LONG(0)
|
||||||
|
LONG(0)
|
||||||
|
LONG(0)
|
||||||
|
LONG(0)
|
||||||
|
. = ALIGN(16);
|
||||||
|
*(.UserExceptionVector.text)
|
||||||
|
LONG(0)
|
||||||
|
LONG(0)
|
||||||
|
LONG(0)
|
||||||
|
LONG(0)
|
||||||
|
. = ALIGN(16);
|
||||||
|
*(.DoubleExceptionVector.text)
|
||||||
|
LONG(0)
|
||||||
|
LONG(0)
|
||||||
|
LONG(0)
|
||||||
|
LONG(0)
|
||||||
|
. = ALIGN (16);
|
||||||
|
*(.entry.text)
|
||||||
|
*(.init.literal)
|
||||||
|
*(.init)
|
||||||
|
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
|
||||||
|
*(.fini.literal)
|
||||||
|
*(.fini)
|
||||||
|
*(.gnu.version)
|
||||||
|
_text_end = ABSOLUTE(.);
|
||||||
|
_etext = .;
|
||||||
|
} >iram1_0_seg :iram1_0_phdr
|
||||||
|
|
||||||
|
.lit4 : ALIGN(4)
|
||||||
|
{
|
||||||
|
_lit4_start = ABSOLUTE(.);
|
||||||
|
*(*.lit4)
|
||||||
|
*(.lit4.*)
|
||||||
|
*(.gnu.linkonce.lit4.*)
|
||||||
|
_lit4_end = ABSOLUTE(.);
|
||||||
|
} >iram1_0_seg :iram1_0_phdr
|
||||||
|
|
||||||
|
.irom0.text : ALIGN(4)
|
||||||
|
{
|
||||||
|
_irom0_text_start = ABSOLUTE(.);
|
||||||
|
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
|
||||||
|
*(.literal.* .text.*)
|
||||||
|
_irom0_text_end = ABSOLUTE(.);
|
||||||
|
} >irom0_0_seg :irom0_0_phdr
|
||||||
|
}
|
||||||
|
|
||||||
|
/* get ROM code address */
|
||||||
|
INCLUDE "../ld/eagle.rom.addr.v6.ld"
|
@ -1,5 +1,26 @@
|
|||||||
/* This linker script generated from xt-genldscripts.tpp for LSP . */
|
/* eagle.flash.bin @ 0x00000 */
|
||||||
/* Linker Script for ld -N */
|
/* eagle.irom0text.bin @ 0x40000 */
|
||||||
|
|
||||||
|
/* Flash Map, support 512KB/1MB/2MB/4MB SPI Flash */
|
||||||
|
/* |......|..............................|..........................|.....|....| */
|
||||||
|
/* ^ ^ ^ ^ ^ */
|
||||||
|
/* |_flash.bin start(0x0000) |_irom0text.bin start(0x40000) | */
|
||||||
|
/* |_flash.bin end |_irom0text.bin end */
|
||||||
|
/* |_system param area(0x7b000) */
|
||||||
|
|
||||||
|
/* NOTICE: */
|
||||||
|
/* 1. You can change irom0 org, but MUST make sure irom0text.bin start not overlap flash.bin end. */
|
||||||
|
/* 2. You can change irom0 len, but MUST make sure irom0text.bin end not overlap system param area. */
|
||||||
|
/* 3. Space between flash.bin end and irom0text.bin start can be used as user param area. */
|
||||||
|
/* 4. Space between irom0text.bin end and system param area can be used as user param area. */
|
||||||
|
/* 5. Make sure irom0text.bin end < 0x100000 */
|
||||||
|
/* 6. system param area: */
|
||||||
|
/* 1>. 512KB--->0x07b000 */
|
||||||
|
/* 2>. 1MB----->0x0fb000 */
|
||||||
|
/* 3>. 2MB----->0x1fb000 */
|
||||||
|
/* 4>. 4MB----->0x3fb000 */
|
||||||
|
/* 7. Don't change any other seg. */
|
||||||
|
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
||||||
@ -8,214 +29,4 @@ MEMORY
|
|||||||
irom0_0_seg : org = 0x40240000, len = 0x3C000
|
irom0_0_seg : org = 0x40240000, len = 0x3C000
|
||||||
}
|
}
|
||||||
|
|
||||||
PHDRS
|
INCLUDE "../ld/eagle.app.v6.common.ld"
|
||||||
{
|
|
||||||
dport0_0_phdr PT_LOAD;
|
|
||||||
dram0_0_phdr PT_LOAD;
|
|
||||||
dram0_0_bss_phdr PT_LOAD;
|
|
||||||
iram1_0_phdr PT_LOAD;
|
|
||||||
irom0_0_phdr PT_LOAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Default entry point: */
|
|
||||||
ENTRY(call_user_start)
|
|
||||||
EXTERN(_DebugExceptionVector)
|
|
||||||
EXTERN(_DoubleExceptionVector)
|
|
||||||
EXTERN(_KernelExceptionVector)
|
|
||||||
EXTERN(_NMIExceptionVector)
|
|
||||||
EXTERN(_UserExceptionVector)
|
|
||||||
PROVIDE(_memmap_vecbase_reset = 0x40000000);
|
|
||||||
/* Various memory-map dependent cache attribute settings: */
|
|
||||||
_memmap_cacheattr_wb_base = 0x00000110;
|
|
||||||
_memmap_cacheattr_wt_base = 0x00000110;
|
|
||||||
_memmap_cacheattr_bp_base = 0x00000220;
|
|
||||||
_memmap_cacheattr_unused_mask = 0xFFFFF00F;
|
|
||||||
_memmap_cacheattr_wb_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wba_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wbna_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wt_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_bp_trapnull = 0x2222222F;
|
|
||||||
_memmap_cacheattr_wb_strict = 0xFFFFF11F;
|
|
||||||
_memmap_cacheattr_wt_strict = 0xFFFFF11F;
|
|
||||||
_memmap_cacheattr_bp_strict = 0xFFFFF22F;
|
|
||||||
_memmap_cacheattr_wb_allvalid = 0x22222112;
|
|
||||||
_memmap_cacheattr_wt_allvalid = 0x22222112;
|
|
||||||
_memmap_cacheattr_bp_allvalid = 0x22222222;
|
|
||||||
PROVIDE(_memmap_cacheattr_reset = _memmap_cacheattr_wb_trapnull);
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
|
|
||||||
.dport0.rodata : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_rodata_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.rodata)
|
|
||||||
*(.dport.rodata)
|
|
||||||
_dport0_rodata_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.dport0.literal : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_literal_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.literal)
|
|
||||||
*(.dport.literal)
|
|
||||||
_dport0_literal_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.dport0.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_data_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.data)
|
|
||||||
*(.dport.data)
|
|
||||||
_dport0_data_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
_data_start = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d.*)
|
|
||||||
*(.data1)
|
|
||||||
*(.sdata)
|
|
||||||
*(.sdata.*)
|
|
||||||
*(.gnu.linkonce.s.*)
|
|
||||||
*(.sdata2)
|
|
||||||
*(.sdata2.*)
|
|
||||||
*(.gnu.linkonce.s2.*)
|
|
||||||
*(.jcr)
|
|
||||||
_data_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.rodata : ALIGN(4)
|
|
||||||
{
|
|
||||||
_rodata_start = ABSOLUTE(.);
|
|
||||||
*(.rodata)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r.*)
|
|
||||||
*(.rodata1)
|
|
||||||
__XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_table)
|
|
||||||
*(.gcc_except_table)
|
|
||||||
*(.gnu.linkonce.e.*)
|
|
||||||
*(.gnu.version_r)
|
|
||||||
*(.eh_frame)
|
|
||||||
. = (. + 3) & ~ 3;
|
|
||||||
/* C++ constructor and destructor tables, properly ordered: */
|
|
||||||
__init_array_start = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
__init_array_end = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
/* C++ exception handlers table: */
|
|
||||||
__XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc)
|
|
||||||
*(.gnu.linkonce.h.*)
|
|
||||||
__XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc_end)
|
|
||||||
*(.dynamic)
|
|
||||||
*(.gnu.version_d)
|
|
||||||
. = ALIGN(4); /* this table MUST be 4-byte aligned */
|
|
||||||
_bss_table_start = ABSOLUTE(.);
|
|
||||||
LONG(_bss_start)
|
|
||||||
LONG(_bss_end)
|
|
||||||
_bss_table_end = ABSOLUTE(.);
|
|
||||||
_rodata_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.UserExceptionVector.literal : AT(LOADADDR(.rodata) + (ADDR(.UserExceptionVector.literal) - ADDR(.rodata))) ALIGN(4)
|
|
||||||
{
|
|
||||||
_UserExceptionVector_literal_start = ABSOLUTE(.);
|
|
||||||
*(.UserExceptionVector.literal)
|
|
||||||
_UserExceptionVector_literal_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.bss ALIGN(8) (NOLOAD) : ALIGN(4)
|
|
||||||
{
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_start = ABSOLUTE(.);
|
|
||||||
*(.dynsbss)
|
|
||||||
*(.sbss)
|
|
||||||
*(.sbss.*)
|
|
||||||
*(.gnu.linkonce.sb.*)
|
|
||||||
*(.scommon)
|
|
||||||
*(.sbss2)
|
|
||||||
*(.sbss2.*)
|
|
||||||
*(.gnu.linkonce.sb2.*)
|
|
||||||
*(.dynbss)
|
|
||||||
*(.bss)
|
|
||||||
*(.bss.*)
|
|
||||||
*(.gnu.linkonce.b.*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_end = ABSOLUTE(.);
|
|
||||||
_heap_start = ABSOLUTE(.);
|
|
||||||
/* _stack_sentry = ALIGN(0x8); */
|
|
||||||
} >dram0_0_seg :dram0_0_bss_phdr
|
|
||||||
/* __stack = 0x3ffc8000; */
|
|
||||||
|
|
||||||
.text : ALIGN(4)
|
|
||||||
{
|
|
||||||
_stext = .;
|
|
||||||
_text_start = ABSOLUTE(.);
|
|
||||||
*(.UserEnter.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.DebugExceptionVector.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.NMIExceptionVector.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.KernelExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.UserExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.DoubleExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN (16);
|
|
||||||
*(.entry.text)
|
|
||||||
*(.init.literal)
|
|
||||||
*(.init)
|
|
||||||
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
|
|
||||||
*(.fini.literal)
|
|
||||||
*(.fini)
|
|
||||||
*(.gnu.version)
|
|
||||||
_text_end = ABSOLUTE(.);
|
|
||||||
_etext = .;
|
|
||||||
} >iram1_0_seg :iram1_0_phdr
|
|
||||||
|
|
||||||
.lit4 : ALIGN(4)
|
|
||||||
{
|
|
||||||
_lit4_start = ABSOLUTE(.);
|
|
||||||
*(*.lit4)
|
|
||||||
*(.lit4.*)
|
|
||||||
*(.gnu.linkonce.lit4.*)
|
|
||||||
_lit4_end = ABSOLUTE(.);
|
|
||||||
} >iram1_0_seg :iram1_0_phdr
|
|
||||||
|
|
||||||
.irom0.text : ALIGN(4)
|
|
||||||
{
|
|
||||||
_irom0_text_start = ABSOLUTE(.);
|
|
||||||
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
|
|
||||||
*(.literal.* .text.*)
|
|
||||||
_irom0_text_end = ABSOLUTE(.);
|
|
||||||
} >irom0_0_seg :irom0_0_phdr
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get ROM code address */
|
|
||||||
INCLUDE "../ld/eagle.rom.addr.v6.ld"
|
|
@ -1,5 +1,17 @@
|
|||||||
/* This linker script generated from xt-genldscripts.tpp for LSP . */
|
/* user1.bin @ 0x1000 */
|
||||||
/* Linker Script for ld -N */
|
|
||||||
|
/* Flash Map (512KB + 512KB), support 1MB/2MB/4MB SPI Flash */
|
||||||
|
/* |..|........................|.....|.....|..|........................|.....|....| */
|
||||||
|
/* ^ ^ ^ ^ ^ ^ ^ ^ */
|
||||||
|
/* |_boot start(0x0000) | | |_pad start(0x80000) | | */
|
||||||
|
/* |_user1 start(0x1000) |_user1 end |_user2 start(0x81000) |_user2 end */
|
||||||
|
/* |_system param symmetric area(0x7b000) |_system param area(0xfb000) */
|
||||||
|
|
||||||
|
/* NOTICE: */
|
||||||
|
/* 1. You can change irom0 len, but MUST make sure user1 end not overlap system param symmetric area. */
|
||||||
|
/* 2. Space between user1 end and pad start can be used as user param area. */
|
||||||
|
/* 3. Don't change any other seg. */
|
||||||
|
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
||||||
@ -8,214 +20,4 @@ MEMORY
|
|||||||
irom0_0_seg : org = 0x40201010, len = 0x6B000
|
irom0_0_seg : org = 0x40201010, len = 0x6B000
|
||||||
}
|
}
|
||||||
|
|
||||||
PHDRS
|
INCLUDE "../ld/eagle.app.v6.common.ld"
|
||||||
{
|
|
||||||
dport0_0_phdr PT_LOAD;
|
|
||||||
dram0_0_phdr PT_LOAD;
|
|
||||||
dram0_0_bss_phdr PT_LOAD;
|
|
||||||
iram1_0_phdr PT_LOAD;
|
|
||||||
irom0_0_phdr PT_LOAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Default entry point: */
|
|
||||||
ENTRY(call_user_start)
|
|
||||||
EXTERN(_DebugExceptionVector)
|
|
||||||
EXTERN(_DoubleExceptionVector)
|
|
||||||
EXTERN(_KernelExceptionVector)
|
|
||||||
EXTERN(_NMIExceptionVector)
|
|
||||||
EXTERN(_UserExceptionVector)
|
|
||||||
PROVIDE(_memmap_vecbase_reset = 0x40000000);
|
|
||||||
/* Various memory-map dependent cache attribute settings: */
|
|
||||||
_memmap_cacheattr_wb_base = 0x00000110;
|
|
||||||
_memmap_cacheattr_wt_base = 0x00000110;
|
|
||||||
_memmap_cacheattr_bp_base = 0x00000220;
|
|
||||||
_memmap_cacheattr_unused_mask = 0xFFFFF00F;
|
|
||||||
_memmap_cacheattr_wb_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wba_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wbna_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wt_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_bp_trapnull = 0x2222222F;
|
|
||||||
_memmap_cacheattr_wb_strict = 0xFFFFF11F;
|
|
||||||
_memmap_cacheattr_wt_strict = 0xFFFFF11F;
|
|
||||||
_memmap_cacheattr_bp_strict = 0xFFFFF22F;
|
|
||||||
_memmap_cacheattr_wb_allvalid = 0x22222112;
|
|
||||||
_memmap_cacheattr_wt_allvalid = 0x22222112;
|
|
||||||
_memmap_cacheattr_bp_allvalid = 0x22222222;
|
|
||||||
PROVIDE(_memmap_cacheattr_reset = _memmap_cacheattr_wb_trapnull);
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
|
|
||||||
.dport0.rodata : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_rodata_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.rodata)
|
|
||||||
*(.dport.rodata)
|
|
||||||
_dport0_rodata_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.dport0.literal : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_literal_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.literal)
|
|
||||||
*(.dport.literal)
|
|
||||||
_dport0_literal_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.dport0.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_data_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.data)
|
|
||||||
*(.dport.data)
|
|
||||||
_dport0_data_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
_data_start = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d.*)
|
|
||||||
*(.data1)
|
|
||||||
*(.sdata)
|
|
||||||
*(.sdata.*)
|
|
||||||
*(.gnu.linkonce.s.*)
|
|
||||||
*(.sdata2)
|
|
||||||
*(.sdata2.*)
|
|
||||||
*(.gnu.linkonce.s2.*)
|
|
||||||
*(.jcr)
|
|
||||||
_data_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.rodata : ALIGN(4)
|
|
||||||
{
|
|
||||||
_rodata_start = ABSOLUTE(.);
|
|
||||||
*(.rodata)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r.*)
|
|
||||||
*(.rodata1)
|
|
||||||
__XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_table)
|
|
||||||
*(.gcc_except_table)
|
|
||||||
*(.gnu.linkonce.e.*)
|
|
||||||
*(.gnu.version_r)
|
|
||||||
*(.eh_frame)
|
|
||||||
. = (. + 3) & ~ 3;
|
|
||||||
/* C++ constructor and destructor tables, properly ordered: */
|
|
||||||
__init_array_start = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
__init_array_end = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
/* C++ exception handlers table: */
|
|
||||||
__XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc)
|
|
||||||
*(.gnu.linkonce.h.*)
|
|
||||||
__XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc_end)
|
|
||||||
*(.dynamic)
|
|
||||||
*(.gnu.version_d)
|
|
||||||
. = ALIGN(4); /* this table MUST be 4-byte aligned */
|
|
||||||
_bss_table_start = ABSOLUTE(.);
|
|
||||||
LONG(_bss_start)
|
|
||||||
LONG(_bss_end)
|
|
||||||
_bss_table_end = ABSOLUTE(.);
|
|
||||||
_rodata_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.UserExceptionVector.literal : AT(LOADADDR(.rodata) + (ADDR(.UserExceptionVector.literal) - ADDR(.rodata))) ALIGN(4)
|
|
||||||
{
|
|
||||||
_UserExceptionVector_literal_start = ABSOLUTE(.);
|
|
||||||
*(.UserExceptionVector.literal)
|
|
||||||
_UserExceptionVector_literal_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.bss ALIGN(8) (NOLOAD) : ALIGN(4)
|
|
||||||
{
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_start = ABSOLUTE(.);
|
|
||||||
*(.dynsbss)
|
|
||||||
*(.sbss)
|
|
||||||
*(.sbss.*)
|
|
||||||
*(.gnu.linkonce.sb.*)
|
|
||||||
*(.scommon)
|
|
||||||
*(.sbss2)
|
|
||||||
*(.sbss2.*)
|
|
||||||
*(.gnu.linkonce.sb2.*)
|
|
||||||
*(.dynbss)
|
|
||||||
*(.bss)
|
|
||||||
*(.bss.*)
|
|
||||||
*(.gnu.linkonce.b.*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_end = ABSOLUTE(.);
|
|
||||||
_heap_start = ABSOLUTE(.);
|
|
||||||
/* _stack_sentry = ALIGN(0x8); */
|
|
||||||
} >dram0_0_seg :dram0_0_bss_phdr
|
|
||||||
/* __stack = 0x3ffc8000; */
|
|
||||||
|
|
||||||
.text : ALIGN(4)
|
|
||||||
{
|
|
||||||
_stext = .;
|
|
||||||
_text_start = ABSOLUTE(.);
|
|
||||||
*(.UserEnter.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.DebugExceptionVector.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.NMIExceptionVector.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.KernelExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.UserExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.DoubleExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN (16);
|
|
||||||
*(.entry.text)
|
|
||||||
*(.init.literal)
|
|
||||||
*(.init)
|
|
||||||
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
|
|
||||||
*(.fini.literal)
|
|
||||||
*(.fini)
|
|
||||||
*(.gnu.version)
|
|
||||||
_text_end = ABSOLUTE(.);
|
|
||||||
_etext = .;
|
|
||||||
} >iram1_0_seg :iram1_0_phdr
|
|
||||||
|
|
||||||
.lit4 : ALIGN(4)
|
|
||||||
{
|
|
||||||
_lit4_start = ABSOLUTE(.);
|
|
||||||
*(*.lit4)
|
|
||||||
*(.lit4.*)
|
|
||||||
*(.gnu.linkonce.lit4.*)
|
|
||||||
_lit4_end = ABSOLUTE(.);
|
|
||||||
} >iram1_0_seg :iram1_0_phdr
|
|
||||||
|
|
||||||
.irom0.text : ALIGN(4)
|
|
||||||
{
|
|
||||||
_irom0_text_start = ABSOLUTE(.);
|
|
||||||
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
|
|
||||||
*(.literal.* .text.*)
|
|
||||||
_irom0_text_end = ABSOLUTE(.);
|
|
||||||
} >irom0_0_seg :irom0_0_phdr
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get ROM code address */
|
|
||||||
INCLUDE "../ld/eagle.rom.addr.v6.ld"
|
|
||||||
|
@ -1,5 +1,17 @@
|
|||||||
/* This linker script generated from xt-genldscripts.tpp for LSP . */
|
/* user2.bin @ 0x81000 */
|
||||||
/* Linker Script for ld -N */
|
|
||||||
|
/* Flash Map (512KB + 512KB), support 1MB/2MB/4MB SPI Flash */
|
||||||
|
/* |..|........................|.....|.....|..|........................|.....|....| */
|
||||||
|
/* ^ ^ ^ ^ ^ ^ ^ ^ */
|
||||||
|
/* |_boot start(0x0000) | | |_pad start(0x80000) | | */
|
||||||
|
/* |_user1 start(0x1000) |_user1 end |_user2 start(0x81000) |_user2 end */
|
||||||
|
/* |_system param symmetric area(0x7b000) |_system param area(0xfb000) */
|
||||||
|
|
||||||
|
/* NOTICE: */
|
||||||
|
/* 1. You can change irom0 len, but MUST make sure user2 end not overlap system param area. */
|
||||||
|
/* 2. Space between user2 end and system param area can be used as user param area. */
|
||||||
|
/* 3. Don't change any other seg. */
|
||||||
|
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
||||||
@ -8,214 +20,4 @@ MEMORY
|
|||||||
irom0_0_seg : org = 0x40281010, len = 0x6B000
|
irom0_0_seg : org = 0x40281010, len = 0x6B000
|
||||||
}
|
}
|
||||||
|
|
||||||
PHDRS
|
INCLUDE "../ld/eagle.app.v6.common.ld"
|
||||||
{
|
|
||||||
dport0_0_phdr PT_LOAD;
|
|
||||||
dram0_0_phdr PT_LOAD;
|
|
||||||
dram0_0_bss_phdr PT_LOAD;
|
|
||||||
iram1_0_phdr PT_LOAD;
|
|
||||||
irom0_0_phdr PT_LOAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Default entry point: */
|
|
||||||
ENTRY(call_user_start)
|
|
||||||
EXTERN(_DebugExceptionVector)
|
|
||||||
EXTERN(_DoubleExceptionVector)
|
|
||||||
EXTERN(_KernelExceptionVector)
|
|
||||||
EXTERN(_NMIExceptionVector)
|
|
||||||
EXTERN(_UserExceptionVector)
|
|
||||||
PROVIDE(_memmap_vecbase_reset = 0x40000000);
|
|
||||||
/* Various memory-map dependent cache attribute settings: */
|
|
||||||
_memmap_cacheattr_wb_base = 0x00000110;
|
|
||||||
_memmap_cacheattr_wt_base = 0x00000110;
|
|
||||||
_memmap_cacheattr_bp_base = 0x00000220;
|
|
||||||
_memmap_cacheattr_unused_mask = 0xFFFFF00F;
|
|
||||||
_memmap_cacheattr_wb_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wba_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wbna_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wt_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_bp_trapnull = 0x2222222F;
|
|
||||||
_memmap_cacheattr_wb_strict = 0xFFFFF11F;
|
|
||||||
_memmap_cacheattr_wt_strict = 0xFFFFF11F;
|
|
||||||
_memmap_cacheattr_bp_strict = 0xFFFFF22F;
|
|
||||||
_memmap_cacheattr_wb_allvalid = 0x22222112;
|
|
||||||
_memmap_cacheattr_wt_allvalid = 0x22222112;
|
|
||||||
_memmap_cacheattr_bp_allvalid = 0x22222222;
|
|
||||||
PROVIDE(_memmap_cacheattr_reset = _memmap_cacheattr_wb_trapnull);
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
|
|
||||||
.dport0.rodata : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_rodata_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.rodata)
|
|
||||||
*(.dport.rodata)
|
|
||||||
_dport0_rodata_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.dport0.literal : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_literal_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.literal)
|
|
||||||
*(.dport.literal)
|
|
||||||
_dport0_literal_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.dport0.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_data_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.data)
|
|
||||||
*(.dport.data)
|
|
||||||
_dport0_data_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
_data_start = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d.*)
|
|
||||||
*(.data1)
|
|
||||||
*(.sdata)
|
|
||||||
*(.sdata.*)
|
|
||||||
*(.gnu.linkonce.s.*)
|
|
||||||
*(.sdata2)
|
|
||||||
*(.sdata2.*)
|
|
||||||
*(.gnu.linkonce.s2.*)
|
|
||||||
*(.jcr)
|
|
||||||
_data_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.rodata : ALIGN(4)
|
|
||||||
{
|
|
||||||
_rodata_start = ABSOLUTE(.);
|
|
||||||
*(.rodata)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r.*)
|
|
||||||
*(.rodata1)
|
|
||||||
__XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_table)
|
|
||||||
*(.gcc_except_table)
|
|
||||||
*(.gnu.linkonce.e.*)
|
|
||||||
*(.gnu.version_r)
|
|
||||||
*(.eh_frame)
|
|
||||||
. = (. + 3) & ~ 3;
|
|
||||||
/* C++ constructor and destructor tables, properly ordered: */
|
|
||||||
__init_array_start = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
__init_array_end = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
/* C++ exception handlers table: */
|
|
||||||
__XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc)
|
|
||||||
*(.gnu.linkonce.h.*)
|
|
||||||
__XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc_end)
|
|
||||||
*(.dynamic)
|
|
||||||
*(.gnu.version_d)
|
|
||||||
. = ALIGN(4); /* this table MUST be 4-byte aligned */
|
|
||||||
_bss_table_start = ABSOLUTE(.);
|
|
||||||
LONG(_bss_start)
|
|
||||||
LONG(_bss_end)
|
|
||||||
_bss_table_end = ABSOLUTE(.);
|
|
||||||
_rodata_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.UserExceptionVector.literal : AT(LOADADDR(.rodata) + (ADDR(.UserExceptionVector.literal) - ADDR(.rodata))) ALIGN(4)
|
|
||||||
{
|
|
||||||
_UserExceptionVector_literal_start = ABSOLUTE(.);
|
|
||||||
*(.UserExceptionVector.literal)
|
|
||||||
_UserExceptionVector_literal_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.bss ALIGN(8) (NOLOAD) : ALIGN(4)
|
|
||||||
{
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_start = ABSOLUTE(.);
|
|
||||||
*(.dynsbss)
|
|
||||||
*(.sbss)
|
|
||||||
*(.sbss.*)
|
|
||||||
*(.gnu.linkonce.sb.*)
|
|
||||||
*(.scommon)
|
|
||||||
*(.sbss2)
|
|
||||||
*(.sbss2.*)
|
|
||||||
*(.gnu.linkonce.sb2.*)
|
|
||||||
*(.dynbss)
|
|
||||||
*(.bss)
|
|
||||||
*(.bss.*)
|
|
||||||
*(.gnu.linkonce.b.*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_end = ABSOLUTE(.);
|
|
||||||
_heap_start = ABSOLUTE(.);
|
|
||||||
/* _stack_sentry = ALIGN(0x8); */
|
|
||||||
} >dram0_0_seg :dram0_0_bss_phdr
|
|
||||||
/* __stack = 0x3ffc8000; */
|
|
||||||
|
|
||||||
.text : ALIGN(4)
|
|
||||||
{
|
|
||||||
_stext = .;
|
|
||||||
_text_start = ABSOLUTE(.);
|
|
||||||
*(.UserEnter.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.DebugExceptionVector.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.NMIExceptionVector.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.KernelExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.UserExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.DoubleExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN (16);
|
|
||||||
*(.entry.text)
|
|
||||||
*(.init.literal)
|
|
||||||
*(.init)
|
|
||||||
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
|
|
||||||
*(.fini.literal)
|
|
||||||
*(.fini)
|
|
||||||
*(.gnu.version)
|
|
||||||
_text_end = ABSOLUTE(.);
|
|
||||||
_etext = .;
|
|
||||||
} >iram1_0_seg :iram1_0_phdr
|
|
||||||
|
|
||||||
.lit4 : ALIGN(4)
|
|
||||||
{
|
|
||||||
_lit4_start = ABSOLUTE(.);
|
|
||||||
*(*.lit4)
|
|
||||||
*(.lit4.*)
|
|
||||||
*(.gnu.linkonce.lit4.*)
|
|
||||||
_lit4_end = ABSOLUTE(.);
|
|
||||||
} >iram1_0_seg :iram1_0_phdr
|
|
||||||
|
|
||||||
.irom0.text : ALIGN(4)
|
|
||||||
{
|
|
||||||
_irom0_text_start = ABSOLUTE(.);
|
|
||||||
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
|
|
||||||
*(.literal.* .text.*)
|
|
||||||
_irom0_text_end = ABSOLUTE(.);
|
|
||||||
} >irom0_0_seg :irom0_0_phdr
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get ROM code address */
|
|
||||||
INCLUDE "../ld/eagle.rom.addr.v6.ld"
|
|
||||||
|
@ -1,5 +1,19 @@
|
|||||||
/* This linker script generated from xt-genldscripts.tpp for LSP . */
|
/* user1.bin @ 0x1000, user2.bin @ 0x10000 */
|
||||||
/* Linker Script for ld -N */
|
|
||||||
|
/* Flash Map (1024KB + 1024KB), support 2MB/4MB SPI Flash */
|
||||||
|
/* |..|........................|.....|.....|..|........................|.....|....| */
|
||||||
|
/* ^ ^ ^ ^ ^ ^ ^ ^ */
|
||||||
|
/* |_boot start(0x0000) | | |_pad start(0x100000) | | */
|
||||||
|
/* |_user1 start(0x1000) |_user1 end |_user2 start(0x101000) |_user2 end */
|
||||||
|
/* |_system param symmetric area(0xfb000) |_system param area(0x1fb000) */
|
||||||
|
|
||||||
|
/* NOTICE: */
|
||||||
|
/* 1. You can change irom0 len, but MUST make sure user1 end not overlap system param symmetric area. */
|
||||||
|
/* 2. Space between user1 end and pad start can be used as user param area. */
|
||||||
|
/* 3. Space between user2 end and system param area can be used as user param area. */
|
||||||
|
/* 4. Don't change any other seg. */
|
||||||
|
/* 5. user1.bin and user2.bin are same in this mode, so upgrade only need one of them. */
|
||||||
|
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
||||||
@ -8,214 +22,4 @@ MEMORY
|
|||||||
irom0_0_seg : org = 0x40201010, len = 0xE0000
|
irom0_0_seg : org = 0x40201010, len = 0xE0000
|
||||||
}
|
}
|
||||||
|
|
||||||
PHDRS
|
INCLUDE "../ld/eagle.app.v6.common.ld"
|
||||||
{
|
|
||||||
dport0_0_phdr PT_LOAD;
|
|
||||||
dram0_0_phdr PT_LOAD;
|
|
||||||
dram0_0_bss_phdr PT_LOAD;
|
|
||||||
iram1_0_phdr PT_LOAD;
|
|
||||||
irom0_0_phdr PT_LOAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Default entry point: */
|
|
||||||
ENTRY(call_user_start)
|
|
||||||
EXTERN(_DebugExceptionVector)
|
|
||||||
EXTERN(_DoubleExceptionVector)
|
|
||||||
EXTERN(_KernelExceptionVector)
|
|
||||||
EXTERN(_NMIExceptionVector)
|
|
||||||
EXTERN(_UserExceptionVector)
|
|
||||||
PROVIDE(_memmap_vecbase_reset = 0x40000000);
|
|
||||||
/* Various memory-map dependent cache attribute settings: */
|
|
||||||
_memmap_cacheattr_wb_base = 0x00000110;
|
|
||||||
_memmap_cacheattr_wt_base = 0x00000110;
|
|
||||||
_memmap_cacheattr_bp_base = 0x00000220;
|
|
||||||
_memmap_cacheattr_unused_mask = 0xFFFFF00F;
|
|
||||||
_memmap_cacheattr_wb_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wba_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wbna_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wt_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_bp_trapnull = 0x2222222F;
|
|
||||||
_memmap_cacheattr_wb_strict = 0xFFFFF11F;
|
|
||||||
_memmap_cacheattr_wt_strict = 0xFFFFF11F;
|
|
||||||
_memmap_cacheattr_bp_strict = 0xFFFFF22F;
|
|
||||||
_memmap_cacheattr_wb_allvalid = 0x22222112;
|
|
||||||
_memmap_cacheattr_wt_allvalid = 0x22222112;
|
|
||||||
_memmap_cacheattr_bp_allvalid = 0x22222222;
|
|
||||||
PROVIDE(_memmap_cacheattr_reset = _memmap_cacheattr_wb_trapnull);
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
|
|
||||||
.dport0.rodata : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_rodata_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.rodata)
|
|
||||||
*(.dport.rodata)
|
|
||||||
_dport0_rodata_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.dport0.literal : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_literal_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.literal)
|
|
||||||
*(.dport.literal)
|
|
||||||
_dport0_literal_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.dport0.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_data_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.data)
|
|
||||||
*(.dport.data)
|
|
||||||
_dport0_data_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
_data_start = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d.*)
|
|
||||||
*(.data1)
|
|
||||||
*(.sdata)
|
|
||||||
*(.sdata.*)
|
|
||||||
*(.gnu.linkonce.s.*)
|
|
||||||
*(.sdata2)
|
|
||||||
*(.sdata2.*)
|
|
||||||
*(.gnu.linkonce.s2.*)
|
|
||||||
*(.jcr)
|
|
||||||
_data_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.rodata : ALIGN(4)
|
|
||||||
{
|
|
||||||
_rodata_start = ABSOLUTE(.);
|
|
||||||
*(.rodata)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r.*)
|
|
||||||
*(.rodata1)
|
|
||||||
__XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_table)
|
|
||||||
*(.gcc_except_table)
|
|
||||||
*(.gnu.linkonce.e.*)
|
|
||||||
*(.gnu.version_r)
|
|
||||||
*(.eh_frame)
|
|
||||||
. = (. + 3) & ~ 3;
|
|
||||||
/* C++ constructor and destructor tables, properly ordered: */
|
|
||||||
__init_array_start = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
__init_array_end = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
/* C++ exception handlers table: */
|
|
||||||
__XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc)
|
|
||||||
*(.gnu.linkonce.h.*)
|
|
||||||
__XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc_end)
|
|
||||||
*(.dynamic)
|
|
||||||
*(.gnu.version_d)
|
|
||||||
. = ALIGN(4); /* this table MUST be 4-byte aligned */
|
|
||||||
_bss_table_start = ABSOLUTE(.);
|
|
||||||
LONG(_bss_start)
|
|
||||||
LONG(_bss_end)
|
|
||||||
_bss_table_end = ABSOLUTE(.);
|
|
||||||
_rodata_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.UserExceptionVector.literal : AT(LOADADDR(.rodata) + (ADDR(.UserExceptionVector.literal) - ADDR(.rodata))) ALIGN(4)
|
|
||||||
{
|
|
||||||
_UserExceptionVector_literal_start = ABSOLUTE(.);
|
|
||||||
*(.UserExceptionVector.literal)
|
|
||||||
_UserExceptionVector_literal_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.bss ALIGN(8) (NOLOAD) : ALIGN(4)
|
|
||||||
{
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_start = ABSOLUTE(.);
|
|
||||||
*(.dynsbss)
|
|
||||||
*(.sbss)
|
|
||||||
*(.sbss.*)
|
|
||||||
*(.gnu.linkonce.sb.*)
|
|
||||||
*(.scommon)
|
|
||||||
*(.sbss2)
|
|
||||||
*(.sbss2.*)
|
|
||||||
*(.gnu.linkonce.sb2.*)
|
|
||||||
*(.dynbss)
|
|
||||||
*(.bss)
|
|
||||||
*(.bss.*)
|
|
||||||
*(.gnu.linkonce.b.*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_end = ABSOLUTE(.);
|
|
||||||
_heap_start = ABSOLUTE(.);
|
|
||||||
/* _stack_sentry = ALIGN(0x8); */
|
|
||||||
} >dram0_0_seg :dram0_0_bss_phdr
|
|
||||||
/* __stack = 0x3ffc8000; */
|
|
||||||
|
|
||||||
.text : ALIGN(4)
|
|
||||||
{
|
|
||||||
_stext = .;
|
|
||||||
_text_start = ABSOLUTE(.);
|
|
||||||
*(.UserEnter.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.DebugExceptionVector.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.NMIExceptionVector.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.KernelExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.UserExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.DoubleExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN (16);
|
|
||||||
*(.entry.text)
|
|
||||||
*(.init.literal)
|
|
||||||
*(.init)
|
|
||||||
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
|
|
||||||
*(.fini.literal)
|
|
||||||
*(.fini)
|
|
||||||
*(.gnu.version)
|
|
||||||
_text_end = ABSOLUTE(.);
|
|
||||||
_etext = .;
|
|
||||||
} >iram1_0_seg :iram1_0_phdr
|
|
||||||
|
|
||||||
.lit4 : ALIGN(4)
|
|
||||||
{
|
|
||||||
_lit4_start = ABSOLUTE(.);
|
|
||||||
*(*.lit4)
|
|
||||||
*(.lit4.*)
|
|
||||||
*(.gnu.linkonce.lit4.*)
|
|
||||||
_lit4_end = ABSOLUTE(.);
|
|
||||||
} >iram1_0_seg :iram1_0_phdr
|
|
||||||
|
|
||||||
.irom0.text : ALIGN(4)
|
|
||||||
{
|
|
||||||
_irom0_text_start = ABSOLUTE(.);
|
|
||||||
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
|
|
||||||
*(.literal.* .text.*)
|
|
||||||
_irom0_text_end = ABSOLUTE(.);
|
|
||||||
} >irom0_0_seg :irom0_0_phdr
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get ROM code address */
|
|
||||||
INCLUDE "../ld/eagle.rom.addr.v6.ld"
|
|
||||||
|
@ -1,5 +1,17 @@
|
|||||||
/* This linker script generated from xt-genldscripts.tpp for LSP . */
|
/* user1.bin @ 0x1000 */
|
||||||
/* Linker Script for ld -N */
|
|
||||||
|
/* Flash Map (256KB + 256KB), support 512KB SPI Flash */
|
||||||
|
/* |..|........................|.....|.....|..|........................|.....|....| */
|
||||||
|
/* ^ ^ ^ ^ ^ ^ ^ ^ */
|
||||||
|
/* |_boot start(0x0000) | | |_pad start(0x40000) | | */
|
||||||
|
/* |_user1 start(0x1000) |_user1 end |_user2 start(0x41000) |_user2 end */
|
||||||
|
/* |_system param symmetric area(0x3b000) |_system param area(0x7b000) */
|
||||||
|
|
||||||
|
/* NOTICE: */
|
||||||
|
/* 1. You can change irom0 len, but MUST make sure user1 end not overlap system param symmetric area. */
|
||||||
|
/* 2. Space between user1 end and pad start can be used as user param area. */
|
||||||
|
/* 3. Don't change any other seg. */
|
||||||
|
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
||||||
@ -8,214 +20,4 @@ MEMORY
|
|||||||
irom0_0_seg : org = 0x40201010, len = 0x2B000
|
irom0_0_seg : org = 0x40201010, len = 0x2B000
|
||||||
}
|
}
|
||||||
|
|
||||||
PHDRS
|
INCLUDE "../ld/eagle.app.v6.common.ld"
|
||||||
{
|
|
||||||
dport0_0_phdr PT_LOAD;
|
|
||||||
dram0_0_phdr PT_LOAD;
|
|
||||||
dram0_0_bss_phdr PT_LOAD;
|
|
||||||
iram1_0_phdr PT_LOAD;
|
|
||||||
irom0_0_phdr PT_LOAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Default entry point: */
|
|
||||||
ENTRY(call_user_start)
|
|
||||||
EXTERN(_DebugExceptionVector)
|
|
||||||
EXTERN(_DoubleExceptionVector)
|
|
||||||
EXTERN(_KernelExceptionVector)
|
|
||||||
EXTERN(_NMIExceptionVector)
|
|
||||||
EXTERN(_UserExceptionVector)
|
|
||||||
PROVIDE(_memmap_vecbase_reset = 0x40000000);
|
|
||||||
/* Various memory-map dependent cache attribute settings: */
|
|
||||||
_memmap_cacheattr_wb_base = 0x00000110;
|
|
||||||
_memmap_cacheattr_wt_base = 0x00000110;
|
|
||||||
_memmap_cacheattr_bp_base = 0x00000220;
|
|
||||||
_memmap_cacheattr_unused_mask = 0xFFFFF00F;
|
|
||||||
_memmap_cacheattr_wb_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wba_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wbna_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wt_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_bp_trapnull = 0x2222222F;
|
|
||||||
_memmap_cacheattr_wb_strict = 0xFFFFF11F;
|
|
||||||
_memmap_cacheattr_wt_strict = 0xFFFFF11F;
|
|
||||||
_memmap_cacheattr_bp_strict = 0xFFFFF22F;
|
|
||||||
_memmap_cacheattr_wb_allvalid = 0x22222112;
|
|
||||||
_memmap_cacheattr_wt_allvalid = 0x22222112;
|
|
||||||
_memmap_cacheattr_bp_allvalid = 0x22222222;
|
|
||||||
PROVIDE(_memmap_cacheattr_reset = _memmap_cacheattr_wb_trapnull);
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
|
|
||||||
.dport0.rodata : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_rodata_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.rodata)
|
|
||||||
*(.dport.rodata)
|
|
||||||
_dport0_rodata_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.dport0.literal : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_literal_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.literal)
|
|
||||||
*(.dport.literal)
|
|
||||||
_dport0_literal_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.dport0.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_data_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.data)
|
|
||||||
*(.dport.data)
|
|
||||||
_dport0_data_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
_data_start = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d.*)
|
|
||||||
*(.data1)
|
|
||||||
*(.sdata)
|
|
||||||
*(.sdata.*)
|
|
||||||
*(.gnu.linkonce.s.*)
|
|
||||||
*(.sdata2)
|
|
||||||
*(.sdata2.*)
|
|
||||||
*(.gnu.linkonce.s2.*)
|
|
||||||
*(.jcr)
|
|
||||||
_data_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.rodata : ALIGN(4)
|
|
||||||
{
|
|
||||||
_rodata_start = ABSOLUTE(.);
|
|
||||||
*(.rodata)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r.*)
|
|
||||||
*(.rodata1)
|
|
||||||
__XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_table)
|
|
||||||
*(.gcc_except_table)
|
|
||||||
*(.gnu.linkonce.e.*)
|
|
||||||
*(.gnu.version_r)
|
|
||||||
*(.eh_frame)
|
|
||||||
. = (. + 3) & ~ 3;
|
|
||||||
/* C++ constructor and destructor tables, properly ordered: */
|
|
||||||
__init_array_start = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
__init_array_end = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
/* C++ exception handlers table: */
|
|
||||||
__XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc)
|
|
||||||
*(.gnu.linkonce.h.*)
|
|
||||||
__XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc_end)
|
|
||||||
*(.dynamic)
|
|
||||||
*(.gnu.version_d)
|
|
||||||
. = ALIGN(4); /* this table MUST be 4-byte aligned */
|
|
||||||
_bss_table_start = ABSOLUTE(.);
|
|
||||||
LONG(_bss_start)
|
|
||||||
LONG(_bss_end)
|
|
||||||
_bss_table_end = ABSOLUTE(.);
|
|
||||||
_rodata_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.UserExceptionVector.literal : AT(LOADADDR(.rodata) + (ADDR(.UserExceptionVector.literal) - ADDR(.rodata))) ALIGN(4)
|
|
||||||
{
|
|
||||||
_UserExceptionVector_literal_start = ABSOLUTE(.);
|
|
||||||
*(.UserExceptionVector.literal)
|
|
||||||
_UserExceptionVector_literal_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.bss ALIGN(8) (NOLOAD) : ALIGN(4)
|
|
||||||
{
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_start = ABSOLUTE(.);
|
|
||||||
*(.dynsbss)
|
|
||||||
*(.sbss)
|
|
||||||
*(.sbss.*)
|
|
||||||
*(.gnu.linkonce.sb.*)
|
|
||||||
*(.scommon)
|
|
||||||
*(.sbss2)
|
|
||||||
*(.sbss2.*)
|
|
||||||
*(.gnu.linkonce.sb2.*)
|
|
||||||
*(.dynbss)
|
|
||||||
*(.bss)
|
|
||||||
*(.bss.*)
|
|
||||||
*(.gnu.linkonce.b.*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_end = ABSOLUTE(.);
|
|
||||||
_heap_start = ABSOLUTE(.);
|
|
||||||
/* _stack_sentry = ALIGN(0x8); */
|
|
||||||
} >dram0_0_seg :dram0_0_bss_phdr
|
|
||||||
/* __stack = 0x3ffc8000; */
|
|
||||||
|
|
||||||
.text : ALIGN(4)
|
|
||||||
{
|
|
||||||
_stext = .;
|
|
||||||
_text_start = ABSOLUTE(.);
|
|
||||||
*(.UserEnter.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.DebugExceptionVector.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.NMIExceptionVector.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.KernelExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.UserExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.DoubleExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN (16);
|
|
||||||
*(.entry.text)
|
|
||||||
*(.init.literal)
|
|
||||||
*(.init)
|
|
||||||
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
|
|
||||||
*(.fini.literal)
|
|
||||||
*(.fini)
|
|
||||||
*(.gnu.version)
|
|
||||||
_text_end = ABSOLUTE(.);
|
|
||||||
_etext = .;
|
|
||||||
} >iram1_0_seg :iram1_0_phdr
|
|
||||||
|
|
||||||
.lit4 : ALIGN(4)
|
|
||||||
{
|
|
||||||
_lit4_start = ABSOLUTE(.);
|
|
||||||
*(*.lit4)
|
|
||||||
*(.lit4.*)
|
|
||||||
*(.gnu.linkonce.lit4.*)
|
|
||||||
_lit4_end = ABSOLUTE(.);
|
|
||||||
} >iram1_0_seg :iram1_0_phdr
|
|
||||||
|
|
||||||
.irom0.text : ALIGN(4)
|
|
||||||
{
|
|
||||||
_irom0_text_start = ABSOLUTE(.);
|
|
||||||
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
|
|
||||||
*(.literal.* .text.*)
|
|
||||||
_irom0_text_end = ABSOLUTE(.);
|
|
||||||
} >irom0_0_seg :irom0_0_phdr
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get ROM code address */
|
|
||||||
INCLUDE "../ld/eagle.rom.addr.v6.ld"
|
|
||||||
|
@ -1,5 +1,17 @@
|
|||||||
/* This linker script generated from xt-genldscripts.tpp for LSP . */
|
/* user2.bin @ 0x41000 */
|
||||||
/* Linker Script for ld -N */
|
|
||||||
|
/* Flash Map (256KB + 256KB), support 512KB SPI Flash */
|
||||||
|
/* |..|........................|.....|.....|..|........................|.....|....| */
|
||||||
|
/* ^ ^ ^ ^ ^ ^ ^ ^ */
|
||||||
|
/* |_boot start(0x0000) | | |_pad start(0x40000) | | */
|
||||||
|
/* |_user1 start(0x1000) |_user1 end |_user2 start(0x41000) |_user2 end */
|
||||||
|
/* |_system param symmetric area(0x3b000) |_system param area(0x7b000) */
|
||||||
|
|
||||||
|
/* NOTICE: */
|
||||||
|
/* 1. You can change irom0 len, but MUST make sure user2 end not overlap system param area. */
|
||||||
|
/* 2. Space between user2 end and system param area can be used as user param area. */
|
||||||
|
/* 3. Don't change any other seg. */
|
||||||
|
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
||||||
@ -8,214 +20,4 @@ MEMORY
|
|||||||
irom0_0_seg : org = 0x40241010, len = 0x2B000
|
irom0_0_seg : org = 0x40241010, len = 0x2B000
|
||||||
}
|
}
|
||||||
|
|
||||||
PHDRS
|
INCLUDE "../ld/eagle.app.v6.common.ld"
|
||||||
{
|
|
||||||
dport0_0_phdr PT_LOAD;
|
|
||||||
dram0_0_phdr PT_LOAD;
|
|
||||||
dram0_0_bss_phdr PT_LOAD;
|
|
||||||
iram1_0_phdr PT_LOAD;
|
|
||||||
irom0_0_phdr PT_LOAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Default entry point: */
|
|
||||||
ENTRY(call_user_start)
|
|
||||||
EXTERN(_DebugExceptionVector)
|
|
||||||
EXTERN(_DoubleExceptionVector)
|
|
||||||
EXTERN(_KernelExceptionVector)
|
|
||||||
EXTERN(_NMIExceptionVector)
|
|
||||||
EXTERN(_UserExceptionVector)
|
|
||||||
PROVIDE(_memmap_vecbase_reset = 0x40000000);
|
|
||||||
/* Various memory-map dependent cache attribute settings: */
|
|
||||||
_memmap_cacheattr_wb_base = 0x00000110;
|
|
||||||
_memmap_cacheattr_wt_base = 0x00000110;
|
|
||||||
_memmap_cacheattr_bp_base = 0x00000220;
|
|
||||||
_memmap_cacheattr_unused_mask = 0xFFFFF00F;
|
|
||||||
_memmap_cacheattr_wb_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wba_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wbna_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_wt_trapnull = 0x2222211F;
|
|
||||||
_memmap_cacheattr_bp_trapnull = 0x2222222F;
|
|
||||||
_memmap_cacheattr_wb_strict = 0xFFFFF11F;
|
|
||||||
_memmap_cacheattr_wt_strict = 0xFFFFF11F;
|
|
||||||
_memmap_cacheattr_bp_strict = 0xFFFFF22F;
|
|
||||||
_memmap_cacheattr_wb_allvalid = 0x22222112;
|
|
||||||
_memmap_cacheattr_wt_allvalid = 0x22222112;
|
|
||||||
_memmap_cacheattr_bp_allvalid = 0x22222222;
|
|
||||||
PROVIDE(_memmap_cacheattr_reset = _memmap_cacheattr_wb_trapnull);
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
|
|
||||||
.dport0.rodata : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_rodata_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.rodata)
|
|
||||||
*(.dport.rodata)
|
|
||||||
_dport0_rodata_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.dport0.literal : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_literal_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.literal)
|
|
||||||
*(.dport.literal)
|
|
||||||
_dport0_literal_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.dport0.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
_dport0_data_start = ABSOLUTE(.);
|
|
||||||
*(.dport0.data)
|
|
||||||
*(.dport.data)
|
|
||||||
_dport0_data_end = ABSOLUTE(.);
|
|
||||||
} >dport0_0_seg :dport0_0_phdr
|
|
||||||
|
|
||||||
.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
_data_start = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d.*)
|
|
||||||
*(.data1)
|
|
||||||
*(.sdata)
|
|
||||||
*(.sdata.*)
|
|
||||||
*(.gnu.linkonce.s.*)
|
|
||||||
*(.sdata2)
|
|
||||||
*(.sdata2.*)
|
|
||||||
*(.gnu.linkonce.s2.*)
|
|
||||||
*(.jcr)
|
|
||||||
_data_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.rodata : ALIGN(4)
|
|
||||||
{
|
|
||||||
_rodata_start = ABSOLUTE(.);
|
|
||||||
*(.rodata)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r.*)
|
|
||||||
*(.rodata1)
|
|
||||||
__XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_table)
|
|
||||||
*(.gcc_except_table)
|
|
||||||
*(.gnu.linkonce.e.*)
|
|
||||||
*(.gnu.version_r)
|
|
||||||
*(.eh_frame)
|
|
||||||
. = (. + 3) & ~ 3;
|
|
||||||
/* C++ constructor and destructor tables, properly ordered: */
|
|
||||||
__init_array_start = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
__init_array_end = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
/* C++ exception handlers table: */
|
|
||||||
__XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc)
|
|
||||||
*(.gnu.linkonce.h.*)
|
|
||||||
__XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc_end)
|
|
||||||
*(.dynamic)
|
|
||||||
*(.gnu.version_d)
|
|
||||||
. = ALIGN(4); /* this table MUST be 4-byte aligned */
|
|
||||||
_bss_table_start = ABSOLUTE(.);
|
|
||||||
LONG(_bss_start)
|
|
||||||
LONG(_bss_end)
|
|
||||||
_bss_table_end = ABSOLUTE(.);
|
|
||||||
_rodata_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.UserExceptionVector.literal : AT(LOADADDR(.rodata) + (ADDR(.UserExceptionVector.literal) - ADDR(.rodata))) ALIGN(4)
|
|
||||||
{
|
|
||||||
_UserExceptionVector_literal_start = ABSOLUTE(.);
|
|
||||||
*(.UserExceptionVector.literal)
|
|
||||||
_UserExceptionVector_literal_end = ABSOLUTE(.);
|
|
||||||
} >dram0_0_seg :dram0_0_phdr
|
|
||||||
|
|
||||||
.bss ALIGN(8) (NOLOAD) : ALIGN(4)
|
|
||||||
{
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_start = ABSOLUTE(.);
|
|
||||||
*(.dynsbss)
|
|
||||||
*(.sbss)
|
|
||||||
*(.sbss.*)
|
|
||||||
*(.gnu.linkonce.sb.*)
|
|
||||||
*(.scommon)
|
|
||||||
*(.sbss2)
|
|
||||||
*(.sbss2.*)
|
|
||||||
*(.gnu.linkonce.sb2.*)
|
|
||||||
*(.dynbss)
|
|
||||||
*(.bss)
|
|
||||||
*(.bss.*)
|
|
||||||
*(.gnu.linkonce.b.*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_end = ABSOLUTE(.);
|
|
||||||
_heap_start = ABSOLUTE(.);
|
|
||||||
/* _stack_sentry = ALIGN(0x8); */
|
|
||||||
} >dram0_0_seg :dram0_0_bss_phdr
|
|
||||||
/* __stack = 0x3ffc8000; */
|
|
||||||
|
|
||||||
.text : ALIGN(4)
|
|
||||||
{
|
|
||||||
_stext = .;
|
|
||||||
_text_start = ABSOLUTE(.);
|
|
||||||
*(.UserEnter.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.DebugExceptionVector.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.NMIExceptionVector.text)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.KernelExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.UserExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN(16);
|
|
||||||
*(.DoubleExceptionVector.text)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
LONG(0)
|
|
||||||
. = ALIGN (16);
|
|
||||||
*(.entry.text)
|
|
||||||
*(.init.literal)
|
|
||||||
*(.init)
|
|
||||||
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
|
|
||||||
*(.fini.literal)
|
|
||||||
*(.fini)
|
|
||||||
*(.gnu.version)
|
|
||||||
_text_end = ABSOLUTE(.);
|
|
||||||
_etext = .;
|
|
||||||
} >iram1_0_seg :iram1_0_phdr
|
|
||||||
|
|
||||||
.lit4 : ALIGN(4)
|
|
||||||
{
|
|
||||||
_lit4_start = ABSOLUTE(.);
|
|
||||||
*(*.lit4)
|
|
||||||
*(.lit4.*)
|
|
||||||
*(.gnu.linkonce.lit4.*)
|
|
||||||
_lit4_end = ABSOLUTE(.);
|
|
||||||
} >iram1_0_seg :iram1_0_phdr
|
|
||||||
|
|
||||||
.irom0.text : ALIGN(4)
|
|
||||||
{
|
|
||||||
_irom0_text_start = ABSOLUTE(.);
|
|
||||||
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
|
|
||||||
*(.literal.* .text.*)
|
|
||||||
_irom0_text_end = ABSOLUTE(.);
|
|
||||||
} >irom0_0_seg :irom0_0_phdr
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get ROM code address */
|
|
||||||
INCLUDE "../ld/eagle.rom.addr.v6.ld"
|
|
||||||
|
@ -40,15 +40,15 @@ PROVIDE ( __umoddi3 = 0x4000d770 );
|
|||||||
PROVIDE ( __umodsi3 = 0x4000e268 );
|
PROVIDE ( __umodsi3 = 0x4000e268 );
|
||||||
PROVIDE ( __umulsidi3 = 0x4000dcf0 );
|
PROVIDE ( __umulsidi3 = 0x4000dcf0 );
|
||||||
|
|
||||||
PROVIDE ( ets_bzero = 0x40002ae8 );
|
PROVIDE ( bzero = 0x40002ae8 );
|
||||||
PROVIDE ( ets_memcmp = 0x400018d4 );
|
PROVIDE ( memcmp = 0x400018d4 );
|
||||||
PROVIDE ( ets_memcpy = 0x400018b4 );
|
PROVIDE ( memcpy = 0x400018b4 );
|
||||||
PROVIDE ( ets_memmove = 0x400018c4 );
|
PROVIDE ( memmove = 0x400018c4 );
|
||||||
PROVIDE ( ets_memset = 0x400018a4 );
|
PROVIDE ( memset = 0x400018a4 );
|
||||||
|
|
||||||
PROVIDE ( ets_strcmp = 0x40002aa8 );
|
PROVIDE ( strcmp = 0x40002aa8 );
|
||||||
PROVIDE ( ets_strcpy = 0x40002a88 );
|
PROVIDE ( strcpy = 0x40002a88 );
|
||||||
PROVIDE ( ets_strlen = 0x40002ac8 );
|
PROVIDE ( strlen = 0x40002ac8 );
|
||||||
PROVIDE ( ets_strncmp = 0x40002ab8 );
|
PROVIDE ( strncmp = 0x40002ab8 );
|
||||||
PROVIDE ( ets_strncpy = 0x40002a98 );
|
PROVIDE ( strncpy = 0x40002a98 );
|
||||||
PROVIDE ( ets_strstr = 0x40002ad8 );
|
PROVIDE ( strstr = 0x40002ad8 );
|
||||||
|
BIN
lib/libcirom.a
BIN
lib/libcirom.a
Binary file not shown.
Binary file not shown.
BIN
lib/libgcc.a
Normal file
BIN
lib/libgcc.a
Normal file
Binary file not shown.
BIN
lib/libjson.a
BIN
lib/libjson.a
Binary file not shown.
BIN
lib/liblwip.a
BIN
lib/liblwip.a
Binary file not shown.
BIN
lib/libmain.a
BIN
lib/libmain.a
Binary file not shown.
BIN
lib/libminic.a
BIN
lib/libminic.a
Binary file not shown.
Binary file not shown.
BIN
lib/libpp.a
BIN
lib/libpp.a
Binary file not shown.
BIN
lib/libpwm.a
BIN
lib/libpwm.a
Binary file not shown.
Binary file not shown.
BIN
lib/libssl.a
BIN
lib/libssl.a
Binary file not shown.
BIN
lib/libwpa.a
BIN
lib/libwpa.a
Binary file not shown.
@ -138,10 +138,10 @@ def gen_appbin():
|
|||||||
data_str = ''
|
data_str = ''
|
||||||
sum_size = 0
|
sum_size = 0
|
||||||
|
|
||||||
if os.getenv('COMPILE')=='gcc' :
|
if os.getenv('COMPILE')=='xcc' :
|
||||||
cmd = 'xtensa-lx106-elf-nm -g ' + elf_file + ' > eagle.app.sym'
|
|
||||||
else :
|
|
||||||
cmd = 'xt-nm -g ' + elf_file + ' > eagle.app.sym'
|
cmd = 'xt-nm -g ' + elf_file + ' > eagle.app.sym'
|
||||||
|
else :
|
||||||
|
cmd = 'xtensa-lx106-elf-nm -g ' + elf_file + ' > eagle.app.sym'
|
||||||
|
|
||||||
os.system(cmd)
|
os.system(cmd)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user