ดู https://github.com/zhengruohuang/toddler-ng สำหรับเด็กวัยหัดเดินรุ่นต่อไป!
เด็กวัยหัดเดินเดิมเป็นโครงการครึ่งฮอบบี้และการวิจัยครึ่งหนึ่งที่พัฒนาขึ้นในช่วงฤดูร้อนและฤดูหนาวเมื่อฉันอยู่ในวิทยาลัย เด็กวัยหัดเดินดั้งเดิมได้รับการออกแบบมาสำหรับระบบ IA32 หลายโปรเซสเซอร์ขนาดเล็ก คุณลักษณะที่โดดเด่นที่สุดคือเทคนิคการล็อคที่ใช้ในทางปฏิบัติที่ใช้สำหรับการซิงก์ อย่างไรก็ตามเด็กวัยหัดเดินเก่าได้รับการออกแบบมามากเกินไปสำหรับทั้งส่วนประกอบที่เกี่ยวข้องกับฮาร์ดแวร์และส่วนประกอบระบบปฏิบัติการปกติ จากนั้นในที่สุดมันก็ไม่สามารถทำได้เพื่อพัฒนาต่อไป เด็กวัยหัดเดินสุดท้ายสามารถสร้างและเรียกใช้กระบวนการและเธรดผู้ใช้รวมถึงการรับอินพุตแป้นพิมพ์แม้ว่าเชลล์จะไม่ถูกนำไปใช้หรือพอร์ต
ในทางกลับกันเด็กวัยหัดเดินใหม่ได้รับการออกแบบโดยมีเป้าหมายที่แตกต่างอย่างสิ้นเชิง Alghough มันยังคงเป็นโครงการงานอดิเรกมันมีจุดมุ่งหมายเพื่อให้ microkernel ที่ใช้งานได้อย่างสมบูรณ์และสภาพแวดล้อมระบบปฏิบัติการที่สมบูรณ์สำหรับสถาปัตยกรรมและแพลตฟอร์มที่หลากหลาย แนวคิดที่ปราศจากล็อคถูกทอดทิ้งเนื่องจากสร้างความซับซ้อนที่ไม่จำเป็นมากเกินไป
เด็กวัยหัดเดินมีระบบอาคารของตัวเองที่เขียนด้วย Python: Tmake TMake ดูแลการพึ่งพาไฟล์และจัดเตรียมชุดของชุดดั้งเดิมเช่น การรวบรวม ลิงก์ สร้าง และอื่น ๆ สคริปต์ TMake (เช่นใน Python) จากนั้นใช้ Primitives เพื่อสร้างขั้นตอนการสร้าง
Python เป็นสิ่งจำเป็นสำหรับเป้าหมายทั้งหมด จำเป็นต้องใช้ GCC และ binutils สำหรับสถาปัตยกรรมทั้งโฮสต์และเป้าหมาย NASM เป็นสิ่งจำเป็นสำหรับเป้าหมาย x86 (IA32 และ AMD64) ต้องใช้ตัวจำลองเริ่มต้น (QEMU/SIMH/SKI) หากคุณต้องการทดสอบเด็กวัยหัดเดิน
เมื่อติดตั้งแพ็คเกจทั้งหมดแล้วให้ดึงซอร์สโค้ด
git clone https://github.com/zhengruohuang/toddler.git
cd toddler พิมพ์ ./tmake build เพื่อสร้างเด็กวัยหัดเดิน เมื่อเสร็จแล้วจะสร้างภาพดิสก์ใน target/ ไดเรกทอรี หากมีการติดตั้ง QEMU สำหรับสถาปัตยกรรมเป้าหมายเพียงพิมพ์ ./tmake qemu เพื่อเริ่มต้น QEMU ด้วยพารามิเตอร์เริ่มต้น
สองขั้นตอนสามารถรวมกันได้โดยการพิมพ์ ./tmake all หรือเพียงแค่ ./tmake tmake
Tmake สนับสนุน การกระทำ ในการระบุการกระทำให้ใช้ ./tmake <actions> ตัวอย่างเช่น . ./tmake clean build จะทำความสะอาดวัตถุที่มีอยู่และไฟล์ไบนารีจากนั้นเริ่มสร้างใหม่
TMake รองรับหลายเป้าหมาย ในการสร้างเป้าหมายเฉพาะให้ใช้ ./tmake target=<arch-machine>[-suffix] โปรดทราบว่า TMAKE นั้นจำเป็นต้องมีฟิลด์ โค้ง และ เครื่องจักร และ คำต่อท้าย เป็นทางเลือก อย่างไรก็ตามการใช้งานจริงของเป้าหมายเฉพาะอาจกำหนดให้ผู้ใช้จัดหาค่าสำหรับ คำต่อท้าย
ตัวอย่างเช่น . ./tmake target=ia32-pc-bios จะสร้างเด็กวัยหัดเดินสำหรับระบบพีซี IA32 ที่ใช้ BIOS ./tmake target=armv7-rpi2 จะสร้างเด็กวัยหัดเดินสำหรับ Raspberry Pi 2
นอกจากนี้โปรดทราบว่าคุณไม่สามารถผสม โค้ง และฟิลด์ เครื่องจักร โดยพลการ ตัวอย่างเช่น target=ia32-rpi2 ไม่ถูกต้อง การรวมกันของฟิลด์ที่ไม่ถูกต้องอาจไม่สามารถรวบรวมหรือทำลายอุปกรณ์ของคุณได้
Hardware Abstraction Layer (HAL) จัดเตรียมสิ่งที่เป็นนามธรรมของแต่ละรุ่นโปรเซสเซอร์และอุปกรณ์ IO พื้นฐาน มันส่งออกชุดของฟังก์ชั่นและค่าคงที่ไปยังเคอร์เนล HAL ถูกแมปกับ 4MB สูงสุดของกระบวนการทั้งหมดรวมถึงกระบวนการเคอร์เนล
เคอร์เนลของเด็กวัยหัดเดินเป็นกระบวนการ ที่แท้จริง เคอร์เนลไม่ได้แมปกับพื้นที่ที่อยู่ของกระบวนการผู้ใช้ อย่างไรก็ตามเค้าโครงพื้นที่ที่อยู่เสมือนจริงของเคอร์เนลนั้นแตกต่างจากกระบวนการอื่นเล็กน้อย เคอร์เนลมีการทำแผนที่ แบบหนึ่งต่อหนึ่ง ด้วยขนาดเล็กของ HAL เป็นผลให้การจัดการหน่วยความจำทางกายภาพนั้นง่ายขึ้นและสะอาดกว่ามาก
แม้ว่าเด็กวัยหัดเดินเป็นระบบปฏิบัติการขนาดเล็ก แต่การเป็น เซิร์ฟเวอร์จำนวนมาก อาจไม่ใช่ความคิดที่ดี แทนฟังก์ชันระดับระบบจำนวนมากมีให้ในระบบเดียว - ระบบ กระบวนการของระบบใช้ Universal Resource Manager (URS), ผู้จัดการบัญชีผู้ใช้ (UAM) และระบบไฟล์หลายระบบ
กระบวนการไดรเวอร์มีไดรเวอร์อุปกรณ์ที่จำเป็นหลายอย่างรวมถึงคีย์บอร์ดคอนโซลและดิสก์
| สถาปัตยกรรม | ความกว้าง | เครื่องเป้าหมาย | สถานะ |
|---|---|---|---|
| IA32 | 32 | พีซีที่ใช้ NetBurst | ปัจจุบัน |
| armv7 | 32 | Raspberry Pi 2, Qemu Raspi2 | ปัจจุบัน |
| MIPS32 | 32 | ผู้สร้าง CI20, Qemu Malta | ปัจจุบัน |
| PPC32 | 32 | Mac Mini G4, Powermac G4, Qemu G3Beige, Qemu MAC99 | ปัจจุบัน |
| sparcv8 | 32 | QEMU SUM4M Sparcstation 10, Qemu Leon-3 | คล่องแคล่ว |
| RISCV32 | 32 | สไปค์ | วางแผน |
| M68K | 32 | QEMU MCF5208EVB | วางแผน |
| SH4 | 32 | Qemu Shix | วางแผน |
| ตึก | 32 | Simh Vax | วางแผน |
| OR1K | 32 | QEMU OR1K-SIM | วางแผน |
| AMD64 | 64 | พีซีที่ใช้ Skylake | วางแผน |
| armv8 | 64 | Raspberry Pi 3, Qemu Virt | คล่องแคล่ว |
| PPC64 | 64 | PowerMac G5, QEMU MAC99 | วางแผน |
| MIPS64 | 64 | Loongson 3 Desktop, Qemu Malta | ปัจจุบัน |
| sparcv9 | 64 | Qemu sun4u | อักษรย่อ |
| อัลฟ่า | 64 | Qemu Clipper | อักษรย่อ |
| RISCV64 | 64 | สไปค์ | วางแผน |
| S390 | 64 | QEMU S390X | วางแผน |
| IA64 | 64 | สกี | วางแผน |
| HPPA | 64 | HP 9000 PA-RISC Workstation, QEMU HPPA-Generic | วางแผน |