LiteOS
LiteOS는 LiteX SoC를 위한 극도로 미니멀한 운영체제입니다. 명령어는 두 가지입니다:
catalog <dir>: SD 카드의 파일 목록을 표시합니다run <filename.elf>: 프로그램을 실행합니다
선택적으로 프레임버퍼와 ESP32를 켜고 끄는 명령어 두 가지를 추가로 사용할 수 있습니다:
esp32 <on|off>framebuffer <on|off>
1단계: 컴파일
$ make LITEX_DIR=<path where you synthesized LiteX>
LEARN_FPGA_DIR=<path where you installed learn-fpga> LITEX_PLATFORM=<platform>
(platform은 사용하는 FPGA 보드에 해당하며, 예를 들어 radiona_ulx3s일 수 있습니다.)
또는 Makefile을 편집하여 LITEX_DIR,
LEARN_FPGA_DIR, LITEX_PLATFORM을 직접 지정할
수도 있습니다.
모든 과정이 정상적으로 진행되면 boot.bin이
생성됩니다.
2단계: 설치
boot.bin을 FAT32로 포맷된 SD 카드에 복사하십시오. SD
카드를 FPGA 보드의 슬롯에 삽입하십시오.
3단계: 실행
보드를 재부팅하십시오. LiteX BIOS가 SD 카드에서
boot.bin을 자동으로 찾아 로드합니다.
litex_term /dev/ttyUSBnnn을 사용하여 접속하십시오. 여기서
nnn은 상황에 따라 다릅니다(대부분의 경우 0입니다). 모든
과정이 정상적으로 진행되었다면 LiteOS 프롬프트가 표시됩니다.
LiteOS>
이제 help를 입력하여 사용 가능한 명령어 목록을
확인하십시오. catalog와 run 외에 추가 명령어가
있을 수 있습니다:
- ULX3S를 사용하는 경우, 온보드 SoC를 켜고 끄는
esp32명령어가 있습니다. 이 명령어가 유용한 이유는 이 SoC에 MicroPython을 설치하여 Wi-Fi로 SD 카드에 파일을 전송할 수 있기 때문입니다(SD 카드를 빼서 파일을 복사한 뒤 다시 꽂는 것보다 편리하며, 이 작업을 여러 번 반복할 때 커넥터가 손상될 위험도 줄어듭니다). FPGA와 ESP32 중 한 번에 하나만 SD 카드에 접근할 수 있으므로 ESP32를 켜고 끄는 기능이 필요합니다.
동작 원리
LiteOS의 기본 아이디어는 가능한 한 적은 코드를 작성하면서 꼭 필요한 기능만 제공하는 것입니다. LiteX 라이브러리에는 필요한 것이 이미 거의 다 갖춰져 있습니다. 제가 직접 만들어야 했던, 빠져 있던 주요 구성 요소는 다음과 같습니다:
- ELF 형식용 로더입니다. 아주 간단한 로더를 여기에 작성해 두었습니다. 기술적인 세부 사항은 여기에 설명되어 있습니다. 그 결과물은 의존성이 없는 수백 줄 분량의 C 코드로, 정적 링크된 ELF를 직접 로드할 수 있습니다.
나머지는 다음과 같이 동작합니다.
Makefile: 제 모든 LiteX 소프트웨어 프로젝트가 포함하는 makefile.inc를 만들었습니다. 이 파일은 알맞은 컴파일 옵션을 선택하고, LiteX 라이브러리에서 의존성을 가져올 수 있습니다.
C 런타임(crt0.S): LiteX의 것을 그대로 재사용합니다.
링커 스크립트: 대부분 LiteX의 기본 링커 스크립트에서 복사했으며, 몇 가지 차이점이 있습니다. ROM과 SRAM은 사용하지 않으며, 모든 프로그램 세그먼트는 SDRAM으로 보냅니다. LiteX의 C 런타임(crt0.S)은 초기화된 변수를 ROM(_fdata_rom ... _edata_rom)에서 RAM(_fdata ... _edata)으로 복사합니다. 여기서는 그렇게 할 필요가 없으므로 해당 심볼을 모두 0으로 설정합니다(그러면 crt0.S의 해당 루프는 아무 일도 하지 않습니다).
명령줄: LiteX BIOS에는 이미 명령줄 편집, 히스토리, 자동 완성을 위한 훌륭한 시스템이 있으므로 이를 재사용합니다! 이를 위해 BIOS와 마찬가지로 링커 스크립트에 특별한
commands섹션을 선언해 두었습니다. 그러면define_command()매크로가 BIOS에서와 똑같이 동작하므로 이를 그대로 재사용할 수 있습니다!새 명령: builtins.c 파일에 선언되어 있습니다. 프레임버퍼와 ESP32를 켜고 끄는 선택적 명령이 있으며, SD 카드의 파일 목록을 보여 주는
catalog와 SD 카드에 저장된 ELF를 실행하는run, 이렇게 두 명령이 있습니다.