YaOS adalah sistem operasi tertanam untuk perangkat Internet of Things (IoT), khususnya untuk prosesor inti tunggal tanpa virtualisasi MMU. Ini dirancang untuk efisiensi energi dan pengembangan independen perangkat keras.
Lihat /Documentation Untuk informasi lebih lanjut seperti menyusun, porting, API, dll.
Umpan balik apa pun dipersilakan ke [email protected] . Dan beri tahu saya jika ada di antara Anda yang tertarik untuk porting ke MCU baru sehingga saya dapat membantu Anda.
git clone git://github.com/onkwon/yaos
Dapatkan satu dari sini jika Anda belum menginstal satu. Atau Anda dapat mengkompilasinya dari kode sumber yang lebih berupaya, yang tidak disarankan tetapi masih layak dicoba.
make clean
make stm32f1 (or specify your board. e.g. mango-z1)
make
make burn
Papan yang didukung saat ini adalah:
- Mangga-Z1
- mycortex-stm32f4
- NRF52
- STM32F429I-DISCO
- STM32F469I-DISCO
- STM32-LCD
- UST-MPB-STM32F103
- STM32F1-min
Dalam hal mendapatkan pesan kesalahan, sesuatu seperti undefined reference to __aeabi_uidiv , tentukan jalur perpustakaan saat Anda make di bawah:
make LD_LIBRARY_PATH=/usr/local/arm/lib/gcc/arm-none-eabi/4.9.2
Jalan ini tergantung pada lingkungan pengembangan Anda.
Izinkan saya memberi contoh mengedipkan LED agar Anda merasakan bagaimana kodenya.
Tugas pengguna akan ditempatkan di bawah /tugas (misalnya tugas /my-first-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);
Dua jenis tugas ditangani: tugas normal dan real time. Penjadwal Round-Robin untuk tugas normal sementara Prioritas Penjadwal untuk tugas waktu nyata. Setiap tugas diberikan prioritas yang dapat diubah secara dinamis dengan set_task_pri() . Untuk tugas waktu nyata, tugas prioritas yang lebih tinggi selalu mendahului tugas prioritas yang lebih rendah sementara tugas prioritas yang sama dilakukan pada gilirannya di bawah penjadwalan round-robin. Penjadwal dapat dihentikan untuk mengurangi bahkan overhead penjadwalan jika terjadi tugas kritis waktu. Di sisi lain tugas normal mendapatkan kesempatan untuk dijalankan dengan penjadwal wajar yang disederhanakan, yang memilih nilai minimum runtime hingga tugas berikutnya untuk dijalankan.
Tugas selalu ada di salah satu dari lima negara bagian: berlari, berhenti, menunggu, tidur, atau zombie. Dan tugas dapat dibuat secara statis dan dinamis saat run-time.
Sumber daya sistem diakses oleh antarmuka panggilan sistem yang memasuki mode istimewa sebagai tugas pengguna yang dijalankan dalam mode pengguna (tidak beruntung).
Konsep Sistem File Virtual (VFS) diimplementasikan. ROM flash tertanam di SOC dapat dipasang sebagai sistem file root (embedfs) sementara RAMFS dipasang sebagai devfs untuk simpul perangkat.
Memori flash kosong adalah registerd sebagai embedfs sehingga pengguna dapat menggunakannya seperti sistem file normal.
Halaman adalah satuan manajemen memori tetapi manajer memori alternatif dapat digunakan dalam sistem kekurangan memori seperti itu.
Buddy Alocator dan Allocator First-Fit diimplementasikan.
Softirq akan mendahului pekerjaan apa pun kecuali respons terhadap interupsi nyata saat mereka berjalan pada prioritas tinggi. Faktanya Softirq hanyalah tugas kernel yang berjalan dengan interupsi yang diaktifkan dan dapat tidur tetapi memiliki prioritas tertinggi di antara tugas yang berjalan.
Sinkronisasi primitif seperti semaphore, spinlock, dll.