

นี่คือซีรี่ส์การสอนสำหรับนักพัฒนา OS งานอดิเรกที่ยังใหม่ต่อสถาปัตยกรรม ARMV8-A 64 บิตของ ARM บทช่วยสอนจะให้ทัวร์ทีละขั้นตอนของวิธีการเขียน kernel ระบบปฏิบัติการเสาหินสำหรับ embedded system ตั้งแต่เริ่มต้น พวกเขาครอบคลุมการใช้งานระบบปฏิบัติการทั่วไปเช่นการเขียนลงในคอนโซลอนุกรมตั้งค่าหน่วยความจำเสมือนจริงและการจัดการข้อยกเว้น HW ทั้งหมดในขณะที่ใช้ประโยชน์จากคุณสมบัติที่เป็นเอกลักษณ์ของ Rust เพื่อให้ความปลอดภัยและความเร็ว
มีความสุข!
ขอแสดงความนับถือ
Andre (@Andre-Richter)
PS: สำหรับภาษาอื่น ๆ โปรดระวังไฟล์ readme ทางเลือก ตัวอย่างเช่น README.CN.md หรือ README.ES.md ขอบคุณมากสำหรับนักแปลของเรา?.
kernel โลนที่สามารถบูตได้README แต่ละบทจะมี tl;dr ส่วนภาพรวมโดยย่อของการเพิ่มเติมและแสดงซอร์สโค้ด diff ไปยังบทช่วยสอนก่อนหน้าเพื่อให้คุณสามารถตรวจสอบการเปลี่ยนแปลง/เพิ่มเติมได้อย่างสะดวกtl;dr แผนระยะยาวคือบทช่วยสอนทั้งหมดได้รับข้อความเต็ม แต่สำหรับตอนนี้นี่เป็นเอกสิทธิ์ของบทช่วยสอนที่ฉันคิดว่า tl;dr และ diff ไม่เพียงพอที่จะได้รับความคิดQEMUUARTmake doc ในแต่ละบทช่วยสอน มันช่วยให้คุณเรียกดูรหัสที่บันทึกไว้อย่างกว้างขวางในวิธีที่สะดวกmake doc 
บทช่วยสอนมีการกำหนดเป้าหมายเป็นหลักในการแจกแจงแบบ Linux สิ่งส่วนใหญ่จะทำงานบน MacOS แต่นี่เป็นเพียง การทดลอง
ติดตั้งเครื่องยนต์ Docker
( Linux เท่านั้น ) ตรวจสอบให้แน่ใจว่าบัญชีผู้ใช้ของคุณอยู่ในกลุ่ม Docker
เตรียมเครื่องมือที่ Rust ส่วนใหญ่จะได้รับการจัดการในการใช้งานครั้งแรกผ่านไฟล์ Rust-toolchain.toml สิ่งที่เหลือให้เราทำคือ:
หากคุณติดตั้ง Rust เวอร์ชันแล้ว:
cargo install cargo-binutils rustfiltหากคุณต้องการติดตั้งสนิมตั้งแต่เริ่มต้น:
curl --proto ' =https ' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME /.cargo/env
cargo install cargo-binutils rustfilt ในกรณีที่คุณใช้ Visual Studio Code ฉันขอแนะนำให้ติดตั้งส่วนต่อขยายของ Rust Analyzer
( MacOS เท่านั้น ) ติดตั้งอัญมณี Ruby ตัว
นี่คือการทดสอบครั้งล่าสุดโดยผู้เขียนที่มี Ruby เวอร์ชัน 3.0.2 บน macOS Monterey หากคุณใช้ rbenv .ruby-version ที่เกี่ยวข้องจะมีอยู่แล้ว หากคุณไม่เคยได้ยิน rbenv ลองใช้คู่มือเล็ก ๆ นี้
เรียกใช้สิ่งนี้ในโฟลเดอร์รูทที่เก็บ:
bundle config set --local path ' .vendor/bundle '
bundle config set --local without ' development '
bundle install ซีรี่ส์นี้พยายามให้ความสำคัญกับความเป็นมิตรของผู้ใช้ ดังนั้นจึงมีความพยายามในการกำจัดความเจ็บปวดที่ใหญ่ที่สุดในการพัฒนาที่ฝังตัวให้มากที่สุดเท่าที่จะทำได้: Toolchain hassle
Rust เองกำลังช่วยเหลือมากในเรื่องนั้นเพราะมันมีการสนับสนุนในตัวสำหรับการรวบรวมข้าม ทุกสิ่งที่เราต้องการสำหรับการเปรียบเทียบข้ามจากโฮสต์ x86 ไปยังสถาปัตยกรรม AArch64 ของ Raspberry Pi จะถูกติดตั้งโดย rustup โดยอัตโนมัติ อย่างไรก็ตามนอกเหนือจากคอมไพเลอร์สนิมเราจะใช้เครื่องมือเพิ่มเติม ท่ามกลางคนอื่น ๆ :
QEMU เพื่อเลียนแบบเคอร์เนลของเราในระบบโฮสต์Minipush เพื่อโหลดเคอร์เนลลงบน Raspberry Pi ตามความต้องการเหนือ UARTOpenOCD และ GDB สำหรับการดีบักในเป้าหมายมีหลายสิ่งที่อาจผิดพลาดในขณะที่การติดตั้งและ/หรือรวบรวมเวอร์ชันที่ถูกต้องของเครื่องมือแต่ละตัวบนเครื่องโฮสต์ของคุณ ตัวอย่างเช่นการกระจายของคุณอาจไม่ได้ให้เวอร์ชันล่าสุดที่จำเป็น หรือคุณขาดการพึ่งพาที่ยากลำบากสำหรับการรวบรวมเครื่องมือเหล่านี้อย่างใดอย่างหนึ่ง
นี่คือเหตุผลที่เราจะใช้ประโยชน์จากนักเทียบท่าทุกครั้งที่ทำได้ เรากำลังจัดหาคอนเทนเนอร์ประกอบที่มีเครื่องมือที่จำเป็นหรือการพึ่งพาทั้งหมดที่ติดตั้งไว้ล่วงหน้าและจะถูกดึงในอัตโนมัติเมื่อจำเป็น หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ Docker และ Peek ที่คอนเทนเนอร์ที่ให้ไว้โปรดดูที่โฟลเดอร์ Docker ของที่เก็บ
เนื่องจากเคอร์เนลที่พัฒนาขึ้นในบทช่วยสอนทำงานบนฮาร์ดแวร์จริงขอแนะนำให้ใช้สายเคเบิลอนุกรม USB เพื่อรับประสบการณ์เต็มรูปแบบ
CP2102GND และ GPIO PINS 14/15 ดังที่แสดงด้านล่างchainloader ที่เรียกว่าซึ่งจะเป็นไฟล์สุดท้ายที่คุณต้องคัดลอกด้วยตนเองบนการ์ด SD สักพัก มันจะช่วยให้คุณสามารถโหลดเมล็ดการสอนในระหว่างการบูตตามความต้องการของ UART 
บทช่วยสอนดั้งเดิมเริ่มต้นจากการสอนที่ยอดเยี่ยมของ Zoltan Baldaszti เกี่ยวกับการเขียนโปรแกรมโลหะเปลือยบน RPI3 ใน C ขอบคุณที่ให้ฉันเริ่มต้น!
ได้รับใบอนุญาตภายใต้
ตามตัวเลือกของคุณ
หากคุณไม่ได้ระบุอย่างชัดเจนการบริจาคใด ๆ ที่ส่งโดยเจตนาเพื่อรวมไว้ในงานโดยคุณตามที่กำหนดไว้ในใบอนุญาต Apache-2.0 จะได้รับใบอนุญาตคู่ดังกล่าวข้างต้นโดยไม่มีข้อกำหนดหรือเงื่อนไขเพิ่มเติมใด ๆ