Yaos는 IoT (Internet of Things) 장치, 특히 MMU 가상화가없는 단일 코어 프로세서 용 내장 운영 체제입니다. 에너지 효율과 하드웨어 독립 개발을 위해 설계되었습니다.
컴파일, 포팅, API 등과 같은 자세한 내용은 /Documentation 디렉토리를 참조하십시오.
모든 피드백은 [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- 디스코
- 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-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);
정상 및 실시간 작업의 두 가지 유형의 작업이 처리됩니다. 실시간 작업의 우선 순위 스케줄러 인 일반 작업에 대한 라운드 로빈 스케줄러. 각 작업에는 set_task_pri() 사용하여 동적으로 변경할 수있는 우선 순위가 주어집니다. 실시간 작업의 경우 더 높은 우선 순위 작업은 항상 우선 순위가 낮은 작업을 선점하지만 동일한 우선 순위 작업은 라운드 로빈 스케줄링에서 차례로 발생합니다. 시간이 치명적인 작업의 경우 스케줄링 오버 헤드조차 줄이기 위해 스케줄러를 중지 할 수 있습니다. 반면에 일반적인 작업은 단순화 된 공정한 스케줄러로 실행할 수있는 기회를 얻습니다. 이는 다음 작업이 실행될 수있는 최소 런타임 값을 선택합니다.
작업은 항상 달리기, 중지, 대기, 수면 또는 좀비의 5 개 주 중 하나에 있습니다. 그리고 런타임에 정적으로나 동적으로 작업을 만들 수 있습니다.
시스템 리소스는 사용자 작업이 사용자 (비정규) 모드에서 실행될 때 권한이있는 모드로 들어가는 시스템 호출 인터페이스에 의해 액세스됩니다.
가상 파일 시스템 (VFS)의 개념이 구현됩니다. SOC의 내장 플래시 ROM은 루트 파일 시스템 (EMBEDF)으로 장착 할 수 있으며 RAMFS는 장치 노드의 DEVF로 장착됩니다.
빈 플래시 메모리는 embedf로 등록되어 사용자가 일반 파일 시스템처럼 사용할 수 있습니다.
페이지는 메모리 관리 단위이지만 이러한 메모리 시스템 부족 시스템에서 대체 메모리 관리자를 사용할 수 있습니다.
Buddy Allocator 및 First-Fit Allocator가 구현됩니다.
SoftIRQ는 우선 순위가 높은 실제 인터럽트에 대한 응답을 제외하고 모든 작업을 선점합니다. 실제로 SoftIRQ는 인터럽트가 활성화 된 커널 작업 일뿐 아니라 잠을 잘 수 있지만 실행중인 작업 중에서 가장 높은 우선 순위를 갖습니다.
세마포어, 스핀 락 등과 같은 동기화 프리미티브