LINUX.ORG.RU

MINIX-NE

 , , ,


7

3

Привет, ЛОР.

В посте полугодичной давности я рассказал о том, как я возился с монохромным монитором от МежДелМаша, подключая его к IBM PS/2. Теперь же я хочу поделиться с вами совсем-таки недавним моим успехом уже софтверного характера, впрочем всё так же занимающим своё заслуженное место в одном из разделов Специальной олимпиады, а именно, — я модифицировал древний MINIX 1.7.5 под нужды своего компьютера, дабы использовать все основные возможности железа. Но начну я своё изложение всё-таки с описания характеристик, ибо именно оно является основным лимитирующим фактором.

Итак, на фото один IBM 8530 (PS/2 Model 30 286) со следующими параметрами

  • Процессор от SIEMENS, клон Intel 80286, 16-bit
  • Память 1 Мб (разбита на 640k+384k)
  • VGA на материнке
  • PS/2 клавиатура и мышь
  • Три ISA слота (мне повезло не возиться с MCA)
  • Compact Flash XT Lite adapter rev 4.1
  • Ethernet от SMC (WD8390 совместимая карта с RJ-45 и BMC)
  • EGA видеокарта от ATI с поддержкой MDA и CGA режимов

Делловский монитор подключён к VGA из материнки, а вот с монохромным монитором пришлось повозиться, сделав переходник с MDA DB-9 на DB-15, плюс выцыганить питание с разъёма для флоппи, ибо IBM решили убрать молексы из дизайна, и запитывать диски с материнки.

Ситуация с подключением двух мониторов довольна нестандартна для конца 80х, однако именно для этой цели адресное пространство у монохромного адаптера и у цветного графического (от которого наследуется текстовый режим VGA) разные, а значит в теории можно использовать VGA+MDA. Однако обычно программы для MS-DOS на это не затачивались, и профита от такой схемы для меня не должно было быть, если бы не…

Если бы не старый MINIX. Версии вплоть до 2.0.4 позволяли в теории запустить полноценный UNIX даже на IBM PC XT с 640k RAM. Однако же найти подходящую именно для меня конфигурацию MINIX оказалось задачей трудной. Я перебрал сначала версию MINIX для MS-DOS, но 1 MB памяти для неё было явно мало (что и не удивительно, ведь MINIX для DOS создаёт виртуальный диск в RAM). В итоге я смог установить в QEMU MINIX 1.7.5 на один из разделов Compact Flash, и потом даже запустить уже на самом PS/2.

Правда, путь к первой введённой в терминале команде был тернист. Во-первых, MINIX подвешивал клавиатуру при загрузке. Причину удалось установить, загрузившись в режиме совместимости с i8086, откуда подозрения сразу пали на злосчастную линию A20, которая управляется контроллером клавиатуры в AT-клонах для совместимости с i8086. В исходном коде kernel/klib88.s A20-линия выставлялась в соответствии с мануалами, вот только оказалось, что для IBM PS/2 появился специальный контроллер для управления A20, а посему код для ядра пришлось сразу же патчить. По итогам доступная память с 640k в режиме совместимости увеличилась до установленной памяти в 1 MB, плюс защищённый режим с его плюсами (ну и минусами тоже, об этом чуть позже).

Следующим шагом было реализации возможности работать одновременно в двух виртуальных tty, используя два монитора. В коде kernel/console.c такой абстракции как монитор или экран не было, поэтому пришлось долго провозиться с возникающими гонками за внутренние переменные, однако усилия были вознаграждены, и теперь я мог например вывести на один экран какой-нибудь man, и параллельно редактировать файл на другом, переключаять по Alt-<- Alt–>.

Ещё одна из проблем оригинального MINIX — он отказывался работать с CF-XT адаптером. Одно время я был удовлетворён работой драйвера, который вызывает функции BIOS int 13h через аппаратный сброс, пока я не захотел наконец-то разобраться с сетевым драйвером (благо он как раз для WD8390 совместимых карт уже был в исходниках). При включении Ethernet в параметрах ядра загрузка зависала на моменте инициализации драйвера диска (забавно, не правда ли?) Вместо того, чтобы пофиксить баг, я решили подойти к вопросу радикально и переписать стандартный драйвер IDE контроллера, чтобы он стал поддерживать CF-XT-lite. И это было увлекательно. Главной подсказской для меня стала принципиальная схема адаптера, потому что сходу отображение адресов CF на шину не гуглилось, и оказалось, что не на все вопросы необходимо искать ответ в Интернете, тем более когда достаточно просто взглянуть глазами на схему платы. Конечно, документация к CF и исходники XTIDE BIOS мне тоже помогли. В процессе переписывания драйвера в момент, когда я наконец-то разобрался с адресами, и драйвер стал идентифицировать устройство, я умудрился несколько раз испортить корневой раздел, но спасали бэкапы и Linux, который до сих пор поддерживает старую добрую MINIX FS.

Как итог: старый MINIX прекрасно себя чувствует на старой же машине с 16-bit разрядностью и 1 MB памяти, при этом позволяет выходить во внешний мир с помощью telnet и ftp и поддерживает мультизадачность. Сейчас я ковыряюсь с httpd сервером, который уже скомпилировался и запускается, но пока возвращает только 403 и 404 (причём делает это он секунд за пять, если не медленнее). Остались ещё мелкие недочёты по типу не работающего SIGTERM по Ctrl-C и мигающего сразу в двух экранах курсора (это сбивает с толку, потому что не знаешь, на какой экран сейчас перенаправлен ввод). Из глобального хочется сделать frame buffer хотя бы для VGA, а то и для обоих мониторов (попробовать видеокарту ATI в режиме Hercules). Другая возможная ветка развития — создание дистрибутива для старых компов и эмуляторов типа даже pcjs.org, чтобы у энтузиастов была возможность попробовать настоящий UNIX на своём ретро железе.

P.S. Да, чуть не забыл. На фото на левом мониторе telnet на какую-то из BBSок, на правом — стандартные UNIX команды и вывод кусочка ядра на экран.

>>> Просмотр (4000x3000, 4288 Kb)

★★★★★

Проверено: Zhbert ()

Ответ на: комментарий от Sunderland93

без блока управления памятью (MMU)

Ну ты понял.

luke ★★★★★ ()
Ответ на: комментарий от Sunderland93

Вообще я запускал эту поделку на пеньке где-то год назад, и она далека от того чтобы стабильно работать. MINIX подходит гораздо лучше.

luke ★★★★★ ()
Ответ на: комментарий от mshewzov

Тут только один компьютер.

Я с классикой не знаком, но дизайнеры у персоналок IBM были всегда как будто бы antiApple — угловатые, неуклюжие…

luke ★★★★★ ()

Повеяло прямо теплом каким-то. Спасибо. Я на мгновение вернулся куда-то в раннюю юность…

Zhbert ★★★★★ ()

У меня начальник любит эту IBM Model M, меня же она дико раздражала всегда — стук заглушает отбойный молоток, очень жёсткие нажатия, да и ремонтопригодность, как показал опыт, равна нулю.

gremlin_the_red ★★★★ ()
Ответ на: комментарий от gremlin_the_red

Это у тебя просто плохие ассоциации с начальником.

luke ★★★★★ ()

Порадовал повествовательный характер рассказа с неспешным изложением, а также глубина понятия автором материала. Премного благодарен. Такое-бы да современным копирайтерам.

ChekPuk ★★★ ()
Последнее исправление: ChekPuk (всего исправлений: 1)

А что за шоссейник сзади ?

И как часто и где на нем катаешься?

Minix получается может на очень многом пахать ?

pinachet ★★★★★ ()

Был такой проект ELKS. Интересно, его можно завести? Неделю назад как раз релиз был. Версия 0.4.

https://en.wikipedia.org/wiki/Embeddable_Linux_Kernel_Subset

https://github.com/jbruchon/elks

http://elks.sourceforge.net/

https://www.youtube.com/watch?v=6rwlqmdebxk

This is a project providing a Linux-like OS for systems based on the Intel IA16 architecture (16-bit processors: 8086, 8088, 80188, 80186, 80286, NEC V20, V30 and compatibles).

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 4)
Ответ на: комментарий от pinachet

А что за шоссейник сзади ?

Trek 460, купил с рук у турка полтора года назад.

И как часто и где на нем катаешься?

Обычно на работу, когда настроение хорошее. Бывало и в город выезжал, и по окрестностям около дома ездил. Но можно гораздо чаще, конечно же (и нужно). Вот всё ленюсь поменять цепь, да и переднюю шину я умудрился на ровном месте порвать (но она старая была, скорее всего оригинальная).

Minix получается может на очень многом пахать ?

При допиливании напильником под себя может. Кода немного, разобраться в нём при желании можно. Плюс в качестве документации целая книжка. Я думаю для изучения основ UNIX имеет смысл брать именно MINIX, правда ежели время позволяет.

luke ★★★★★ ()
Ответ на: комментарий от Zubok

А я уже ответил здесь в треде.

ELKS не поддерживает MMU, а значит надо впихивать себя в 640k. Когда я тыкал эту поделку с дискеты на первопне год назад, она рухнула после довольно тривиального действия типа логина во втором tty или что-то в этом духе. Я побродил тогда по их issues на гитхабе, разработка ведётся весьма вяло, и упирается она главным образом в отсутствие нормального компилятора для IA-16, потому что сегментная модель памяти жизнь сильно портит.

В целом интересно было бы сравнить MINIX 1.7.5 с ELKS на IBM PC XT, на этой машине преимущества миникса нивелируются за счёт того, что у i8088 нет MMU. Но к сожалению у меня нет IBM PC XT.

Кстати, на i8088 можно даже наверное запускать нативные MS-DOS программы для XTшки… это выглядит как интересный хобби-проект.

luke ★★★★★ ()
Ответ на: комментарий от luke

А я уже ответил здесь в треде.

А я просматривал тред, но просто не увидел тут слов с упоминанием ELKS, а сейчас увидел ссылку на анонс на опеннете, но без пояснений, что там. Я же Ъ. :)

Ну, если краеугольный камень MMU, то ELKS его не поддерживает, да. Но... можно допинать же? Как тебе перспектива невосполнимо протратить немного своей драгоценной жизни на это? На допинывание и перепинывание драйверов уже же потратил! :)

З.Ы. Хотя, конечно, это нетривиальное дело. «Немного» тут неуместное слово. Там много чего придется делать.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 2)
Ответ на: комментарий от pinachet

Я тут ещё немного подумал, и понял, что нужно уточнение: я говорил про MINIX версий где-то с 1.5 (а ещё лучше 1.7) до 2.0.4. Третий MINIX на мой вкус переусложнён, драйвера вынесены в пространство пользователя, например, а это добавляет новых абстракций, которые лишь замедляют работу на старых машинах, плюс третий MINIX не позиционировал себя как учебная ОС. Если хочется попробовать что-то более современное для обучения, то наверное имеет смысл смотреть в сторону L4, я вот всё не решаюсь отходить в нашем универе курс по этому микроядру. У них фишка в том, что они доказывают корректность кода, это, конечно, замедляет разработку на порядки, но с другой стороны L4 как раз-таки находит себе применение (военка СШП, аирбус, автопилоты для автомобилей — там, где требуется очень высокая надёжность).

luke ★★★★★ ()
Ответ на: комментарий от Zubok

Как тебе перспектива невосполнимо протратить немного своей драгоценной жизни на это? На допинывание и перепинывание драйверов уже же потратил! :)

Я скорее начну писать свой эмулятор терминала :)

luke ★★★★★ ()
Ответ на: комментарий от Zubok

Хотя бы фреймбуфер сделать для начала. В dual-head будет круто: один экран консольный, а второй — графический. Думаю при определённом извращении можно будет попробовать портировать ЦЕРНовский paw.

luke ★★★★★ ()
Ответ на: комментарий от Zubok

Полистал их веб-сайт. Если он работает на ELKS, то и на миниксе должен заработать.

Впрочем, хватит ли памяти, чтобы пускать nanoX и TCP/IP стек одновременно. Под мой PS/2 30 нужны проприетарные межделмашевские SIMMы, я уже находил их на ebay и они стоят 300 бачинских. Хотя находил я инфу как перепаивать обычные SIMM под это чудо, но это довольно хлопотное занятие, потому что модули маленькие и забиты под завязку.

luke ★★★★★ ()
Ответ на: комментарий от Zubok

Это не тот MINIX, кажется, а MIni-X

Одна путаница с этими mini и X

luke ★★★★★ ()
Ответ на: комментарий от luke

Полистал их веб-сайт. Если он работает на ELKS, то и на миниксе должен заработать.

В коде #ifdef всякие с MINIX есть. Возможно собирали с ним.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от luke

Кстати может быть он как раз поставлялся с третьим MINIX.

Для третьего MINIX уже полноценные иксы были.

Zubok ★★★★★ ()
Ответ на: комментарий от luke

Тут только один компьютер.

Да, я забыл. Это же двухмониторная конфигурация.

Я с классикой не знаком, но дизайнеры у персоналок IBM были всегда как будто бы antiApple — угловатые, неуклюжие…

А мне вот именно этот дизайн прям нравится, хорошо смотрится, лампово. Конечно, современные 27-дюймовые модели сложно представить в таком корпусе. Он был бы просто дико громоздкий.

mshewzov ()

О боже, если бы эти люди занимались не некрофилией, а разработкой видеодров под проблемное современное железо…

kirill_rrr ★★★★★ ()

при этом позволяет выходить во внешний мир с помощью telnet и ftp и поддерживает мультизадачность

Вот, а если бы послушали @saahriktu и прикрутили поддержку gopher к ЛОРу, то можно было б его читать с этого компа.

cocucka ★★★★★ ()
Ответ на: комментарий от luke

Эээ... Я, например, работал. Кувалдой и ругательствами предотвращая очередную вселенскую беду.

И как приятно почитать, наконец, полноценую русскую речь.

Вот что значит, что Люк заюзал форс по полной :)

ChekPuk ★★★ ()
Ответ на: комментарий от luke

Я думаю для изучения основ UNIX имеет смысл брать именно MINIX, правда ежели время позволяет.

ого! до каких же основ ты добрался!

crypt ★★★★★ ()
Ответ на: комментарий от luke

сегментная модель памяти жизнь сильно портит.

это для любого ПО или для пользовательского MINIX предлагает цельный кусок virtual memory?

crypt ★★★★★ ()
Ответ на: комментарий от luke

и упирается она главным образом в отсутствие нормального компилятора для IA-16, потому что сегментная модель памяти жизнь сильно портит.

Ну, вроде бы GCC-IA16 появился и на него в ELKS уже мигрировали с BCC. А чем там MINIX 1.x собирается? При помощи ACK?

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от ChekPuk

Эээ… Я, например, работал. Кувалдой и ругательствами предотвращая очередную вселенскую беду.

В этот раз я решил дежурств на выходные не брать.

Впрочем, рестарт проекта случился именно во время очень скучного дежурства.

luke ★★★★★ ()
Ответ на: комментарий от luke

Т.е. они таки у тебя там были? :) Мсье редкий извращенец, фап-контент на монохромном зелёненьком мониторе крутить! А картинки на втором MINIX чем-нибудь показывать умеет?

Harald ★★★★★ ()
Ответ на: комментарий от crypt

Это ограничение на уровне процессора, тут либо надо придумывать какой-нибудь хитрый компилятор, который будет при достижении границ сегмента запрашивать новую запись в ядре (и ещё надо в ядро добавить возможность создания новых сегментов для уже существующего процесса), либо делать слой с байт-кодом, а тогда теряется всякий смысл.

Другое дело что можно сделать fork и это и будет де-факто аллокация новых сегментов.

luke ★★★★★ ()
Ответ на: комментарий от Zubok

Да, я знаю, но gcc-ia16 некошерен, ибо он сам на 16bit платформе скомпилирован быть не может.

В MINIX1.X какая-то дремучая полупроприетарная версия ACK, я если честно не пытался разобраться, как это работает.

luke ★★★★★ ()

Божественно! Одобряю!

hobbit ★★★★★ ()

Ethernet от SMC (WD8390 совместимая карта с RJ-45 и BMC)

А шо это за зверь, разве во времена 286 ethernet по витой паре существовал уже?

Harald ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.