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.