แผน 9 ในรัส
R9 เป็นการปรับใช้เคอร์เนล plan9 ใน Rust มันไม่เพียงแต่ได้รับแรงบันดาลใจเท่านั้น แต่ยังได้มาจากซอร์สโค้ด Plan 9 ดั้งเดิมในหลาย ๆ ด้าน
เราใช้ cargo
และรูปแบบ xtask
เพื่อสร้างเคอร์เนล
หากต้องการสร้าง r9 สำหรับ x86_64 เราถือว่าคุณได้โคลนพื้นที่เก็บข้อมูล git ไว้ที่ใดที่หนึ่งที่สะดวกแล้ว จากนั้นเพียงแค่เปลี่ยนเป็นไดเร็กทอรีระดับบนสุดและ cargo xtask build --arch x86-64
หากต้องการสร้างสำหรับ aarch64 ให้รัน cargo xtask build --arch aarch64
(ปัจจุบันรองรับเฉพาะ Raspberry Pi 3 เท่านั้น)
มีคำสั่งย่อย xtask
ที่มีประโยชน์อื่นๆ; run cargo xtask help
ดูว่ามีอะไรบ้าง
ขณะนี้ r9 ไม่ใช่การโฮสต์ด้วยตนเอง
cargo xtask dist
ซึ่ง cargo xtask qemu
ขึ้นอยู่กับนั้น ต้องใช้ llvm-objcopy
สิ่งนี้คาดว่าจะอยู่ในเส้นทาง toolchain ที่เป็นสนิม คุณสามารถติดตั้งได้โดยการรัน:
rustup component add llvm-tools
หากคุณได้รับข้อความ No such file or directory (os error 2)
ให้ติดตั้ง llvm
แยกจากrust toolchain และตั้งค่า:
OBJCOPY=$(which llvm-objcopy) cargo xtask qemukvm
หาก No such file or directory (os error 2)
ยังคงอยู่ ให้ตรวจสอบเพื่อให้แน่ใจว่ามีการติดตั้ง qemu
หรือ qemu-kvm
และไบนารี qemu-system-x86_64
อยู่ในพาธของคุณ (หรือ qemu-system-aarch64
ในกรณีของ aarch64)
R9 สามารถรันได้โดยใช้ qemu สำหรับสถาปัตยกรรมที่รองรับต่างๆ:
โค้ง | แพลตฟอร์ม | บรรทัดคำสั่ง |
---|---|---|
อาร์ค64 | ราสปิ3บี | สินค้า xtask qemu --arch aarch64 --verbose |
อาร์ค64 | ราสปิ4บี | สินค้า xtask qemu --arch aarch64 --config raspi4b --verbose |
x86-64 | คำถามที่ 35 | สินค้า xtask qemu --arch x86-64 --verbose |
x86-64 (พร้อม kvm) | คำถามที่ 35 | สินค้า 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