<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Building Mesh Bootloader via makefile</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/38845/building-mesh-bootloader-via-makefile</link><description>I&amp;#39;m attempting to pull the mesh bootloader out of the sdk and put it in its own makefile project, so it can be built separately. 
 I&amp;#39;m building with `gcc-arm-none-eabi-7-2017-q4-major` for an nRF52832. 
 The bootloader builds successfully, however when</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 01 Oct 2018 18:08:39 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/38845/building-mesh-bootloader-via-makefile" /><item><title>RE: Building Mesh Bootloader via makefile</title><link>https://devzone.nordicsemi.com/thread/151056?ContentTypeID=1</link><pubDate>Mon, 01 Oct 2018 18:08:39 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f02dd663-a86e-41c5-8411-3fa566885c39</guid><dc:creator>Justin</dc:creator><description>&lt;p&gt;good catch, that seems to have been the issue.&lt;br /&gt;thanks!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Building Mesh Bootloader via makefile</title><link>https://devzone.nordicsemi.com/thread/150947?ContentTypeID=1</link><pubDate>Mon, 01 Oct 2018 11:59:08 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6774b50d-8cc2-43d3-864b-8d082d3e8fd2</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Hi again Jay, sorry for the late response, was off on Friday.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In our .ld we expecting the object file to be .c.obj, but in your make file you use:&amp;nbsp;C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILE_NAMES:.c=.o) ) seems that it will be .o&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Could you try&amp;nbsp;changing the file lists in the .ld file to .o instead of &amp;quot;.c.obj&amp;quot; and see if that works ?&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Building Mesh Bootloader via makefile</title><link>https://devzone.nordicsemi.com/thread/150736?ContentTypeID=1</link><pubDate>Thu, 27 Sep 2018 14:32:33 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b2ae5152-8882-47bc-be98-ebf0d66d986a</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Thanks Jay, we will try to test here and get back to you.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Building Mesh Bootloader via makefile</title><link>https://devzone.nordicsemi.com/thread/150545?ContentTypeID=1</link><pubDate>Wed, 26 Sep 2018 16:57:47 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9f3c5084-af8a-43bf-a38c-e459978413fd</guid><dc:creator>Justin</dc:creator><description>&lt;p&gt;i am using an unmodified linker file from the mesh SDK:&lt;/p&gt;
&lt;p&gt;nrf5_SDK_for_Mesh_v2.1.1_src/mesh/bootloader/linker/&lt;strong&gt;bootloader_nrf52832_xxAA.ld&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/* nRF5 SDK for Mesh Bootloader linker script. */

SEARCH_DIR(.)
GROUP(-lgcc -lc -lnosys)
MEMORY
{
    FLASH (rx) :           ORIGIN = 0x78000, LENGTH = 0x6000
    RAM (rw) :             ORIGIN = 0x20000004, LENGTH = 0xfcfc
    CORE_BL_RAM (rw) :     ORIGIN = 0x2000fd00, LENGTH = 0x300
    UICR_BOOTADDR (r) :    ORIGIN = 0x10001014, LENGTH = 0x04
    UICR_MBRPARAMADDR (r): ORIGIN = 0x10001018, LENGTH = 0x04
}

SECTIONS
{
    .core_data (NOLOAD) :
    {
        __core_ram_start__ = .;
        . = ALIGN(4);
        *sha256.c.obj (.data*)
        *bootloader_app_bridge.c.obj (.data*)
        *bootloader_info.c.obj (.data*)
        *uECC.c.obj (.data*)
        *dfu_mesh.c.obj (.data*)
        *dfu_transfer_mesh.c.obj (.data*)
        *dfu_bank.c.obj (.data*)
        *dfu_util.c.obj (.data*)
        . = ALIGN(4);
        __core_ram_end__ = .;
    } &amp;gt; CORE_BL_RAM
    .core_bss (NOLOAD) :
    {
        __core_ram_start__ = .;
        . = ALIGN(4);
        *sha256.c.obj (.bss*)
        *bootloader_app_bridge.c.obj (.bss*)
        *bootloader_info.c.obj (.bss*)
        *uECC.c.obj (.bss*)
        *dfu_mesh.c.obj (.bss*)
        *dfu_transfer_mesh.c.obj (.bss*)
        *dfu_bank.c.obj (.bss*)
        *dfu_util.c.obj (.bss*)
        . = ALIGN(4);
        __core_ram_end__ = .;
    } &amp;gt; CORE_BL_RAM

    /* Ensures the Bootloader start address in flash is written to UICR when flashing the image. */
    .uicrBootStartAddress :
    {
      KEEP(*(.uicrBootStartAddress))
    } &amp;gt; UICR_BOOTADDR

    /* The MBR used for the supported nRF52 SoftDevices expects a pointer to an empty
     * flash page written in the UICR.NRFFW[1] register.
     */
    .uicrBootMBRParamAddress :
    {
      KEEP(*(.uicrBootMBRParamAddress))
    } &amp;gt; UICR_MBRPARAMADDR
}

INCLUDE &amp;quot;nrf_common.ld&amp;quot;&lt;/pre&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Building Mesh Bootloader via makefile</title><link>https://devzone.nordicsemi.com/thread/150415?ContentTypeID=1</link><pubDate>Wed, 26 Sep 2018 08:39:10 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:025497dd-ec0e-45d0-ae56-1a8f33a23838</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Hi Jay,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks for the file. We would be interested to know what you have in your .ld file.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;There is one thing special about the bootloader is that it requires a dedicated &amp;quot;core ram&amp;quot; section.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you have a look at the .ld files here:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/NordicPlayground/nRF51-ble-bcast-mesh/tree/develop/DFU/nRF51/bootloader/gcc"&gt;https://github.com/NordicPlayground/nRF51-ble-bcast-mesh/tree/develop/DFU/nRF51/bootloader/gcc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can find in&amp;nbsp;&lt;a title="gcc_bl_nrf52832_xxAA.ld" href="https://github.com/NordicPlayground/nRF51-ble-bcast-mesh/blob/develop/DFU/nRF51/bootloader/gcc/gcc_bl_nrf52832_xxAA.ld"&gt;gcc_bl_nrf52832_xxAA.ld&lt;/a&gt;&amp;nbsp;the &lt;span&gt;CORE_BL_RAM &lt;/span&gt;section is defined and then used in&amp;nbsp;&lt;a title="gcc_bl_nrf52_common.ld" href="https://github.com/NordicPlayground/nRF51-ble-bcast-mesh/blob/develop/DFU/nRF51/bootloader/gcc/gcc_bl_nrf52_common.ld"&gt;gcc_bl_nrf52_common.ld&lt;/a&gt;&amp;nbsp;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This bootloader was for our old mesh stack (broadcast mesh) but it&amp;#39;s almost identical to the bootloader in our newer mesh SDK.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Building Mesh Bootloader via makefile</title><link>https://devzone.nordicsemi.com/thread/150326?ContentTypeID=1</link><pubDate>Tue, 25 Sep 2018 17:41:48 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0e561624-374f-4626-b28a-504a03875410</guid><dc:creator>Justin</dc:creator><description>&lt;p&gt;i attempted to attach the makefile to the original post, but it didn&amp;#39;t seem to work, so here it is:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;pre class="ui-code" data-mode="batchfile"&gt;PROJECT_NAME := mesh-bootloader

export OUTPUT_FILENAME
MAKEFILE_NAME := $(MAKEFILE_LIST)
MAKEFILE_DIR := $(dir $(MAKEFILE_NAME) )

TEMPLATE_PATH = ./sdk/nRF5_SDK/components/toolchain/gcc

include $(TEMPLATE_PATH)/Makefile.common

ifeq ($(OS),Windows_NT)
include $(TEMPLATE_PATH)/Makefile.windows
else
include $(TEMPLATE_PATH)/Makefile.posix
endif

SDK_ROOT := $(abspath ./sdk/nRF5_SDK)
PROJ_DIR := $(abspath ./)
MESH_ROOT := $(abspath ./sdk/MESH_SDK)

#echo suspend
ifeq (&amp;quot;$(VERBOSE)&amp;quot;,&amp;quot;1&amp;quot;)
NO_ECHO :=
else
NO_ECHO := @
endif

#function for removing duplicates in a list
remduplicates = $(strip $(if $1,$(firstword $1) $(call remduplicates,$(filter-out $(firstword $1),$1))))

C_SOURCE_FILES += \
$(PROJ_DIR)/src/bootloader.c \
$(PROJ_DIR)/src/bootloader_app_bridge.c \
$(PROJ_DIR)/src/bootloader_info.c \
$(PROJ_DIR)/src/bootloader_rtc.c \
$(PROJ_DIR)/src/bootloader_util.c \
$(PROJ_DIR)/src/dfu_bank.c \
$(PROJ_DIR)/src/dfu_mesh.c \
$(PROJ_DIR)/src/dfu_transfer_mesh.c \
$(PROJ_DIR)/src/dfu_util.c \
$(PROJ_DIR)/src/fifo.c \
$(PROJ_DIR)/src/main.c \
$(PROJ_DIR)/src/mesh_packet.c \
$(PROJ_DIR)/src/nrf_flash.c \
$(PROJ_DIR)/src/radio_control.c \
$(PROJ_DIR)/src/rand.c \
$(PROJ_DIR)/src/transport.c \
$(PROJ_DIR)/src/uECC.c \
$(SDK_ROOT)/components/libraries/sha256/sha256.c \
$(SDK_ROOT)/modules/nrfx/mdk/system_nrf52.c

ASM_SOURCE_FILES  = $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52.S

INC_PATHS += -I$(PROJ_DIR)/include
INC_PATHS += -I$(SDK_ROOT)/integration/nrfx
INC_PATHS += -I$(SDK_ROOT)/components/libraries/util
INC_PATHS += -I$(SDK_ROOT)/components/libraries/timer
INC_PATHS += -I$(SDK_ROOT)/components/libraries/experimental_section_vars
INC_PATHS += -I$(SDK_ROOT)/components/libraries/delay
INC_PATHS += -I$(SDK_ROOT)/components/libraries/sha256
INC_PATHS += -I$(SDK_ROOT)/components/softdevice/s132/headers
INC_PATHS += -I$(SDK_ROOT)/components/softdevice/s132/headers/nrf52
INC_PATHS += -I$(SDK_ROOT)/modules/nrfx
INC_PATHS += -I$(SDK_ROOT)/modules/nrfx/mdk
INC_PATHS += -I$(SDK_ROOT)/modules/nrfx/hal
INC_PATHS += -I$(SDK_ROOT)/components/toolchain/cmsis/include
INC_PATHS += -I$(SDK_ROOT)/components/toolchain/gcc
INC_PATHS += -I$(SDK_ROOT)/components/toolchain/cmsis/dsp/GCC
INC_PATHS += -I$(SDK_ROOT)/components/boards

OBJECT_DIRECTORY = _build
LISTING_DIRECTORY = $(OBJECT_DIRECTORY)
OUTPUT_BINARY_DIRECTORY = $(OBJECT_DIRECTORY)

# Sorting removes duplicates
BUILD_DIRECTORIES := $(sort $(OBJECT_DIRECTORY) $(OUTPUT_BINARY_DIRECTORY) $(LISTING_DIRECTORY) )
OUTPUT_DIRECTORY = $(BUILD_DIRECTORIES)

#flags common to all targets
#CDEFINES = -DBOARD_PCA10040
CDEFINES = -DBOARD_CUSTOM
CDEFINES += -DBOOTLOADER -DNORDIC_SDK_VERSION=15 -DNRF52832 -DNRF52832_XXAA -DNRF52_SERIES -DRBC_MESH_PACKET_POOL_SIZE=32 -DuECC_CURVE=uECC_secp256r1 -DuECC_PLATFORM=uECC_arm
#CDEFINES += -DCONFIG_GPIO_AS_PINRESET

COMFLAGS = --std=gnu99 -Wall -Wno-attributes -Wno-format -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin --short-enums -Os -g
COMFLAGS += -mcpu=cortex-m4 -mthumb -mabi=aapcs -mfloat-abi=hard -mfpu=fpv4-sp-d16

CFLAGS  = $(COMFLAGS)
CCFLAGS = $(COMFLAGS)

LD_COMMON_PATH = $(SDK_ROOT)/modules/nrfx/mdk
LDFLAGS = --std=gnu99 -Wall -Wno-attributes -Wno-format -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin --short-enums -Os -g -mcpu=cortex-m4 -mthumb -mabi=aapcs -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs

# Assembler flags
ASMFLAGS = -Os -DNDEBUG -mcpu=cortex-m4 -mthumb -mabi=aapcs -mfloat-abi=hard -mfpu=fpv4-sp-d16 -DBOARD_CUSTOM -DBOOTLOADER -DNORDIC_SDK_VERSION=15 -DNRF52832 -DNRF52832_XXAA -DNRF52_SERIES -DRBC_MESH_PACKET_POOL_SIZE=32 -DuECC_CURVE=uECC_secp256r1 -DuECC_PLATFORM=uECC_arm


default: clean mesh-bootloader

all:
	$(NO_ECHO)&amp;quot;$(MAKE)&amp;quot; -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e mesh-bootloader

help:
	@echo following targets are available:
	@echo 	mesh-bootloader

C_SOURCE_FILE_NAMES = $(notdir $(C_SOURCE_FILES))
C_PATHS = $(call remduplicates, $(dir $(C_SOURCE_FILES) ) )
C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILE_NAMES:.c=.o) )

ASM_SOURCE_FILE_NAMES = $(notdir $(ASM_SOURCE_FILES))
ASM_PATHS = $(call remduplicates, $(dir $(ASM_SOURCE_FILES) ))
ASM_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(ASM_SOURCE_FILE_NAMES:.S=.o) )

vpath %.c $(C_PATHS)
vpath %.S $(ASM_PATHS)

OBJECTS = $(C_OBJECTS) $(ASM_OBJECTS)

LINKER_PATH = $(PROJ_DIR)/linker

mesh-bootloader: OUTPUT_FILENAME := mesh-bootloader
mesh-bootloader: LINKER_SCRIPT=$(LINKER_PATH)/bootloader_nrf52832_xxAA.ld
LDFLAGS += -L$(LD_COMMON_PATH) -L$(LINKER_PATH) -T$(LINKER_SCRIPT)
LDFLAGS += -Xlinker -Map=$(LISTING_DIRECTORY)/$(OUTPUT_FILENAME).map

mesh-bootloader: $(MENU_INCLUDE) $(BUILD_DIRECTORIES) $(OBJECTS)
	@echo Linking target: $(OUTPUT_FILENAME).out
	$(NO_ECHO)$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
	$(NO_ECHO)&amp;quot;$(MAKE)&amp;quot; -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e finalize

## Create build directories
$(BUILD_DIRECTORIES):
	echo $(MAKEFILE_NAME)
	$(MK) $@

# Create objects from C SRC files
$(OBJECT_DIRECTORY)/%.o: %.c
	@echo Compiling file: $(notdir $&amp;lt;)
	$(NO_ECHO)$(CC) $(CDEFINES) $(INC_PATHS) $(CFLAGS) -o $@ -c $&amp;lt;

# Assemble files
$(OBJECT_DIRECTORY)/%.o: %.S
	@echo Assembly file: $(notdir $&amp;lt;)
	$(NO_ECHO)$(CC) $(ASMFLAGS) $(INC_PATHS) -o $@ -c $&amp;lt;
# Link
$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out: $(BUILD_DIRECTORIES) $(OBJECTS)
	@echo Linking target: $(OUTPUT_FILENAME).out
	$(NO_ECHO)$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -lm -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
## Create binary .bin file from the .out file
$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
	@echo Preparing: $(OUTPUT_FILENAME).bin
	$(NO_ECHO)$(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin

## Create binary .hex file from the .out file
$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
	@echo Preparing: $(OUTPUT_FILENAME).hex
	$(NO_ECHO)$(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex

finalize: genbin genhex echosize

genbin:
	@echo Preparing: $(OUTPUT_FILENAME).bin
	$(NO_ECHO)$(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin

## Create binary .hex file from the .out file
genhex:
	@echo Preparing: $(OUTPUT_FILENAME).hex
	$(NO_ECHO)$(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
echosize:
	-@echo &amp;#39;&amp;#39;
	$(NO_ECHO)$(SIZE) $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
	-@echo &amp;#39;&amp;#39;

cleanobj:
	$(RM) $(BUILD_DIRECTORIES)/*.o
&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Building Mesh Bootloader via makefile</title><link>https://devzone.nordicsemi.com/thread/150221?ContentTypeID=1</link><pubDate>Tue, 25 Sep 2018 11:04:02 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7572141c-a6df-47a2-b7f0-740bd2c43c7a</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Hi Jay,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Could you send your make file of the bootloader project ?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;We had an issue with our spam filter. It&amp;#39;s fixed now , now you can edit your question.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>