Linux บน 286?


15

ฉันไม่ได้เป็นเจ้าของ 286 หรือฉันตั้งใจที่จะใช้ Linux กับเครื่องหนึ่ง อย่างไรก็ตามตั้งแต่ 286 มีโหมดป้องกันเหตุใดจึงมักระบุว่า Linux ต้องการ CPU 386 หรือสูงกว่า

จากhttp://tuxmobil.org/286_mobile.htmlดูเหมือนว่ารุ่น ELKS ของ Linux สามารถทำงานบน 286 ได้ถูกต้องหรือไม่ มีการแก้ไขอะไรบ้าง (ถ้ามี) เพื่อให้เคอร์เนลทำงานบน CPU 286

ตอนนี้เห็นได้ชัดว่าฉันเข้าใจว่าเคอร์เนลที่รวบรวมสำหรับ 386 ไม่สามารถดำเนินการกับ 286 CPU ซึ่งเป็น 16 บิต ดังนั้นคำถามของฉันคือทำไมเคอร์เนล Linux มาตรฐานไม่สามารถคอมไพล์สำหรับ 286 และดำเนินการกับ 286 ได้หรือไม่ Linux ต้องการฮาร์ดแวร์ VM86 หรือไม่


6
16 บิตเป็น overkill 8 บิตนั้นเพียงพอสำหรับการใช้งานกับ Linux ดูโครงการของ Dmitry Grinberg
— Marco


Minix รันบน 8086 (8 บิต, 128KiB RAM IIRC) Xenix ของ Microsoft ทำงานบน 80286 วิญญาณที่เสื่อมทรามบางคนพยายามที่จะใช้ Linux เป็น 8086 เช่นกัน (ด้วยความสำเร็จ) แต่ไม่ "ประสบการณ์ Linux เต็มรูปแบบ" จะไม่สามารถทำได้บนเครื่องที่มีข้อ จำกัด
— vonbrand

คุณสามารถ shoehorn Linux เพื่อทำงานบนอุปกรณ์ที่ จำกัด มาก แต่นี่จะไม่เป็นประโยชน์อย่างมากกับเครื่องเดสก์ทอปเช่น เว้นแต่คุณจะระบุเป้าหมายของคุณมันก็ยากที่จะบอกได้ว่า 'Linux on 286' มีประโยชน์สำหรับคุณหรือไม่
— 9000

คำตอบ:


4

โหมดป้องกัน 286 (PM) นั้นแตกต่างกับ 386 ข้อเสนอ คิดว่า 286 PM เป็นต้นแบบซึ่งมีข้อบกพร่องมากมายจนแทบไม่มีใครใช้เลยและสิ่งทั้งหมดได้รับการออกแบบใหม่ทั้งหมดตั้งแต่ต้นจนจบสำหรับ 386

มันไม่ได้ใช้หน่วยความจำแบบแบนมันใช้โมเดลที่แบ่งกลุ่มเช่นโหมดจริงซึ่งหมายความว่าคุณต้องกระโดดผ่านห่วงเพื่อเข้าถึงหน่วยความจำในบล็อกที่มีขนาดใหญ่กว่า 64kB ในแต่ละครั้ง

มันเข้ากันไม่ได้กับโปรแกรม (MS-DOS) ทั้งหมดที่มีอยู่ในเวลานั้นดังนั้นเมื่อคุณอยู่ในช่วง PM คุณจะไม่สามารถใช้โปรแกรมใด ๆ ที่คุณคุ้นเคย

คุณไม่สามารถออกจากโหมดป้องกันได้อีกจนกว่าคุณจะรีบูตเครื่อง PC ดังนั้นผู้ผลิตจึงคิดวิธีแก้ปัญหาอย่างเช่นการตั้งค่าสถานะใน RAM จากนั้นจึงเขียนค่าเวทย์มนตร์ไปที่คอนโทรลเลอร์ของแป้นพิมพ์ซึ่งจะสะบัดหมุดรีเซ็ตบน CPU เครื่อง สิ่งแรกที่ BIOS จะทำคือตรวจจับการตั้งค่าสถานะก่อนหน้านี้จากนั้นมันจะข้ามกลับไปที่โปรแกรมต้นฉบับแทนที่จะเรียกใช้รูทีน POST ทำให้โปรแกรมต้นฉบับสามารถทำงานต่อได้โดยมี "ออก" PM

นั่นหมายความว่าการใช้ 286 PM ทำให้คุณไม่สามารถเรียกใช้โปรแกรม DOS ปกติโดยไม่ต้องใช้กลอุบายจำนวนมาก ในช่วงเวลาที่มีโปรแกรม DOS เท่านั้นมันไม่คุ้มค่ากับความพยายามในการใช้ PM เลย

ดังนั้นมันจึงมีความซับซ้อนในการทำงานกับ 286 PM มากกว่าแค่อยู่โดยปราศจากมันและพึ่งพา EMS และ XMS เพื่อเข้าถึงหน่วยความจำเสริม เมนบอร์ดจำนวน 286 ตัวรองรับชิปเซ็ตสำหรับ EMS เพื่อให้คุณสามารถใช้หน่วยความจำระบบเพิ่มเติมทั้งหมดโดยไม่ต้องใช้ PM

Intel ยอมรับข้อบกพร่องเหล่านี้และผลิต PM ใหม่ที่แตกต่างอย่างสิ้นเชิงใน 386 รุ่นหน่วยความจำแบบแบนทำให้การเข้าถึงหน่วยความจำในกลุ่มสูงถึง 4GB ง่าย CPU สามารถเข้าและออกจาก PM พร้อมกับคำแนะนำสองสามข้อดังนั้นจึงไม่จำเป็นต้องมีโปรโตคอลการบูตเครื่องใหม่อีกครั้ง VM86 หมายความว่าส่วนใหญ่เวลาที่คุณไม่จำเป็นต้องออกจาก PM คุณสามารถเรียกใช้โปรแกรม DOS ในขณะที่ยังอยู่ใน PM

การปรับปรุงทั้งหมดเหล่านี้หมายความว่า 386 PM ไม่เพียง แต่ทำงานได้มากขึ้น แต่เข้ากันได้ดีขึ้นเช่นกัน

สิ่งเดียวที่เหมือนกันระหว่างโหมดการป้องกัน 286 และ 386 คือชื่อ นี่คือสาเหตุที่ระบบปฏิบัติการ PM มักจะ 386 หรือใหม่กว่า การเพิ่มการสนับสนุนสำหรับ 286 PM จะเป็นความพยายามอิสระอย่างสมบูรณ์โดยมีรหัสน้อยหรือไม่มีเลยที่สามารถแชร์กับ 386 PM ที่แตกต่างกันโดยสิ้นเชิง

ในทางตรงกันข้าม 386 PM ทำงานในลักษณะเดียวกันจนถึงซีพียู 32 บิตสุดท้ายและยิ่งกว่านั้นหากคุณใช้ซอฟต์แวร์ 32- บิตบนซีพียู 64- บิต


3

มีชิ้นส่วนในเคอร์เนลที่เขียนในชุดประกอบและพวกเขาจะต้องมีการเขียนใหม่เพื่อรองรับ 286

เกี่ยวกับ ELKS ในคำถามที่พบบ่อยพวกเขาระบุว่ามันเป็นส่วนหนึ่งของเคอร์เนลลินุกซ์ดังนั้นบางทีพวกเขาก็ย้ายเฉพาะความจำเป็นอย่างแท้จริง


1
มีตัวประมวลผลร่วมทางคณิตศาสตร์สำหรับ 286, 80287 คือ
— Renan

3

ฉันคิดว่าคำตอบที่แท้จริงสำหรับคำถามของฉันคือ:

สถาปัตยกรรม CPU ที่สำคัญทุกตัว (หรือการแก้ไขที่สำคัญ) จำเป็นต้องมีรหัสสนับสนุนแอสเซมบลีบางส่วนเพิ่มเติมจากรหัส C

แม้ว่าคุณจะได้รับ GCC เพื่อรวบรวมลีนุกซ์เคอร์เนลลงในรหัสเครื่อง 16- บิต 286 แต่ก็ยังขาดรหัสแอสเซมบลีที่เข้ากันได้ที่จำเป็นสำหรับ 16- บิต 286

กล่าวอีกนัยหนึ่งเคอร์เนลจะสร้างได้ดีที่สุดเพียงบางส่วนเท่านั้น แอสเซมบลีรหัสสถาปัตยกรรมเฉพาะใด ๆ จะล้มเหลวในการรวบรวมเนื่องจากมันไม่ได้เขียนสำหรับสถาปัตยกรรมนั้น

จากนี้ฉันสมมติว่านี่คือสิ่งที่แน่นอนเช่น ELKS และโครงการที่คล้ายกันทำเมื่อใช้งาน Linux บน 286 หรือสถาปัตยกรรมอื่น ๆ - พวกเขาใช้รหัสสนับสนุนการประกอบที่ขาดหายไป


3

80386 รองรับการเพจนอกเหนือจากการแบ่งเซ็กเมนต์หน่วยความจำในขณะที่ 286 รองรับการแบ่งเซ็กเมนต์หน่วยความจำเท่านั้น ลินุกซ์ขึ้นอยู่กับการสนับสนุนการเพจเช่นใช้หน่วยความจำแบบแบนซึ่งโดยทั่วไปจะกำหนดเซกเมนต์ทั้งหมดที่ลงทะเบียนเป็น 0 และใช้การเพจเพื่อจัดการแอปพลิเคชัน เพื่อที่จะพอร์ต Linux ไปยัง 286, ตัวจัดการหน่วยความจำพื้นฐานต้องการการออกแบบที่สมบูรณ์เพื่อทำงานในโหมดเซกเมนต์โดยไม่ต้องเพจจิ้งซึ่งอาจเป็นงานจำนวนมาก


2

Linux ต้องการฮาร์ดแวร์ VM86 หรือไม่

ฉันไม่ฉันการชุมนุมคน แต่ตามนี้ :

เนื่องจากการใช้งานดั้งเดิมของส่วนขยายแบบ 32 บิตของสถาปัตยกรรม 8086 ชุดคำสั่ง 80386 รูปแบบการเขียนโปรแกรมและการเข้ารหัสแบบไบนารียังคงเป็นตัวหารร่วมสำหรับตัวประมวลผลแบบ 32 บิต x86 ทั้งหมดนี้เรียกว่า x86, IA-32 หรือ i386 - สถาปัตยกรรมขึ้นอยู่กับบริบท

386 หมายถึงชุดคำสั่งที่ขยายจาก 286 ดังนั้นใครจะรู้ว่าพอร์ตจะหนักแค่ไหน เห็นได้ชัดว่าเกือบจะไม่มีใครสนใจลอง ... ฉันคิดว่าคุณสามารถถามคน ELKS เกี่ยวกับเรื่องนี้ได้


2

เหตุผลที่ใหญ่ที่สุดคือโครงการ GNU ดั้งเดิมมุ่งเป้าไปที่เครื่องจักร 32- บิต (เช่นช่วงกลางทศวรรษ 1980 Unix workstatons) แทนที่จะรบกวนการสนับสนุนสิ่งเล็ก ๆ ดังนั้น GNU toolchain ทั้งหมดจึงไม่เหมาะสำหรับการสร้างรหัส 16 บิต การย้ายเคอร์เนลลินุกซ์ที่ใช้การชุมนุมกันอย่างหนักในตอนต้นไปยัง 286 นั้นจะง่ายกว่าเป้าหมายการย้ายพอร์ตอื่น ๆ หาก GCC มีความสามารถในการสร้างรหัสโหมดป้องกัน 286 แต่การเล็ง GCC ที่โหมดป้องกัน 286 นั้นจะเป็นโครงการขนาดใหญ่เพื่อรองรับโปรเซสเซอร์ที่ล้าสมัย


1

เมื่อเร็ว ๆ นี้เคอร์เนล linux ได้ละทิ้ง 386 เป็นแพลตฟอร์มที่ได้รับการสนับสนุนและเคอร์เนล Linux ไม่รองรับโปรเซสเซอร์ Intel 286 .. 80286 ไม่ใช่ cpu 32 บิตซึ่งจำเป็นสำหรับการบูต


5
ลินุกซ์ถูกเขียนเดิมใน 386 ในปี 1991 จากนั้น 286 ของอยู่แล้วเก่าและต้นไม้เคอร์เนลหลักไม่เคยมีรหัส backported ใด ๆ ที่จะสนับสนุน 286.
— Flukas88

อาจเป็นเช่นนั้น แต่คำถามก็ยังคงเป็นเช่นนั้นทำไม ไม่ใช่เหตุผลที่ตัดสินใจเลิกสนับสนุน 286/386 (ซึ่งเห็นได้ชัด) แต่อะไรคือเหตุผลทางเทคนิคที่สนับสนุนโปรเซสเซอร์ดังกล่าวไม่สามารถทำได้อย่างง่ายดาย เพราะเหตุใดเคอร์เนลจึงต้องการ CPU 32 บิต ทำไมเคอร์เนลจึงไม่สามารถคอมไพล์สำหรับ 286 ได้?
— ioctlvoid

เคอร์เนลไม่ได้มีตัวประมวลผลร่วมทางคณิตศาสตร์ตามความต้องการใช่หรือไม่
— Bonsi Scott

ไม่เคอร์เนลรองรับการจำลองทางคณิตศาสตร์อย่างน้อยก็เคยทำมาก่อน ดังนั้นคุณสามารถเรียกใช้เคอร์เนล Linux บน CPU ที่มี FPU ที่ใช้งานไม่ได้ อย่างไรก็ตาม 286 ยังคงสนับสนุนตัวประมวลผลทางคณิตศาสตร์ที่ 80287
— ioctlvoid

ในส่วนที่แก้ไขออกมาจากคำตอบของฉันฉันได้ระบุว่าการจำลองจะดำเนินการในเคอร์เนลลินุกซ์ มันยังใช้ในการพอร์ต Linux ไปยัง S / 390 (aka IBM Mainframe) เนื่องจากไม่มีหน่วยจุดลอยตัวในขณะที่พอร์ต
— Didi Kohen

1

Linux x86 ไม่สามารถ back-port ไปที่ 80286 ได้อย่างง่ายดายเพราะเป็นโปรเซสเซอร์ 16 บิตและ Linux x86 ต้องการโปรเซสเซอร์ 32 บิต

โดยเฉพาะอย่างยิ่งรีจิสเตอร์บน 286 ยังคงมีความกว้างเพียง 16 บิต ไม่มีการลงทะเบียน EX นอกจากนี้หน่วยความจำและออฟเซ็ตยังมีความยาวเพียง 16 บิต โปรแกรมยังต้องจัดการกับรหัสใกล้ / ไกลและข้อมูล

ซึ่งหมายความว่า Linux / 286 จะต้องการเคอร์เนลและ API ของผู้ใช้ที่แตกต่างไปจากเดิมอย่างสิ้นเชิงกับ Linux / 386 ชุดซอร์สไฟล์ทุกชุดและไฟล์ต้นฉบับ C จำนวนมากจะต้องถูกเขียนใหม่ มันจะเป็นเหมือนความแตกต่างระหว่างการเขียนโปรแกรมสำหรับ Win16 กับ Win32

กล่าวโดยสรุปคุณไม่สามารถบอกให้ GCC รวบรวม CPU อื่นได้ รหัสทุกบิตจะต้องถูกเขียนใหม่สำหรับสภาพแวดล้อมแบบ 16 บิต


1
โปรดพิจารณาการใช้markdownเพื่อเพิ่มความชัดเจน
— lord.garbage

0

จากสิ่งที่ฉันได้อ่านวิธีมาตรฐานเพื่อให้ Linux ทำงานบน 80286 จะเรียกใช้ภายในเครื่องเสมือน นี่คือสิ่งที่ Fabrice Bellard ได้ที่นี่ คุณต้องติดตั้งเครื่องเสมือนด้วยตัวเองหรือต่อกับพอร์ต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.