เคอร์เนลหลายเธรดที่สร้างขึ้นในโหมดป้องกันสำหรับสถาปัตยกรรม x86
เคอร์เนลได้รับการพัฒนาโดยใช้คอมไพเลอร์ GCC Cross ที่สร้างขึ้นเองจากแหล่งที่มา
แมงป่องมีส่วนประกอบพื้นฐานเกือบทั้งหมดรวมอยู่ในเคอร์เนลเสาหินที่เป่าเต็มรูปแบบ
แมงป่องเป็นเคอร์เนลเสาหินที่ใช้แสดงให้เห็นว่าพฤติกรรมของเคอร์เนลและสามารถสร้างขึ้นได้อย่างไร
การอ้างอิงคงที่และกว้างขวางที่ใช้ในระหว่างการพัฒนาของแมงป่องคือ: https://wiki.osdev.org/main_page
ต่อไปนี้เป็นคุณลักษณะบางอย่างของแมงป่อง:
0x80 สำหรับกระบวนการอวกาศผู้ใช้และการสื่อสารเคอร์เนลคุณลักษณะทั้งหมดของเคอร์เนลอาจไม่ถูกจับที่นี่และสามารถปรับปรุงได้ตลอดเวลา แต่แอ็ทต์ข้างต้นจะยังคงเป็นคุณสมบัติหลัก
มีข้อกำหนดเบื้องต้นในการสร้างและทดสอบแมงป่อง
ก่อนที่จะสร้างเคอร์เนลและ bootloader เราต้องเตรียมสภาพแวดล้อมให้พร้อมด้วยการสร้าง cross-compiler จำเป็นต้องใช้คอมไพเลอร์ข้ามเนื่องจากโฮสต์ของคุณอาจมีสถาปัตยกรรมที่แตกต่างจากเป้าหมายที่เรากำลังใช้เคอร์เนล
ติดตั้งการพึ่งพา cross-compiler ด้วยคำสั่งต่อไปนี้:
sudo apt install build-essential bison flex libgmp3-dev libmpc-dev libmpfr-dev texinfo libisl-dev
ดาวน์โหลดซอร์สโค้ดสำหรับ bin utils และ GCC ลงในไดเรกทอรี $HOME/src โดยใช้ลิงก์ต่อไปนี้:
แยกทั้งสองดาวน์โหลดในไดเรกทอรี $HOME/src
ตอนนี้เรามาแปลงแหล่งที่มาเป็นไฟล์วัตถุคอมไพเลอร์สำหรับเป้าหมายของเรากันเถอะ
ก่อนอื่นต้องตั้งค่า vars env บางตัวเพื่อเปิดใช้งานการติดตั้งไบนารีที่รวบรวมได้ในตำแหน่งที่ถูกต้อง
export PREFIX="$HOME/opt/cross"
export TARGET=i686-elf
export PATH="$PREFIX/bin:$PATH"
เรียกใช้คำสั่งต่อไปนี้เพื่อสร้าง binutils อย่าลืมแทนที่ XYZ ด้วยเวอร์ชันของคุณเอง
cd $HOME/src
mkdir build-binutils
cd build-binutils
../binutils-x.y.z/configure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror
make
make install
เรียกใช้คำสั่งต่อไปนี้เพื่อสร้าง GCC อย่าลืมแทนที่ XYZ ด้วยเวอร์ชันของคุณเอง
cd $HOME/src
# The $PREFIX/bin dir _must_ be in the PATH. We did that above.
which -- $TARGET-as || echo $TARGET-as is not in the PATH
mkdir build-gcc
cd build-gcc
../gcc-x.y.z/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c,c++ --without-headers
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc
เมื่อขั้นตอนทั้งหมดข้างต้นเสร็จสมบูรณ์ให้ไปข้างหน้าและทดสอบว่าการสร้างและติดตั้งข้ามได้สำเร็จหรือไม่ด้วยคำสั่งต่อไปนี้:
$HOME/opt/cross/bin/$TARGET-gcc --version
ตอนนี้คอมไพเลอร์ข้ามของเราพร้อมแล้วเราก็พร้อมที่จะสร้างแมงป่องด้วย bootloader เรียกใช้สิ่งต่อไปนี้ที่รากของโครงสร้างโครงการ
./build.sh
หากการสร้างประสบความสำเร็จควรสร้างไบนารี 3 ตัวในไดเรกทอรี bin ที่รากของโครงการ
boot.binkernel.bin เคอร์เนลscorpion.bin เวลาในการเรียกใช้ Scorpion OS โดยใช้เอาต์พุตไบนารีที่สร้างขึ้นในส่วนก่อนหน้า เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัลเพื่อจำลองแมงป่องด้วย QEMU
qemu-system-i386 -hda ./bin/scorpion.bin
อีกทางเลือกหนึ่งคุณจะพบเครื่องที่บูตไปยังเชลล์ต่อไปนี้หากการทดสอบบนเครื่องกายภาพหากตั้งค่าอุปกรณ์ที่สามารถบู๊ตได้อย่างถูกต้องในเมนู BIOS

ควรเปิดใช้งานพรอมต์เชลล์ด้วยเวอร์ชันแมงป่องที่ด้านบนซ้าย ตอนนี้คุณสามารถเริ่มพิมพ์ที่เชลล์ โปรแกรมตัวอย่างที่เรียกว่า blank.elf ได้รับการสร้างและโหลดบนฮาร์ดไดรฟ์แมงป่องเพื่อให้สามารถเข้าถึงได้
โหลดโปรแกรมลงในหน่วยความจำโดยดำเนินการต่อไปนี้บนพรอมต์คำสั่ง SCORPION
> blank.elf
โปรแกรมสามารถโหลดได้ด้วยอาร์กิวเมนต์ซึ่งสามารถจัดการได้โดยกระบวนการผู้ใช้ที่ตามมาดังนี้:
> blank.elf 55 21 tree
ควรสร้างผลลัพธ์เช่นนี้ขึ้นอยู่กับว่าโปรแกรมนั้นโหลดโดยมีหรือไม่มีอาร์กิวเมนต์:
