Newlib ตัวอย่างน้อยที่สุด runnable
นี่ฉันให้เป็นตัวอย่างอย่างอัตโนมัติและจัดทำเอกสารที่แสดงให้เห็น newlib ในการดำเนินการใน QEMU
ด้วย newlib คุณสามารถใช้การเรียกระบบของคุณเองสำหรับแพลตฟอร์มเปล่าของคุณ
ตัวอย่างเช่นในตัวอย่างข้างต้นเรามีโปรแกรมตัวอย่างexit.c
:
#include <stdio.h>
#include <stdlib.h>
void main(void) {
exit(0);
}
และในไฟล์ C ที่แยกต่างหากcommon.c
เราใช้ the exit
ด้วยการสร้าง semihostingด้วยARM :
void _exit(int status) {
__asm__ __volatile__ ("mov r0, #0x18; ldr r1, =#0x20026; svc 0x00123456");
}
syscalls ทั่วไปอื่น ๆ ที่คุณจะใช้คือ:
สิ่งที่ต้องทำผมสงสัยว่ามันเป็นเหตุผลที่จะไปถึงการดำเนินมาตรการการจัดตารางเวลา syscalls โดยไม่ต้องไปเป็นเป่าเต็มRTOSเช่นZephyrหรือFreeRTOS
สิ่งที่ยอดเยี่ยมเกี่ยวกับ Newlib คือมันใช้สิ่งต่าง ๆ ที่ไม่ใช่ของระบบปฏิบัติการเช่นเดียวstring.h
กับคุณและช่วยให้คุณสามารถติดตั้งระบบปฏิบัติการได้อย่างสมบูรณ์
นอกจากนี้คุณไม่จำเป็นต้องติดตั้งสตับทั้งหมด แต่จะต้องใช้กับสตับเท่านั้น เช่นถ้าโปรแกรมของคุณต้องการเพียงแล้วคุณจะได้ไม่ต้องให้exit
print
ทรีซอร์สของ Newlib มีการใช้งานบางอย่างอยู่แล้วรวมถึงการใช้งานเซมิโคสติ้ง ARM ภายใต้newlib/libc/sys/arm
แต่ส่วนใหญ่คุณจะต้องใช้งานของคุณเอง แต่จะให้ฐานที่มั่นคงสำหรับงาน
วิธีที่ง่ายที่สุดในการตั้งค่า Newlib คือการสร้างคอมไพเลอร์ของคุณเองด้วย crosstool-NG คุณเพียงแค่บอกว่าคุณต้องการใช้ Newlib เป็นไลบรารี C จับตั้งค่าของฉันที่จะให้คุณกับสคริปต์นี้ซึ่งใช้ newlib configs crosstool_ng_config
ในปัจจุบันที่
ฉันคิดว่า C ++ จะทำงานได้เช่นกัน แต่ต้องทดสอบ