LiteOS용 예제 프로그램
이 디렉터리에는 LiteOS와 함께 사용할 수 있는 여러 예제가 들어 있습니다(먼저 LiteOS를 설치하십시오. 설치 방법은 여기에 있습니다).
프로그램을 컴파일하십시오:
$ make
그런 다음 모든 .elf 파일을 SD 카드에 복사하십시오. SoC에
접속한 뒤(litex_term /dev/ttyUSBnnn), 프로그램이 있는지
확인하십시오:
liteOS> catalog
이제 프로그램을 실행할 수 있습니다(예: hello.elf):
liteOS> run hello.elf
다음 프로그램을 사용할 수 있습니다:
| 프로그램 | 설명 |
|---|---|
| hello | 가장 간단한 프로그램 |
| spirograph | 프레임버퍼에 움직이는 패턴을 그립니다 |
| ST_NICCC | AtariST 데모 포팅 버전 |
| tinyraytracer | Dmitry Sokolov의 tiny 레이트레이서 포트 |
| imgui_test | Dear Imgui용 테스트 프로그램 |
ST_NICCC를 실행하려면 scene1.dat를 SD 카드에 복사해야
합니다.
직접 프로그램 만들기
my_program.c 또는 my_program.cpp를 만들고
all: 타깃의 목록에 my_program.elf를 추가하기만
하면 됩니다.
사용할 수 있는 라이브러리가 여기에 있습니다.
동작 원리
링커 스크립트 linker.ld와 메모리 맵 regions.ld: 링커 스크립트는 매우 단순합니다. LiteX 링커 스크립트와 비슷하지만, 모든 것을
main_ram(SDRAM)에 배치한다는 점이 다릅니다. 메모리 맵은 FemtOS가 사용할 공간을 남겨 두기 위해main_ram을 SDRAM의 실제 주소에서 256KB 뒤에 선언합니다.C 런타임 crt0.S: 전역 심볼
_start를 선언하며, 이 심볼은 다음 작업을 수행합니다:- 컨텍스트를 저장합니다(snnn 레지스터를 제외한 모든 레지스터)
bss세그먼트를 0으로 초기화합니다
main을 호출합니다
- 컨텍스트를 복원합니다(저장된 레지스터)
- femtOS로 돌아갑니다
메모리 할당자 sbrk.c:
malloc()이 내부적으로 사용하는 저수준 시스템 콜을 구현합니다. 사실 이는 꽤 단순하며, 힙의 끝 위치만 추적하면 됩니다.