First get the latest version of ARM GCC and FreeRTOS. Download, extract and install the ARM GCC and then build the FreeRTOS demo.
cd FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_LM3S811_GCC
make
if you get:
LD gcc/RTOSDemo.axf
arm-none-eabi-ld: section .text.startup LMA [0000000000002a2c,0000000000002b97] overlaps section .data LMA [0000000000002a2c,0000000000002a2f]
makedefs:189: recipe for target 'gcc/RTOSDemo.axf' failed
make: *** [gcc/RTOSDemo.axf] Error 1
You will need to patch the standalone.ld file, my modified ld file looks like this:
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K
SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 8K
}
SECTIONS
{
.text :
{
KEEP(*(.isr_vector))
*(.text)
*(.rodata*)
_etext = .;
} > FLASH
/* .data : AT (ADDR(.text) + SIZEOF(.text)) */
.ARM.exidx :
{
*(.ARM.exidx*)
*(.gnu.linkonce.armexidx.*)
} > FLASH
_begin_data = .;
.data : AT ( _begin_data )
{
_data = .;
*(vtable)
*(.data)
_edata = .;
} > SRAM
.bss :
{
_bss = .;
*(.bss)
*(COMMON)
_ebss = .;
} > SRAM
}
Now install QEMU
sudo apt install qemu-system-arm
I had an issue with curl versioning, i had curl4 installed but QEMU required curl3.
I got the following error message:
qemu-system-arm: /usr/lib/x86_64-linux-gnu/libcurl.so.4: version `CURL_OPENSSL_3' not found (required by qemu-system-arm)
And I resolved it by running:
sudo apt install libcurl3
Now launch the FreeRTOS demo inside QEMU with:
qemu-system-arm -machine lm3s811evb -kernel gcc/RTOSDemo.bin -s -S
Open a new terminal and run:
arm-none-eabi-gdb -ex="target remote localhost:1234"
You should now be connected to the STM3 core running in QEMU, notice that its "stopped"
To start the execution enter "continue" or "c" in GDB.
To learn about ARM assembly take a look here https://azeria-labs.com/writing-arm-assembly-part-1/
and to get better control of GDB check here: https://sourceware.org/gdb/current/onlinedocs/gdb/
Thanks! your fixes worked perfectly!
ReplyDelete