Rust의 계획 9
R9는 Rust에서 plan9 커널을 다시 구현한 것입니다. 이는 원본 Plan 9 소스 코드에서 영감을 얻었을 뿐만 아니라 다양한 방식으로 파생되었습니다.
우리는 커널을 빌드하기 위해 cargo
과 xtask
패턴을 사용합니다.
x86_64용 r9를 빌드하려면 편리한 위치에 git 저장소를 복제했다고 가정합니다. 그런 다음 최상위 디렉토리로 변경하고 cargo xtask build --arch x86-64
.
aarch64용으로 빌드하려면 cargo xtask build --arch aarch64
실행하십시오(현재 Raspberry Pi 3만 지원됨).
다른 유용한 xtask
하위 명령이 있습니다. 사용 가능한 항목을 확인하려면 cargo xtask help
실행하세요.
현재 r9는 자체 호스팅이 아닙니다.
화물 cargo xtask qemu
cargo xtask dist
llvm-objcopy
필요합니다. 이는 Rust 툴체인 경로에 있을 것으로 예상됩니다. 다음을 실행하여 설치할 수 있습니다.
rustup component add llvm-tools
No such file or directory (os error 2)
메시지가 표시되면 Rust 툴체인과 별도로 llvm
설치하고 다음을 설정하세요.
OBJCOPY=$(which llvm-objcopy) cargo xtask qemukvm
No such file or directory (os error 2)
메시지가 지속되면 qemu
또는 qemu-kvm
설치되어 있고 qemu-system-x86_64
바이너리가 경로(또는 aarch64의 경우 qemu-system-aarch64
)에 있는지 확인하세요.
R9는 지원되는 다양한 아키텍처에 대해 qemu를 사용하여 실행할 수 있습니다.
아치 | 플랫폼 | 명령줄 |
---|---|---|
아치64 | raspi3b | 화물 xtask qemu --arch aarch64 --verbose |
아치64 | raspi4b | 화물 xtask qemu --arch aarch64 --config raspi4b --verbose |
x86-64 | q35 | 화물 xtask qemu --arch x86-64 --verbose |
x86-64(kvm 포함) | q35 | 화물 xtask qemu --arch x86-64 --kvm --verbose |
위험 | 버트 | 화물 xtask qemu --arch riscv64 --verbose |
R9는 어느 정도 다음 하드웨어에서 실행되었습니다.
TFTP 서버를 설정할 수 있다고 가정하고(행운을 빌어요, 엄청나게 까다롭지만 dnsmasq는 가끔 작동할 수 있다는 점에서 가치가 있습니다) netboot 디렉터리의 위치를 가정하면 다음 명령을 사용하여 바이너리를 빌드하고 복사할 수 있습니다.
cargo xtask dist --arch aarch64 --verbose && cp target/aarch64-unknown-none-elf/debug/aarch64-qemu.gz ../netboot/kernel8.img
이렇게 하면 압축된 바이너리가 복사되므로 네트워크를 통해 복사하는 속도가 훨씬 빨라집니다.
Raspberry Pi 펌웨어는 커널보다 먼저 config.txt
로드합니다. 여기서는 무엇보다도 사용할 UART를 설정할 수 있습니다. miniuart를 사용하기 위해 다음 내용이 설정됩니다.
enable_uart=1
core_freq_min=500