FreeRTOS A57

Qemu + virt (cortex-a53或cortex-a57)
4GB
物理内存地址空间:0x40000000~0x13fffffff

 https://github.com/qemu/qemu/blob/master/hw/arm/virt.c

 https://developer.arm.com/architectures/learn-the-architecture

http://infocenter.arm.com/help/topic/com.arm.doc.dai0527a/DAI0527A_baremetal_boot_code_for_ARMv8_A_processors.pdf

https://developer.arm.com/architectures/learn-the-architecture/generic-timer/before-you-begin

undefined reference to `__stack_chk_guard' .. undefined reference to `__stack_chk_fail'

增加gcc编译参数 CFLAGS

-fno-stack-protector

qemu-system-aarch64 -machine virt -cpu cortex-a57 -smp 4 -kernel kernel.elf -nographic -S -s

编译器

https://www.jianshu.com/p/6909615d7529

GDB

gdb-multiarch

https://zhuanlan.zhihu.com/p/47783910

 https://github.com/NienfengYao/armv8-bare-metal

https://github.com/NienfengYao/port_freertos_to_qemu_a57_virt

https://github.com/FreeRTOS/FreeRTOS-Kernel

 

 

How to use GDB to debug QEMU with SMP (symmetric multiple processors)?

https://stackoverflow.com/questions/42800801/how-to-use-gdb-to-debug-qemu-with-smp-symmetric-multiple-processors

Each qemu CPU is visible as a separate thread within gdb. To inspect the state of another CPU, use the thread command to switch CPUs.

(gdb) info thread
  Id   Target Id         Frame 
* 1    Thread 1 (CPU#0 [running]) 0x80105163 in stosl (addr=0x89c3e000, data=16843009, cnt=1024) at x86.h:44
  2    Thread 2 (CPU#1 [halted ]) halt () at x86.h:127
  3    Thread 3 (CPU#2 [halted ]) halt () at x86.h:127
  4    Thread 4 (CPU#3 [halted ]) halt () at x86.h:127

(gdb) where
#0  0x80105163 in stosl (addr=0x89c3e000, data=16843009, cnt=1024) at x86.h:44
#1  0x801051bf in memset (dst=0x89c3e000, c=1, n=4096) at string.c:8
#2  0x80102b5a in kfree (v=0x89c3e000 "01010101") at kalloc.c:63
#3  0x80102af4 in freerange (vstart=0x80400000, vend=0x8e000000) at kalloc.c:47
#4  0x80102ac1 in kinit2 (vstart=0x80400000, vend=0x8e000000) at kalloc.c:38
#5  0x8010386a in main () at main.c:37

(gdb) thread 3
[Switching to thread 3 (Thread 3)]
#0  halt () at x86.h:127
127 }

(gdb) where
#0  halt () at x86.h:127
#1  0x80104aeb in scheduler () at proc.c:288
#2  0x801038f6 in mpmain () at main.c:59
#3  0x801038b0 in mpenter () at main.c:50
#4  0x0000705a in ?? ()
原文地址:https://www.cnblogs.com/sinferwu/p/12989364.html