Googleのリリースしたセキュリティを重視したオペレーティングシステムのKataOS、RISC-Vも視野に入れているということで面白そうなのでチェックしてみることにした。
https://opensource.googleblog.com/2022/10/announcing-kataos-and-sparrow.html
まず、KataOSというのは「安全なオペレーティング システム用のいくつかのコンポーネントのオープンソース化した部分」と考えることができるようだ。
マイクロカーネルというのはあまり詳しくないのでよくわからないが、sel4というオープンソースのRealTime OSをベースにしているようだ。
sel4 CAmkESフレームワークというのは、"component architecture for microkernel-based embedded systems"の略で、software development and runtime framework ということらしい。詳しいことはよくわからない。具体的にどういうことができるんだろう。
https://docs.sel4.systems/projects/camkes/
この時点で、sel4とCAmkES、さらにKataOSとsel4の関係がよくわからなくなってきた。さらにKataOS自体はRustで実装されているということだが、これはsel4とどのように結びつくのだろう?
さらにKataOSのリファレンス実装としてSparrowというものも含まれている。Sparrowの立ち位置は、KataOSに加えてハードウェアのプラットフォームを追加している。 Sparrowには、KataOSとRISC-VアーキテクチャのOpenTitanが含まれている。しかし、今回のリリースではQEMUを使用したシミュレーションで実行されるAArch64をターゲットとしているようだ。
repo init -u https://github.com/AmbiML/sparrow-manifest -m camkes-manifest.xml repo sync -j$(nproc)
この時点でRustをインストールする必要があると告げられた。そういえばインストールしていなかった。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source "$HOME/.cargo/env" rustup toolchain add nightly-2021-11-05 rustup target add --toolchain nightly-2021-11-05-x86_64-unknown-linux-gnu aarch64-unknown-none # なぜかHaskellも必要であった sudo apt install haskell-stack
cd sparrow
scripts/build-sparrow.sh aarch64
つぎにPythonのもろもろのライブラリが必要なようだ。エラーメッセージに従ってひたすらpipでインストールした。
最初にダウンロードしたものは、何かといろいろ詰まってしまった。一度ディレクトリを削除して、もう一度repo
コマンドからやり直すとうまくいったようだ。
Compiling allocator v0.1.0 (/home/msyksphinz/work/kataos/sparrow/projects/kata/apps/system/components/kata-os-common/src/allocator) Compiling toml v0.5.9 Compiling serde_yaml v0.8.26 Compiling cargo_toml v0.10.3 Compiling sel4-config v0.1.0 (/home/msyksphinz/work/kataos/sparrow/projects/kata/apps/system/components/kata-os-common/src/sel4-config) Compiling sel4-sys v0.1.0 (/home/msyksphinz/work/kataos/sparrow/projects/kata/apps/system/components/kata-os-common/src/sel4-sys) Compiling capdl v0.1.0 (/home/msyksphinz/work/kataos/sparrow/projects/kata/apps/system/components/kata-os-common/src/capdl) Compiling model v0.1.0 (/home/msyksphinz/work/kataos/sparrow/projects/kata/apps/system/components/kata-os-common/src/model) Compiling kata-os-rootserver v0.1.0 (/home/msyksphinz/work/kataos/sparrow/projects/capdl/kata-os-rootserver) Compiling kata-os-common v0.1.0 (/home/msyksphinz/work/kataos/sparrow/projects/kata/apps/system/components/kata-os-common) Finished dev [unoptimized + debuginfo] target(s) in 38.24s [291/291] Generating images/capdl-loader-image-arm-bcm2837 To run the simulator use: (cd build-aarch64 && ./simulate -M raspi3b)
なんとなく動いた気がする。これは何かの計算をしている。
ms-x1carbon:build-aarch64 msyksphinz$ ./simulate -M raspi3b ./simulate: qemu-system-aarch64 -machine raspi3b -nographic -serial null -serial mon:stdio -m size=1024M -kernel images/capdl-loader-image-arm-bcm2837 ELF-loader started on CPU: ARM Ltd. Cortex-A53 r0p4 paddr=[7cd000..ce90ff] No DTB passed in from boot loader. Looking for DTB in CPIO archive...found at 8c39a8. Loaded DTB from 8c39a8. paddr=[23c000..23ffff] ELF-loading image 'kernel' to 0 paddr=[0..23bfff] vaddr=[ffffff8000000000..ffffff800023bfff] virt_entry=ffffff8000000000 ELF-loading image 'capdl-loader' to 240000 paddr=[240000..3d0fff] vaddr=[400000..590fff] virt_entry=4009e8 Enabling MMU and paging Jumping to kernel-image entry point... Warning: gpt_cntfrq 62500000, expected 19200000 Bootstrapping kernel Booting all finished, dropped to user space kata_os_rootserver::Bootinfo: (482, 131072) empty slots 1 nodes (14, 72) untyped 131072 cnode slots kata_os_rootserver::Model: 675 objects 1 irqs 0 untypeds 1 asids kata_os_rootserver::capDL spec: 0.13 Mbytes kata_os_rootserver::CAmkES components: 0.35 Mbytes kata_os_rootserver::Rootserver executable: 1.08 Mbytes <<seL4(CPU 0) [decodeARMFrameInvocation/2137 T0xffffff80003d6400 "rootserver" @43e2cc]: ARMPageMap: Attempting to remap a frame that does not belong to the passed address space>> client: what's the answer to 342 + 74 + 283 + 37 + 534 ? adder: Adding 342 adder: Adding 74 adder: Adding 283 adder: Adding 37 adder: Adding 534 client: result was 1270