Linux на 286?


15

Я не володію 286, а також не маю намір запускати Linux на одному. Однак, оскільки 286 має захищений режим, чому часто говориться, що для Linux потрібен процесор 386 або вище?

З http://tuxmobil.org/286_mobile.html здається, що версія ELKS Linux може працювати на версії 286, чи правильно це? Які (якщо такі є) зміни були внесені для того, щоб ядро ​​працювало на процесорі 286?

Тепер явно я розумію, що ядро, складене для 386, не може виконуватись на 286 ЦП, що є 16-бітним. Отже, моє запитання полягає в тому, чому стандартне ядро ​​Linux не може бути скомпільовано для 286, а потім виконане на 286? Чи потрібна Linux апаратна підтримка VM86?


6
16-розрядне є надмірним. Для запуску Linux достатньо 8-розрядних. Дивіться проект Дмитра Грінберга.
Марко


Minix працював на 8086 (8 біт, 128KiB RAM IIRC). Microsoft Xenix справді працювала на 80286. Деяка дурена душа намагалася також вбудувати Linux у 8086 (з певним успіхом). Але ні, "повний досвід Linux" на такому обмеженому комп'ютері не буде можливим.
vonbrand

Ви можете вбудувати Linux для роботи на обмежених пристроях. Але це не буде дуже корисно, наприклад, настільна машина. Якщо ви не заявите свої цілі, важко сказати, чи "Linux на 286" життєздатний для вас.
9000

Відповіді:


4

286 захищений режим (ПМ) принципово відрізняється від запропонованого 386. Подумайте про 286 PM як про прототип, який мав стільки недоліків, що майже ніхто його не використовував, і вся справа була повністю перероблена з нуля на 386.

Він не використовував плоску модель пам’яті, вона використовувала сегментовану модель на зразок реального режиму, що означало, що вам доведеться перестрибувати обручі, щоб отримати доступ до пам’яті в блоки, що перевищують 64 кБ за один раз.

Це було повністю несумісне з усіма програмами (MS-DOS), доступними в той час, тому, коли ви були в прем'єр-службі, ви не могли використовувати жодну з програм, до яких ви звикли.

Ви також не змогли знову залишити захищений режим, якщо ви не перезавантажили ПК, тому виробники придумали креативні рішення, як надіслати прапор в оперативну пам'ять, а потім записати магічне значення на контролер клавіатури, який би натиснув контактним штифтом на центральний процесор для перезавантаження машина. Перше, що би зробив BIOS - це виявити встановлений раніше прапор, де він би перейшов назад до початкової програми, а не запускав повсякденну програму POST, дозволяючи оригінальній програмі продовжувати працювати, вийшовши з "PM".

Це означало, що використання 286 PM заважає вам запускати звичайні програми DOS без великої кількості хитрощів. У той час, коли існували лише програми DOS, зовсім не варто було намагатися використовувати ПМ.

Отже, працювати з 286 PM було складніше, ніж просто жити без нього, і покладатися на EMS та XMS для отримання додаткової пам'яті. На ряді 286 материнських плат була підтримка мікросхем EMS, щоб ви могли використовувати всю додаткову системну пам'ять без необхідності PM.

Intel визнала ці недоліки і виробила абсолютно новий, абсолютно інший ПК у 386. Модель із плоскою пам'яттю робить доступ до пам’яті просто в 4 Гб. Процесор може входити і виходити з ПМ за допомогою декількох інструкцій, тому не потрібні незграбні протоколи перезавантаження. VM86 означає, що більшу частину часу вам навіть не потрібно виходити з ПМ, ви можете запускати програми DOS, перебуваючи ще в ПМ.

Усі ці вдосконалення означали, що 386 PM був не тільки більш функціональним, але й значно суміснішим.

Іншими словами, єдине, що є спільним між захищеним режимом 286 та 386, - це ім'я. Ось чому операційні системи ПМ зазвичай є 386 або новішими. Додавання підтримки для 286 вечора було б абсолютно незалежним зусиллям, мало коду або взагалі не можна було б поділитися з абсолютно іншими 386 вечорами.

На противагу цьому, 386 PM працює приблизно так само до останнього з 32-бітних процесорів, і навіть далі, якщо ви запускаєте 32-бітове програмне забезпечення на 64-бітних процесорах.


3

У ядрі написані частини, написані в зборі, і їх потрібно було б переписати для підтримки 286.

Що стосується ELKS, у своїх поширених запитаннях вони вказують, що це підмножина ядра Linux, тому, можливо, вони переносять лише абсолютні потреби.


1
Копроцесор з математики був для 286, 80287.
Ренан

3

Я думаю, що справжня відповідь на моє запитання така:

Кожна основна архітектура процесора (або її значна редакція) потребує додаткового коду підтримки складання на додаток до коду С.

Навіть якщо у вас є GCC для компіляції ядра Linux у 16-розрядний машинний код 286, все одно не буде відсутній важливий 16-бітний 286 сумісний код складання.

Іншими словами, ядро ​​в кращому випадку буде побудовано лише частково. Будь-який специфічний для архітектури код збірки не вдасться зібрати, оскільки він просто не написаний для цієї архітектури.

Виходячи з цього, я припускаю, що це саме те, що, наприклад, ELKS та подібні проекти роблять, коли впроваджують Linux на 286 або інші архітектури - вони реалізують той відсутній код підтримки збірки.


3

80386 підтримує пейджінг на додаток до сегментації пам'яті, тоді як 286 підтримує лише сегментацію пам'яті. Linux значною мірою залежить від підтримки підкачки, тобто використовує плоску схему пам'яті, яка в основному встановлює всі сегменти регістрів на 0 і використовує підкачки для управління програмами. Для того, щоб передати Linux на 286, основний менеджер пам'яті потребує повного перероблення для роботи в сегментованому режимі без пейджингу, що, мабуть, багато роботи.


2

Чи потрібна Linux апаратна підтримка VM86?

Я не хлопець, але відповідно до цього :

Оскільки оригінальна реалізація 32-розрядного розширення архітектури 8086, набір інструкцій 80386, модель програмування та двійкові кодування все ще є загальним знаменником для всіх 32-бітних процесорів x86, це називається x86, IA-32 або i386 -архітектура, залежно від контексту.

386 являє собою розширений набір інструкцій з 286, тому хто знає, наскільки важким буде порт. Очевидно, що майже ніхто не покладався на те, щоб спробувати це ... Я думаю, ви можете запитати людей про ELKS про це.


2

Найбільшою причиною є те, що оригінальний проект GNU був спрямований на 32-бітні машини (наприклад, робочі станції Unix середини 1980-х), а не намагався підтримувати що-небудь менше, тому весь ланцюжок інструментів GNU був непридатний для генерації 16-бітного коду. Перенесення раннього, важкого для складання сегмента з використанням ядра Linux до 286 було б простіше, ніж будь-яка інша ціль перенесення - якби GCC мала можливість створювати код з захищеним режимом 286. Але націлення GCC на захищений режим 286 було б величезним проектом підтримки застарілого процесора.


1

Нещодавно ядро ​​Linux відмовилося від 386 як підтримуваної платформи, а ядро ​​Linux НЕ підтримує процесори Intel 286..80286 не є 32-бітовим процесором, який потрібно завантажувати.


5
Linux спочатку був написаний на 386 в 1991 році. На той час 286-ті були вже старими, а в головному дереві ядра ніколи не було підтримуваного коду, який би підтримував 286.
Flukas88

Це може бути, але все ж було питання, чому це так? Не чому було прийнято рішення про відмову від підтримки 286/386 (що очевидно), але які технічні причини, що підтримують такий старий процесор, не можуть бути легко виконані. Тобто, чому ядро ​​ПОТРІБНО 32-бітний процесор? Чому ядро ​​не може бути скомпільовано для 286?
ioctlvoid

Хіба в ядрі також не було арифметичного спільного процесора, як це відповідає вимогам?
Бонсі Скотт

Ні, ядро ​​підтримує математичну емуляцію, принаймні, це робило раніше. Отже, ви навіть можете запустити ядро ​​Linux на процесорі зі зламаним FPU. Однак 286 все ще підтримував математичний спільний процесор, 80287.
ioctlvoid

У відредагованій частині моєї відповіді я вказав, що емуляція реалізована в ядрі Linux. Він навіть використовувався для порту Linux до S / 390 (він же IBM Mainframe), оскільки під час його порту він не мав одиниці з плаваючою комою.
Діді Кохен

1

Linux x86 неможливо легко перенести на 80286, оскільки це 16-бітний процесор, а для Linux x86 потрібен 32-розрядний процесор.

Більш конкретно, регістри на 286 були ще лише 16-бітовими. Жоден з реєстрів EX не був доступний. Крім того, сегменти пам'яті та компенсації були тривалістю лише 16 біт. Програми все ще мали справу з кодом та даними, котрими розташовані майже далеко.

Це означає, що для Linux / 286 потрібен кардинально інший API ядра та користувача, ніж Linux / 386. Кожен вихідний файл збірки та багато вихідних файлів C потрібно буде переписати. Це було б як різниця між програмуванням для Win16 проти Win32.

Коротше кажучи, ви не можете просто сказати GCC компілювати для іншого процесора. Кожен біт коду потрібно буде переписати для 16-бітного середовища.


1
Будь ласка, врахуйте використання розмітки для підвищення розбірливості.
lord.garbage

0

З того, що я читав, канонічний спосіб змусити Linux працювати на 80286 - це запустити його всередині віртуальної машини. Це робив тут Фабріс Белард . Вам доведеться реалізувати віртуальну машину самостійно або перенести порт.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.