Mbed programming: web-based development

Mbed-style of development is web-based. The compiler is hosted somewhere, you just select the appropriate compiler, and program binaries generated for you.

Then download the binaries to the root directory of the target device which you have selected to be compiled, and the functionality (eg, like Blinking LED) will start working.

https://developer.mbed.org/teams/mbed/code/mbed_blinky/

Select "Freedom FRDM-KL25Z as the compiler, and then compile and output the bin file.

THen copy the bin files to the root directory of the Freedom device, which should have a USB mass storage automatically (or at least alerted to user to be mounted) mounted by the Linux host (I used Fedora 20 64-bit, and Ubuntu 14.04 LTS 64-bit).

Reset the Freedom device, and there you will get a blinking LED.

Similarly, following the same procedure, and choosing the compiler for STM32 Nucleo L152RE board, I can easily implementing the LED Blinkiing program (the light green blinking LED) for a different device:

Displaying DSC_0090.JPG

Reference:

http://sg.element14.com/freescale-semiconductor/frdm-kl25z/arm-kinetis-kl25z-freedom-dev-board/dp/2191861

http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF260002?icmp=nucleo-ipf_pron_pr-nucleo_feb2014&sc=nucleoL152RE-pr

Advertisements

2 responses to this post.

  1. How to disassemble the “bin” firmware generated by mbed.org?

    You can read this:

    http://developer.mbed.org/handbook/Exporting-to-GCC-ARM-Embedded

    Here it is shown how the “objcopy” is used to extract out the “bin” file from ELF:

     
    my_program$ ls
    main.cpp  Makefile  mbed  mbed.lib
     
    my_program$ make
    
    arm-none-eabi-g++ -c -Os -fno-common -fmessage-length=0 -Wall -fno-exceptions -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections  -DTARGET_LPC1768 -DTOOLCHAIN_GCC_ARM -DNDEBUG -std=gnu++98 -I./mbed -I./mbed/LPC1768 -I./mbed/LPC1768/GCC_ARM  -o main.o main.cpp
    
    arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Tmbed/LPC1768/GCC_ARM/LPC1768.ld -L./mbed -L./mbed/LPC1768 -L./mbed/LPC1768/GCC_ARM  -o my_program.elf main.o mbed/LPC1768/GCC_ARM/startup_LPC17xx.o mbed/LPC1768/GCC_ARM/core_cm3.o mbed/LPC1768/GCC_ARM/system_LPC17xx.o mbed/LPC1768/GCC_ARM/cmsis_nvic.o -lmbed -lcapi -lstdc++ -lsupc++ -lm -lc -lgcc
    
    arm-none-eabi-objcopy -O binary my_program.elf my_program.bin
     
    my_program$ ls
    main.cpp  main.o  Makefile  mbed  mbed.lib  my_program.bin  my_program.elf
    
    

    So the disassembly is possible by using “-b binary -marm -D”, for example, assuming big endian:

    arm-none-eabi-objdump -b binary -EB -marm -D mbed_blinky_freedom_K20D50M.bin
    
    Disassembly of section .data:
    
    00000000 :
           0:	00200020 	eoreq	r0, r0, r0, lsr #32
           4:	41020000 	mrsmi	r0, (UNDEF: 2)
           8:	49020000 	stmdbmi	r2, {}	; 
           c:	4b020000 	blmi	0x80014
          10:	4d020000 	stcmi	0, cr0, [r2, #-0]
          14:	4f020000 	svcmi	0x00020000
    

    And little endian will be “-EL” instead of “-EB”.

    Reply

  2. To learn all the intricacies of “objdump”:

    http://www.thegeekstuff.com/2012/09/objdump-examples/

    and this (mainly for forensic analysis):

    http://old.honeynet.org/reverse/results/sol/sol-06/analysis.html

    and following is good coverage on PLT and GOT:

    https://www.technovelty.org/linux/plt-and-got-the-key-to-code-sharing-and-dynamic-libraries.html

    QUIZ QUESTIONS: does the firmware above have PLT and GOT? why not? Generally these are for libraries integrations, but since firmware are standalone, IT CANNOT HAVE PLT and GOT, as there is no “dynamic loading and linking” phase, which PLT resolution is done.

    Reply

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: