You can chat about native SDK questions and issues here.

User avatar
By kript0n
#63048 I am already becoming mad with that. I have installed the latest version of esp-open-sdk with 2d version of NONOS-SDK. First of all I have tried to compile examples with gen_misc.sh. I placed example folder into esp-open-sdk/sdk, called gen_misc.sh and it failed with
Code: Select all../Makefile:181: warning: overriding recipe for target 'ESP8266_NONOS_SDK_V2.0.0_16_08_10/.dir'
../Makefile:176: warning: ignoring old recipe for target 'ESP8266_NONOS_SDK_V2.0.0_16_08_10/.dir'
You cloned without --recursive, fetching submodules for you.
git submodule update --init --recursive
make -C crosstool-NG -f ../Makefile _ct-ng
make[1]: *** crosstool-NG: No such file or directory.  Stop.
../Makefile:140: recipe for target 'crosstool-NG/ct-ng' failed
make: *** [crosstool-NG/ct-ng] Error 2


Do not know what it means under
Code: Select allYou cloned without --recursive, fetching submodules for you
because I have done it. However the error does not concern that. I have tried to move project folder one directory up i.e. into esp-open-sdk, and it fails again.

Ok. Then I have tried to compile it with my old Makefile, just changed paths to new sdk. As it is required I have added user_rf_cal_sector_set and user_rf_pre_init. And end up with
Code: Select allmultiple reference of user_rf_cal_sector_set. First defined in libmain.a (Not verbatim but the point is that)


Ok, I removed it from user_main.c and it was built. Then I erased flash and wrote esp_default_user_init to 0x3fc000, because I have 4MB board.
Code: Select allesptool.py -p /dev/ttyUSB0 erase_flash
esptool.py -p /dev/ttyUSB0 write_flash 0x3fc000 esp_default_user_init.bin
esptool.py -p /dev/ttyUSB0 write_flash 0x00000 firmware/0x00000.bin 0x10000 firmware/0x10000.bin


And the program fails with fatal exception(29) which as I understand means writing to protected area.
I am almost sure that the problem is in old makefile because it does not consider options which gen_misc.sh set.

So what I actually need to build a firmware with esp-open-sdk? It would be great if someone had a working makefile.

Maybe it is possible to edit old makefile to make it work so here it is:
Code: Select all# Makefile for ESP8266 projects
#
# Thanks to:
# - zarya
# - Jeroen Domburg (Sprite_tm)
# - Christian Klippel (mamalala)
# - Tommie Gannert (tommie)
#
# Changelog:
# - 2014-10-06: Changed the variables to include the header file directory
# - 2014-10-06: Added global var for the Xtensa tool root
# - 2014-11-23: Updated for SDK 0.9.3
# - 2014-12-25: Replaced esptool by esptool.py

# Output directors to store intermediate compiled files
# relative to the project directory
BUILD_BASE   = build
FW_BASE      = firmware

# base directory for the compiler
XTENSA_TOOLS_ROOT ?= path_to_xtensa-lx106-elf/bin
#/opt/Espressif/crosstool-NG/builds/xtensa-lx106-elf/bin

# base directory of the ESP8266 SDK package, absolute
SDK_BASE   ?= path_to_esp-open-sdk-2.0
#/opt/Espressif/ESP8266_SDK

# esptool.py path and port
ESPTOOL      ?= path_to_esptool.py
ESPPORT      ?= /dev/ttyUSB0

# name for the target project
TARGET      = app

# which modules (subdirectories) of the project to include in compiling
MODULES      = driver user
EXTRA_INCDIR    = include

# libraries used in this project, mainly provided by the SDK
LIBS      = c gcc hal pp phy net80211 lwip wpa pwm main espnow crypto

# compiler flags using during compilation of source files
CFLAGS      = -std=c99 -Os -g -O2 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals  -D__ets__ -DICACHE_FLASH

# linker flags used to generate the main object file
LDFLAGS      = -Wl,-EL -mlongcalls -mtext-section-literals -nostdlib -Wl,--no-check-sections -Wl,--gc-sections -u call_user_start -Wl,-static

# linker script used for the above linkier step
LD_SCRIPT   = eagle.app.v6.ld

# various paths from the SDK used in this project
SDK_LIBDIR   = /sdk/lib
SDK_LDDIR   = /sdk/ld
SDK_INCDIR   = /sdk/include /sdk/include/json

# we create two different files for uploading into the flash
# these are the names and options to generate them
FW_FILE_1_ADDR   = 0x00000
FW_FILE_2_ADDR   = 0x40000

# select which tools to use as compiler, librarian and linker
CC      := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-gcc
AR      := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-ar
LD      := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-gcc



####
#### no user configurable options below here
####
SRC_DIR      := $(MODULES)
BUILD_DIR   := $(addprefix $(BUILD_BASE)/,$(MODULES))

SDK_LIBDIR   := $(addprefix $(SDK_BASE)/,$(SDK_LIBDIR))
SDK_INCDIR   := $(addprefix -I$(SDK_BASE)/,$(SDK_INCDIR))

SRC      := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.c))
OBJ      := $(patsubst %.c,$(BUILD_BASE)/%.o,$(SRC))
LIBS      := $(addprefix -l,$(LIBS))
APP_AR      := $(addprefix $(BUILD_BASE)/,$(TARGET)_app.a)
TARGET_OUT   := $(addprefix $(BUILD_BASE)/,$(TARGET).out)

LD_SCRIPT   := $(addprefix -T$(SDK_BASE)/$(SDK_LDDIR)/,$(LD_SCRIPT))

INCDIR   := $(addprefix -I,$(SRC_DIR))
EXTRA_INCDIR   := $(addprefix -I,$(EXTRA_INCDIR))
MODULE_INCDIR   := $(addsuffix /include,$(INCDIR))

FW_FILE_1   := $(addprefix $(FW_BASE)/,$(FW_FILE_1_ADDR).bin)
FW_FILE_2   := $(addprefix $(FW_BASE)/,$(FW_FILE_2_ADDR).bin)

V ?= $(VERBOSE)
ifeq ("$(V)","1")
Q :=
vecho := @true
else
Q := @
vecho := @echo
endif

vpath %.c $(SRC_DIR)

define compile-objects
$1/%.o: %.c
   $(vecho) "CC $$<"
   $(Q) $(CC) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CFLAGS) -c $$< -o $$@
endef

.PHONY: all checkdirs flash clean

all: checkdirs $(TARGET_OUT) $(FW_FILE_1) $(FW_FILE_2)

$(FW_BASE)/%.bin: $(TARGET_OUT) | $(FW_BASE)
   $(vecho) "FW $(FW_BASE)/"
   $(Q) $(ESPTOOL) elf2image -o $(FW_BASE)/ $(TARGET_OUT)

$(TARGET_OUT): $(APP_AR)
   $(vecho) "LD $@"
   $(Q) $(LD) -L$(SDK_LIBDIR) $(LD_SCRIPT) $(LDFLAGS) -Wl,--start-group $(LIBS) $(APP_AR) -Wl,--end-group -o $@

$(APP_AR): $(OBJ)
   $(vecho) "AR $@"
   $(Q) $(AR) cru $@ $^

checkdirs: $(BUILD_DIR) $(FW_BASE)

$(BUILD_DIR):
   $(Q) mkdir -p $@

$(FW_BASE):
   $(Q) mkdir -p $@

flash: $(FW_FILE_1) $(FW_FILE_2)
   $(ESPTOOL) --port $(ESPPORT) write_flash $(FW_FILE_1_ADDR) $(FW_FILE_1) $(FW_FILE_2_ADDR) $(FW_FILE_2)

clean:
   $(Q) rm -rf $(FW_BASE) $(BUILD_BASE)

$(foreach bdir,$(BUILD_DIR),$(eval $(call compile-objects,$(bdir))))
User avatar
By davydnorris
#64781 Hey,

It is a bit fiddly getting the initial make to work, and different examples have different Makefile setups too, which makes it harder. But then after that first project works it gets easier.

Here is my Makefile that works for all the projects I have encountered (some with a tiny amount of tweaking). It is obviously based off the same source as your old Makefile so should be easy for you to get running. I use Cygwin64 on Windows but this Makefile is not tied to that environment.

You will need to set environment variables or change the paths at the top of the file. I have two environment variables:
ESP8266 points to the top of your esp_open_sdk compiler stack
SDK_PATH points to the top of your ESP NonOS SDK

You will also need to match the flashing parameters to your own environment - the serial port and baud rate, and also the chip settings. I am currently using ESP-12F chips in dual boot mode with 4M flash. From what you have described, I think you are the same so my settings should work for you. The only one you may need to change is the SPI_SIZE_MAP - for a 4M flash it will be one of 4, 6, or 7 but try it as I have it set now.

PS: I had to add the .txt extension on my Makefile as the forum would not let me upload it otherwise. Remove the extension before using
You do not have the required permissions to view the files attached to this post.
User avatar
By JackB
#66759 Did you try to run the blinky example? I worked for me (change Pin to 2 for esp12 board).
You need to have your PATH changed so it will find the gcc for the esp8266, e.g. for me this is

jack@ubuntu:~/projects/lemons$ env

PATH=/home/jack/projects/esp-open-sdk/xtensa-lx106-elf/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

And the Makefile:

jack@ubuntu:~/projects/lemons$ cat Makefile
CC = xtensa-lx106-elf-gcc
CFLAGS = -I. -mlongcalls
LDLIBS = -nostdlib -Wl,--start-group -lmain -lnet80211 -lwpa -llwip -lpp -lphy -lc -Wl,--end-group -lgcc
LDFLAGS = -Teagle.app.v6.ld

usermain-0x00000.bin: usermain
esptool.py elf2image $^

usermain: usermain.o

usermain.o: usermain.c

flash: usermain-0x00000.bin
esptool.py write_flash 0 usermain-0x00000.bin 0x10000 usermain-0x10000.bin

clean:
rm -f usermain usermail.o usermain-0x00000.bin usermain-0x10000.bin


Then I type make flash and it compiles and loads to the esp8266 and runs the code.
I will post my usermain.c in another thread, it is a dirt simple http server.