YAOS เป็นระบบปฏิบัติการฝังตัวสำหรับอุปกรณ์ Internet of Things (IoT) โดยเฉพาะสำหรับโปรเซสเซอร์แบบคอร์เดียวที่ไม่มีการจำลองเสมือน MMU มันถูกออกแบบมาเพื่อการพัฒนาพลังงานและการพัฒนาอิสระของฮาร์ดแวร์
อ้างถึงไดเรกทอรี /Documentation สำหรับข้อมูลเพิ่มเติมเช่นการรวบรวมการพอร์ต API ฯลฯ
ข้อเสนอแนะใด ๆ ยินดีต้อนรับสู่ [email protected] และแจ้งให้เราทราบหากคุณมีความสนใจในการย้ายไปยัง MCU ใหม่เพื่อที่ฉันจะได้ให้มือคุณ
git clone git://github.com/onkwon/yaos
รับหนึ่งจากที่นี่หากคุณยังไม่มีการติดตั้ง หรือคุณสามารถรวบรวมได้จากซอร์สโค้ดที่ใช้ความพยายามมากขึ้นซึ่งไม่แนะนำ แต่ก็ยังคุ้มค่าที่จะลอง
make clean
make stm32f1 (or specify your board. e.g. mango-z1)
make
make burn
บอร์ดที่รองรับในขณะนี้คือ:
- มะม่วง -Z1
- MyCortex-STM32F4
- Nrf52
- STM32F429I-DISCO
- STM32F469I-DISCO
- STM32-LCD
- UST-MPB-STM32F103
- STM32F1-MIN
ในกรณีที่ได้รับข้อความแสดงข้อผิดพลาดบางอย่างเช่น undefined reference to __aeabi_uidiv ให้ระบุเส้นทางห้องสมุดเมื่อคุณ make ในทางด้านล่าง:
make LD_LIBRARY_PATH=/usr/local/arm/lib/gcc/arm-none-eabi/4.9.2
เส้นทางขึ้นอยู่กับสภาพแวดล้อมการพัฒนาของคุณ
ให้ฉันยกตัวอย่างการกระพริบ LED ให้คุณได้ลิ้มรสว่ารหัสมีลักษณะอย่างไร
งานผู้ใช้จะถูกวางไว้ใต้ /งาน (เช่นงาน /my-task.c):
void main()
{
int fd, led = 0;
if ((fd = open("/dev/gpio20", O_WRONLY)) <= 0) {
printf("can not open, %xn", fd);
return;
}
while (1) {
write(fd, &led, 1);
led ^= 1;
sleep(1);
}
close(fd);
}
REGISTER_TASK(main, 0, DEFAULT_PRIORITY, STACK_SIZE_DEFAULT);
งานสองประเภทได้รับการจัดการ: งานปกติและแบบเรียลไทม์ ตัวกำหนดตารางเวลารอบสำหรับงานปกติในขณะที่กำหนดเวลาลำดับความสำคัญสำหรับงานเรียลไทม์ แต่ละงานจะได้รับความสำคัญซึ่งสามารถเปลี่ยนแปลงได้แบบไดนามิกด้วย set_task_pri() สำหรับงานเรียลไทม์งานลำดับความสำคัญที่สูงกว่ามักจะยึดถืองานลำดับความสำคัญที่ต่ำกว่าในขณะที่งานลำดับความสำคัญเดียวกันเกิดขึ้นภายใต้การกำหนดเวลารอบ ตัวกำหนดตารางเวลาสามารถหยุดเพื่อลดแม้กระทั่งค่าใช้จ่ายในการกำหนดเวลาในกรณีที่มีเวลาทำงานที่สำคัญ ในทางกลับกันงานปกติจะได้รับโอกาสในการดำเนินการโดย Simplified Fair Scheduler ซึ่งจะเลือกค่าขั้นต่ำของรันไทม์ขึ้นไปสำหรับงานถัดไปที่จะทำงาน
งานมักจะอยู่ในหนึ่งในห้ารัฐ: วิ่งหยุดรอนอนหลับหรือซอมบี้ และงานสามารถสร้างได้ทั้งแบบคงที่และแบบไดนามิกในเวลาทำงาน
ทรัพยากรระบบเข้าถึงได้โดยอินเทอร์เฟซการเรียกระบบเข้าสู่โหมด Privileged เนื่องจากงานผู้ใช้ทำงานในโหมดผู้ใช้ (ไม่ได้รับสิทธิ)
แนวคิดของระบบไฟล์เสมือน (VFS) ถูกนำมาใช้ Flash ROM แบบฝังตัวใน SOC สามารถติดตั้งเป็นระบบไฟล์รูท (EMBEDFs) ในขณะที่ RAMFs ติดตั้งเป็น devfs สำหรับโหนดอุปกรณ์
หน่วยความจำแฟลชว่างเปล่าคือการลงทะเบียนเป็น EMBEDF เพื่อให้ผู้ใช้สามารถใช้งานได้เช่นเดียวกับระบบไฟล์ปกติ
หน้าเป็นหน่วยการจัดการหน่วยความจำ แต่ตัวจัดการหน่วยความจำทางเลือกสามารถใช้ในระบบการขาดแคลนหน่วยความจำ
การจัดสรรบัดดี้และการจัดสรรตัวแรกจะถูกนำมาใช้
Softirqs จะยึดครองงานใด ๆ ยกเว้นการตอบสนองต่อการขัดจังหวะจริงเนื่องจากพวกเขาทำงานในลำดับความสำคัญสูง ในความเป็นจริง SoftirQ เป็นเพียงงานเคอร์เนลที่ทำงานโดยเปิดใช้งานการขัดจังหวะและสามารถนอนหลับได้ แต่มีความสำคัญสูงสุดในระหว่างการทำงาน
การซิงโครไนซ์ดั้งเดิมเช่น semaphore, spinlock ฯลฯ