286'da Linux mu?


15

286'ya sahip değilim, ne de bir tane Linux çalıştırmayı düşünmüyorum. Ancak 286 korumalı moda sahip olduğu için, neden Linux'un 386 veya daha yüksek bir CPU gerektirdiğini sık sık ifade ediyor?

Gönderen http://tuxmobil.org/286_mobile.html doğruysa, Linux ELKS versiyonu 286 çalışabilir görünüyor? Çekirdeğin 286 CPU'da çalışmasına izin vermek için (varsa) ne gibi değişiklikler yapıldı?

386 için derlenen bir çekirdeğin 16-bit olan 286 işlemcide çalıştırılamayacağını anlıyorum. Öyleyse sorum şu: Standart Linux çekirdeği neden 286 için derlenip 286'da çalıştırılamıyor? Linux donanım VM86 desteği gerektiriyor mu?


6
16-bit aşırı dolu. 8-bit Linux çalıştırmak için yeterlidir. Dmitry Grinberg'in projesine
Marco


Minix 8086'da (8 bit, 128KiB RAM IIRC) koştu. Microsoft'un Xenix'i 80286'da koştu. Bazı demanslı ruh Linux'u 8086'ya sokmaya çalıştı (biraz başarılı oldu). Ama hayır, "tam Linux deneyimi" böyle sınırlı bir makinede mümkün olmayacak.
vonbrand

Linux'u çok sınırlı cihazlarda çalıştırmak için ayakkabı çekebilirsiniz. Ancak bu, örneğin bir masaüstü bilgisayar olarak çok kullanışlı olmayacaktır. Hedeflerinizi belirtmedikçe, '286'da Linux'un sizin için uygun olup olmadığını söylemek zor.
9000

Yanıtlar:


4

286 korumalı mod (PM) 386'nın sunduğundan temel olarak farklıdır. 286 PM'yi, neredeyse hiç kimsenin kullanmadığı birçok eksikliğe sahip bir prototip olarak düşünün ve her şey 386 için baştan sona yeniden tasarlandı.

Düz bellek modeli kullanmadı, gerçek mod gibi parçalı bir model kullandı, bu da bir seferde 64 kb'den büyük bloklarda belleğe erişmek için çemberlerden atlamanız gerektiği anlamına geliyordu.

O zaman mevcut olan tüm (MS-DOS) programlarla tamamen uyumsuzdu, bu yüzden PM'ye girdikten sonra alıştığınız programlardan hiçbirini kullanamazsınız.

Ayrıca, bilgisayarı yeniden başlatmadığınız sürece korumalı moddan tekrar çıkamazsınız, bu nedenle üreticiler RAM'e bir bayrak koymak, ardından klavye denetleyicisine sihirli bir değer yazmak gibi yaratıcı çözümler ürettiler, makinesi. BIOS'un yapacağı ilk şey, daha önce ayarlanan bayrağı algılamaktır ve burada POST rutinini çalıştırmak yerine orijinal programa geri atlar ve orijinal programın "çıkış" PM'den sonra çalışmaya devam etmesine izin verir.

Bu, 286 PM kullanmanın, çok sayıda numara olmadan normal DOS programlarını çalıştırmanızı engellediği anlamına geliyordu. Sadece DOS programları olan bir zamanda, PM kullanma çabasına değmezdi.

Böylece, 286 PM ile çalışmak, onsuz yaşamaktan daha karmaşık hale geldi ve ekstra belleğe erişmek için EMS ve XMS'ye güveniyordu. Bir dizi 286 anakart EMS için yonga seti desteğine sahipti, böylece tüm ekstra sistem belleğini PM'ye ihtiyaç duymadan kullanabilirsiniz.

Intel bu eksiklikleri fark etti ve 386'da tamamen farklı bir PM üretti. Düz bellek modeli, 4GB'a kadar bir yığınla belleğe erişmeyi kolaylaştırıyor. CPU, birkaç talimatla PM'ye girip çıkabilir, böylece beceriksiz yeniden başlatma protokollerine gerek yoktur. VM86, çoğu zaman PM'den çıkmanız gerekmediği anlamına gelir, yine de PM'de DOS programlarını çalıştırabilirsiniz.

Tüm bu gelişmeler, 386 PM'nin sadece daha işlevsel değil, aynı zamanda önemli ölçüde daha uyumlu olduğu anlamına geliyordu.

Başka bir deyişle, 286 ve 386 korumalı mod arasında ortak olan tek şey isimdir. Bu nedenle PM işletim sistemleri genellikle 386 veya daha yenidir. 286 PM için destek eklemek, tamamen farklı bir 386 PM ile paylaşılabilecek veya hiç kod paylaşamayacak şekilde tamamen bağımsız bir çaba olacaktır.

Buna karşılık, 386 PM, 32 bit CPU'ların sonuna kadar aynı şekilde çalışır ve hatta 64 bit CPU'larda 32 bit yazılım çalıştırırsanız bile ötesinde çalışır.


3

Çekirdeğin montajda yazılı kısımları vardır ve 286'yı desteklemek için bunların yeniden yazılması gerekir.

ELKS ile ilgili olarak, SSS'lerinde Linux çekirdeğinin bir alt kümesi olduğunu belirtiyorlar, bu yüzden belki de sadece mutlak ihtiyaçları taşıdılar.


1
286, 80287 için bir matematik yardımcı işlemcisi vardı.
Renan

3

Sorumun gerçek cevabı şu:

Her büyük CPU mimarisi (veya büyük revizyonu) C koduna ek olarak bazı montaj destek kodu gerektirir.

Linux çekirdeğini 16-bit 286 makine kodunda derlemek için GCC'niz olsa bile, temel 16-bit 286 uyumlu montaj kodu eksik olacaktır.

Başka bir deyişle, çekirdek en iyi ihtimalle sadece kısmen inşa edilirdi. Mimariye özgü herhangi bir montaj kodu, söz konusu mimari için yazılmadığı için bir araya getirilemez.

Buna dayanarak, EL6 ve benzeri projelerin 286 veya diğer mimarilere Linux'u uygularken tam olarak ne yaptığını varsayıyorum - eksik montaj destek kodunu uyguluyorlar.


3

80386 bellek bölümlendirmeye ek olarak sayfalamayı desteklerken 286 yalnızca bellek bölümlendirmeyi destekler. Linux büyük ölçüde disk belleği desteğine bağlıdır, yani temelde tüm segment kayıtlarını 0'a ayarlayan ve uygulamaları yönetmek için disk belleği kullanan düz bir bellek düzeni kullanır. Linux'u 286'ya taşımak için, temel bellek yöneticisinin, disk bölümleme modunda çalışmak için, muhtemelen çok fazla iş olan tam bir yeniden tasarıma ihtiyacı vardır.


2

Linux donanım VM86 desteği gerektiriyor mu?

Ben montaj adam bir değilim, ama uygun bu :

8086 mimarisinin 32 bit uzantısının orijinal uygulaması olarak 80386 komut seti, programlama modeli ve ikili kodlamalar, tüm 32 bit x86 işlemciler için hala ortak paydadır, buna x86, IA-32 veya i386 denir -Mimari, bağlama göre.

386 , 286'dan genişletilmiş bir talimatı temsil ediyor , bu yüzden limanın ne kadar zor olacağını kim bilebilir? Görünüşe göre neredeyse hiç kimse denemek için uğraşmadı ... Sanırım ELKS insanlarına bunu sorabilirsiniz.


2

En büyük neden, orijinal GNU projesinin daha küçük bir şeyi desteklemek için uğraşmak yerine 32 bitlik makineleri (1980'lerin ortalarında Unix çalışma sayfaları gibi) hedeflemesidir, bu nedenle tüm GNU araç zinciri 16 bit kod üretimi için uygun değildir. GCC'nin 286 korumalı mod kodu üretme yeteneğine sahip olsaydı, montajı ağır olan, segmentleri kullanan Linux çekirdeğini 286'ya taşımak diğer tüm taşıma hedeflerinden daha kolay olurdu. Ancak GCC'yi 286 korumalı moda hedeflemek, eski bir işlemciyi desteklemek için büyük bir proje olurdu.


1

Son zamanlarda linux çekirdeği 386'yı desteklenen bir platform olarak terk etti ve Linux çekirdeği Intel 286 işlemcileri DESTEKLEMİYOR .. 80286 önyükleme için gerekli olan 32 bit işlemci değil.


5
Linux ilk olarak 1991'de
386'da

Bu olabilir, ancak soru hala neden böyle oldu? 286/386'ya (bu açıktır) destek verme kararı neden alınmadı, ancak böyle eski bir işlemciyi desteklemenin teknik nedenleri kolayca yapılamıyor. Çekirdek neden 32-bit CPU GEREKTİRİR? Çekirdek 286 için neden derlenemiyor?
ioctlvoid

Çekirdeğin gereklilikleri nedeniyle aritmetik eş işlemcisi de yoktu?
Bonsi Scott

Hayır, çekirdek matematik öykünmesini destekler, en azından bunu daha önce yapmıştı. Böylece, Linux çekirdeğini FPU bozuk bir CPU üzerinde bile çalıştırabilirsiniz. Bununla birlikte, 286 hala bir matematik yardımcı işlemcisini, 80287'yi destekledi.
ioctlvoid

Cevabımın düzenlenmiş bir kısmında öykünmenin Linux çekirdeğinde uygulandığını belirtmiştim. Hatta, taşındığı sırada bir kayan nokta birimi olmadığı için Linux'u S / 390'a (IBM Mainframe olarak da bilinir) taşımak için bile kullanıldı.
Didi Kohen

1

Linux x86, 80286'ya kolayca geri taşınamaz çünkü 16 bit işlemci ve Linux x86 32 bit işlemci gerektirir.

Daha spesifik olarak, 286'daki kayıtlar hala sadece 16 bit genişliğindeydi. EX kayıtlarının hiçbiri mevcut değildi. Ayrıca, bellek segmentleri ve ofsetler hala sadece 16 bit uzunluğundaydı. Programlar hala yakın / uzak kod ve verilerle uğraşmak zorundaydı.

Bu, Linux / 286'nın Linux / 386'dan çok farklı bir çekirdek ve kullanıcı API'sına ihtiyacı olacağı anlamına gelir. Her montaj kaynak dosyasının ve birçok C kaynak dosyasının yeniden yazılması gerekir. Win16 için Win32 ve Win32 için programlama arasındaki fark gibi olurdu.

Kısacası, GCC'ye farklı bir CPU derlemesini söyleyemezsiniz. 16 bitlik ortam için her kod bitinin yeniden yazılması gerekir.


1
Kullanımını dikkate alınız markdown artan okunabilirlik için.
lord.garbage

0

Linux'u 80286'da çalıştırmanın kanonik yolunu okuduğumdan, onu sanal bir makinede çalıştırmak olurdu. Fabrice Bellard burada yaptı . Sanal makineyi kendiniz veya bir adet bağlantı noktasını uygulamanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.