Newlib minimal çalıştırılabilir örnek
Burada , QEMU’da eylemde newlib’i gösteren oldukça otomatik ve belgelenmiş bir örnek veriyorum .
Newlib ile, kendi platform çağrılarınızı Baremetal platformunuz için uygularsınız.
Örneğin, yukarıdaki örnekte, bir örnek programımız var exit.c
:
#include <stdio.h>
#include <stdlib.h>
void main(void) {
exit(0);
}
ve ayrı bir C dosyasında common.c
, ARM semihostingexit
ile uygularız :
void _exit(int status) {
__asm__ __volatile__ ("mov r0, #0x18; ldr r1, =#0x20026; svc 0x00123456");
}
Uygulayacağınız diğer tipik sistemler:
write
sonuçları ana bilgisayara vermek için. Bu, ya ile yapılabilir:
- daha fazla yarı gölgelenme
- bir UART donanımı
brk
için malloc
.
Baremetal için kolay, çünkü disk belleği ile ilgilenmek zorunda değiliz!
TODO Ben merak bunun tam gaz girmeden önleyici çizelgeleme syscalls yürütülmesine ulaşmak için gerçekçi olup olmadığını RTOS gibi Zephyr veya freertos .
Newlib ile ilgili en güzel şey, string.h
sizin gibi işletim sistemi dışındaki tüm özel şeyleri uygulamanız ve sadece işletim sistemi taslaklarını uygulamanıza izin vermesidir.
Ayrıca, tüm taslakları uygulamak zorunda değilsiniz, sadece ihtiyacınız olacak olanları uygulamak zorundasınız. Örneğin, programınız yalnızca ihtiyaç duyuyorsa exit
, o zaman bir sağlamak zorunda değilsiniz print
.
Newlib kaynak ağacında, altında bir ARM yarı-gölgeleme uygulaması da dahil olmak üzere bazı uygulamalar var newlib/libc/sys/arm
, ancak çoğu zaman kendinizinkini uygulamanız gerekiyor. Bununla birlikte, görev için sağlam bir temel sağlar.
Newlib'i kurmanın en kolay yolu, crosstool-NG ile kendi derleyicinizi kurarak, Newlib'i C kütüphanesi olarak kullanmak istediğinizi söylemelisiniz. Kurulumum, şu anda mevcut olan newlib yapılandırmalarını kullanan bu komut dosyasıyla sizin için otomatik olarak işler crosstool_ng_config
.
C ++ 'ın da işe yarayacağını düşünüyorum, ancak TODO bunu test ediyor.