Piszę skrypt rozruchowy dla urządzenia opartego na ARM-Cortex M3. Jeśli skompiluję skrypt rozruchowy asemblera i kod aplikacji C, a następnie połączę pliki obiektów i przetransferuję je do mojego urządzenia, wszystko działa.GNU ld usuwa sekcję
Jednakże, jeśli mogę użyć ar
stworzyć archiwum (libboot.a) i połączyć to archiwum z aplikacji C pojawia się problem:
Włożyłam kodu startowego w sekcji:
.section .boot, "ax"
.global _start
_start:
.word 0x10000800 /* Initial stack pointer (FIXME!) */
.word start
.word nmi_handler
.word hard_fault_handler
... etc ...
Zauważyłem, że ld
usuwa to z końcowego pliku binarnego (sekcja "boot" nie jest dostępna). Jest to całkiem naturalne, ponieważ nie ma na nim zależności, o której wie, ale powoduje, że urządzenie nie uruchamia się poprawnie.
Moje pytanie brzmi: jaki jest najlepszy sposób na wymuszenie włączenia tego kodu?