同じOSでどのデバイスでも動かせます。ArduinoからPCまで全て1つのOSです。
OSはカスタムされるべきです。OSは最小限のエンジンのみを提供し,基本的に機能は提供しません。 全ての機能はアプリによって動作します。OSは待機とアプリ起動のみをboot.txt形式で実行します。 GUI描画,ドライバすらも全てアプリで機能します。OSのAPIを使用するのではなく,APIのようにアプリを使用します。OSは常にクリーンかつ最小限の機能を提供するだけに過ぎません。
OS本体は boot.txt 起動テキストを読み,exec / spawn / wait だけを実行します。
アプリはCで書かれ,ターゲットごとにネイティブオブジェクトとしてリンクされます。
現在はESP32-C3,S3,x86-BIOS,x86_64-UEFI,AArch64-UEFIで動作を確認しています。
- Arduino Uno:
hal/arduino/xiaoOS/xiaoOS.ino - ESP32-C3:
hal/esp32c3/xiaoOS/xiaoOS.ino - x86 BIOS:
build/bios/xiao-bios.img - x86_64 UEFI:
build/uefi/BOOTX64.EFI - AArch64 UEFI:
build/arm64/BOOTAA64.EFI
ArduinoにはUEFI/BIOSがないため,Arduinoではreset後にスケッチが直接 xiao_start() を呼びます。
PCではBIOS boot sectorまたはUEFI applicationが同じ xiao_start() を呼びます。
つまり「同じOS」とは,同じcore,同じapp API,同じboot.txt実行モデルを共有するという意味です。
./32.sh: x86 BIOS。BIOS版は確認しやすさ優先で-nographic起動です。./64.sh: x86_64 UEFI。QEMU画面にOS出力します。./arm.sh: AArch64 UEFI。QEMU virt向けにUSB/virtio keyboardを明示しています。./rp.sh: Raspberry Pi系プロファイル(QEMU raspi3b, Pi2クラス想定)で起動します。
./64.shはQEMU_EFI_CODEを優先し,見つからない場合はOVMF_CODE.fd/edk2-x86_64-code.fdを主要ディレクトリから自動探索します。./arm.shと./rp.shはQEMU_ACCEL未指定時,Apple Silicon macOSはhvf,Linux arm64/aarch64 で/dev/kvmがあればkvm,それ以外はtcgを使います。QEMU_CPU未指定時,kvm/hvfではhost,tcgではmaxを使います(-cpu hostエラー回避)。- AArch64 UEFIは
QEMU_EFI_CODE(またはRPI_EFI_CODE)で明示できます。自動探索はQEMU_EFI.fd/AAVMF_CODE.fd/edk2-aarch64-code.fdを対象にします。 - ESP32書き込みは
./esp32c3.sh [compile|upload|monitor|upload-monitor]。Linuxでは/dev/ttyUSB*/dev/ttyACM*/dev/serial/by-id/*を自動探索します。