Welcome to eComStation.RU site!

Select your language: Russian English Deutch Spanish Italian Portuguese Czech Polish French

Frequently asked questions and answers:

eComStation.RU

ru · en · de · es · it · pt · cz · pl · fr
eComStation - это совершенно другая операционная система для PC (IBM OS/2 Warp)
Программы, новости, статьи, поддержка пользователей, оборудование, вопросы и ответы.
 
      Что такое OS/2?НовостиУстановкаОбновлениеПрименениеБудущееСообществоКупить    
(Карта сайта)

 
 
Отчет: OS/2 совместимое оборудование
Как получить драйверы OS/2 бесплатно

 
Обновление

 
Программы

 
(Санкт-Петербург)

 
Преимущества (1)

 
Разработчику (1)

 
(Пайпы программ)

 
Компании: (1)

 
История (1):

 
(Бонусы)

 
Советы:

 
(Барьеры и решения)

 
Технологии: (1)

 
(Применение в науке, лаборатории, ..)

 

 
Готовые решения:

 
Новая eComStation:

 
Будущее: (1)

 
(Ссылки на другие сайты)

 
(Картинка дня)

 
Артефакты OS/2

 
Гаджеты

 

Пришло время JFS (часть вторая)


TITLE: Пришло время JFS (часть вторая)

DATE: 2002-06-20 09:24:04

AUTHOR: Pavel Shtemenko

Детство было трудное и
клавиатуры были железными
(высказывание приписывается мне)

Прелюдия

Полгода назад на канале #netlabs в разговоре с |lou| я упомянул, что если будет время, то я сделаю загрузку с JFS. "it's impossible" - таков был ответ. Но ведь для exUSSR программистов преград нет? (зал встает и хором поет "Интернационал").

Действие 1. Воспоминание о прошлом

Я не буду рассказывать, как я всерьез занялся ей.. Было время, а желание подогрели. Я рассчитывал, что если IBM предусмотрела вариант "загрузки по минимуму", то мне это выльется в 2 недели. Но ... сразу скажу, что загрузку пришлось делать по варианту "масимум+". Первое, во что я уткнулся, это то, что за 5 лет активного простоя в написании программ на ассемблере, я успел его подзабыть и в очередной раз убедился, что надо знать не язык ASM86, а компилятор, которым пользуешься (возгласы в зале: "Да ты его и не знал никогда!"). В данном случае был применен ALP. В освоениях и воспоминаниях прошла неделя с написанием собственно того, что прописывается в бутблок и иже с ним. Все это было не так сложно и достаточно быстро написалось.

Действие 2. Изменения формы, длины и местоположения глаз

До того, как я взялся за загрузку, я считал систему OS/2 достаточно документированной. Не такой, как хотелось бы (кто работал в RSX11M меня поймет), но значительно лучше, чем все остальные PC-системы, с которыми я работал. Первое, во что я воткнулся - это с какого адреса что грузить? По документации я должен загрузить OS2LDR и передать ему заполненную таблицу - тут не было вопросов. Но главный вопрос, с какого адреса загружать OS2LDR так и остался открытым. Единственное, что следовало из интенсивного раздумья над докой - его нельзя грузить вплотную к видеопамяти, потому как он себя потом туда должен переписать (возгласы в зале: "Читать не умеешь!"). После некоторых раздумий было выбрано круглое число 1000h. Но тут сразу подкрался клинч - в этом случае я не смогу грузить свой загрузчик в нижние адреса. Так как OS2LDR потом себя переписывал вплотную к видеопамяти для расположения своего загрузчика, было выбрано не менее круглое число 8000h.

Практически сразу выяснилось, что одного загрузчика с бутблока - недостаточно, хотя в доке нигде явно не указано, что обязательно нужен максимальный вариант загрузки, посему был сделан пустой файл изображающий os2boot и началась битва за загрузку OS2KRNL. Первое ползновение глаз вверх было когда я увидел, что доавроровские ядра читаются блоками по 80к, второе - когда я увидел адрес выделяемого мне буфера для чтения с адресом на конец сегмента. Ладно, сказал я себе и написал процедуру LeftRightDress.

Глаза начали приобретать сферическую форму когда я обнаружил, что в компорт могут писать или мой загрузчик или OS2LDR, а вместе не получается... Ладно, сказал я и воткнул еще одну плату с двумя ком-портами. Битва с загрузкой ядра шла около недели с переменным успехом, а как только раздобыл OS2LDR с выводом дебага в компорт, так через пару дней я все и закончил. Имея на руках лог загрузки с HPFS, оставалось привести свой загрузчик к нему. При этом выяснились весьма любопытные вещи. Например, документированное ограничение miniIFS в 62 килобайта.. оказалось, что miniIFS на этой стадии загрузки может располагаться только в одном месте (в документации об этом ни полслова) - сразу после векторов прерываний, соотвественно с адреса 1000h-62килобайта. Наконец, исправив свою ошибку при чтении, когда блок переходит с сектора на сектор, я получил тестовый вывод с загруженного кернеля при обращении к моей miniIFS. Я возрадовался с товарищем на пару бутылок коньяка, теперь мне доступны INT 3 и ядро с отладчиком, документированные вызовы и никакого хакерства. (в зале качания в такт распевамому псалму "нет фирмы, кроме IBM и OS/2 пророк ее").

Действие 3. Грабли - это орудие производства

Сделать miniIFS годную для отладки, имея на руках уже отлаженную загрузку с бута было не так сложно и я прошел этап функций MFS_* достаточно быстро. Ну где-то дня за два (проверка ведь делалась перезагрузкой). Добрался до стадии, когда miniIFS должна изображать из себя полноценную FS с небольшими ограничениями, преимущественно, что нельзя писать и искать. Вот тут и начались чудеса. Сразу оказалось, что описания 32битных FS нет... Этот этап знаменуется открытием файла country.sys. Cделав все как написано было для 16 битных FS я получил заявку от ядра, что я живу не в той стране... ну предположим я и сам это хорошо знаю и намного лучше этого ядра (в зале отдельные выкрики "не трожь Расею", коммунисты встают и молча уходят). Начались копания, раздумья и совещания. Сначала выяснилось, что в некоторые достаточно важные структуры были введены дополнительные поля... потом выяснилось что по дополнительным полям работает только часть функций, а для другой части функций надо использовать прежние поля. Хмыкнув и оставив это на неисповедимость путей IBM резвенько дошел до окончания работы своей miniIFS. И тут наступаю на главную граблю - ядро не перемонтирует FS и оставляет часть файлов открытой.... все попытки заставить ядро перемонтировать FS остались безрезультатными... Крах на окончании... (возгласы в зале - "Так тебе и надо!", "Прочь девелоперские руки от IBM!") Тут я вспоминаю, что у меня есть FreeJFS, в которой я могу делать правки. Задавшись целью минимизировать изменения в jfs.ifs пришел к варианту получения адресов нужных процедур, чтобы позвать их самому. Сказано - сделано. И о чудо! Загрузка произошла. Отпразновав как следует день радио и победу, с утра был тока в состоянии переписывать систему и проверять разные варианты загрузки.... Вот тут все и началось. Выяснилось, что работает только тот вариант, на котором я разрабатывал загрузку, перепробовав под пиво порядка 10 вариантов, понял что надо трассировать. (возгласы в зале "Мы знаем кто глючит!")

Действие 3. Враг неизвестен

Я до сих пор не знаю, почему для разработки я выбрал тот вариант, который входит в число немногих вариантов, которые могут работать...

Итак трассировка, потом опять трассировка, потом снова трассировка.... Опыты показали, что если только один раздел в системе и он JFS, то ядро на пару с os2lvm.dmd считают, что разделов вообще в системе нет (возмущенные возгласы в зале "JFS чморят!!!"). Если есть хоть один раздел с HPFS, то я по загрузке получаю запрос на монтирование этой FS n раз, где n = количеству партиций на этом диске. Если известных OS/2 разделов K, а вообще разделов N, то количество разных запросов на монтирование K и потом N-K раз повторяется последний. Уже ничему не удивляясь начинаю искать варианты при которых почти каждый сможет сделать себе загрузочную JFS. К моему вящему изумлению, это оказался вариант из 2х разделов JFS... Обнаружив при этом, что загрузка с primary controller + master disk + primary partition обязательно должна иметь букву назначенную LVM "C:", ессено при тех же условиях slave disk должен иметь букву "D:" и с радостью отметил - IBM таки логична. Начинаю делать вариант подходящий для рядового юзера... Тут обнаруживается, что UJFS.DLL при проверке диска всегда ставит драйв как 80h (первый диск на первом контроллере) и UJFS.DLL от релиза авроры почему-то затирает старшие биты в первых трех байтах... октябрькая UJFS.DLL ставит только драйв не затирая загрузку. Посчитав это происками шпиёнов MS внутри IBM, нелегкой рукой вписал ограничение - первый диск only. (волнения в зале, плавно переходящие в сражения на дискетах).

Действие 4. Ужас глубин

Прорываясь к возможности загрузки как таковой, ессесно в тылу оставались окруженные (но не сдающиеся) части регулярных модулей IBM. Первое, с чем начал воевать - это с хелперами мини IFS. Это было достаточно просто: поменяли один на другой, вместо съезжающего с дорожек хелпера чтения диска был написан свой, работающий через биос (повторяющиеся восклики в зале "Но мы-то знаем, кто глючит!"). Конечно, при этом пришлось самому следить за смещением от начала диска, но это в принципе не так сложно. Следующим в плане планомерной осады, стояла репликация журнала... К моему величайшему изумлению журнал таки реплицировался сам, по нормальному завершению (типа CAD или shutdown), оставались варианты внезапного нажатия Reset или выключения питания. Слегка поразысмыслив, понял, из-за не слишком вероятных случаев поднимать всю бучу репликации журнала и тормозить загрузку до предпоследнего безпредела не стоит (заметим, что ни HPFS ни FAT в таких же случаях гарантии не дает). Хотя замечу сразу, теперь для меня величайшая загадка IBM - это репликация пустого журнала по загрузке.... (возгласы в зале "Да ты гонишь..."). Радостно потирая руки, заглядываем в следующий пункт: необходимая правка JFS.IFS ! Сначала был использован легкий путь, когда пинаются все кто попадется под руку, дабы они отпинали IBMеров и заставили их добавить необходимый код (аж 10 строк на ASM). Как и ожидалось, IBM начала тормозить и отбрыкиваться всеми доступными ей методами. Надо заметить, методов за столетия своего существования, она накопила много... Ну в общем воз и поныне там, хотя на мой взгляд это практически единственный способ обеспечить 100% загрузку. Вспомнив Мичурина с его фразой "не надо ждать милости от ... , взять их самим - наша задача", полез рассматривать способы изъятия нужных мне адресов jfs.ifs у OS2KRNL. Мысль проста как 2 сероголубых свистка - просканировать таблицу GDT и найти нужный мне селектор. И сразу попадаю в первую засаду. В принципе загрузка происходит в кольце 0, но адрес таблицы селекторов выдается в линейном 32битном виде. А у меня загрузчик весь 16 битный с головы до пят... Ладно, сказал я и полез изучать наставления по девхелперному делу. Хелпер обнаружился, правда для употребления надо было использовать еще два хелпера (хорошо хоть для использования этих хелперов не понадобились следующие). Все хорошо и прекрасно, осталось добыть смещения до нужных мне процедур в JFS.IFS. Самый есстественный путь - это проглядеть LX заголовок JFS.IFS. И тут наступает вторая засада - сразу выясняется что она запакована... Прикинув "на глазок" сколько займет это кода и места, а у меня на все про все 62 килобайта из которых уже 32 использовано... Решил их вбить намертво. Решено - сделано. Начал проверять разные версии JFS.IFS и тут изумление мое достигло предела... IBM 16 битный код в JFS.IFS не менял до сегодняшнего дня.... (возгласы в зале "Пишут без глюков, не то что ты")

Эпилог

Выводы неутешительные:

  • для нормального процесса нужно менять jfs.ifs и убрать глюки с os2lvm.dmd
  • для того чтобы делать бут при формате диска, надо менять UJFS.DLL (ну ее и так править надо)

Выводы утешительные:

  • загрузка возможна и уже есть, как бы это не нравилось IBM.
  • LVM можно и снести, да и Даниэла там что-то на тему os2dasd писала...
  • есть исходники JFS и ее можно довести до нормального состояния в обозримое время


Рисунок: Операционная система загружена с JFS-тома, в чем можно убедиться с помощью программы LVM

Послесловие

Автор выносит поименную благодарность:

  • IBM - за передовые достижения в логике и развитии OS/2
  • gerash - за советы и празднования достигнутых результатов
  • sunlover - за советы, веру в документацию и терпение выслушать не всегда ясно излагаемые проблемы
  • froloff - за периодическое дерганье и подталкивание
  • Samm - за обещание напоить пивом, когда будет загрузка
  • os2bird - за совет ставить mov ax,seg DATA16 вместо mov ax,DATA16
  • [zuko] - за приведение цитаты из документации по процессору в нужное для меня время и темы для "возгласы из зала"
  • e-co - за убеждение меня заняться загрузкой

А также всему каналу #os2russian за моральную поддержку.

Использовано

1 раб.сила, два компьютера, internet, 4 бутылки коньяка, 15 литров пива, 204 листа бумаги, 10 блоков сигарет LM, 500гр чая, 307 квтч, китайский фонарик, 2 свечи и один карандаш. Все использованные материалы не нанесли вреда окружающей среде и некоторые уже рециклированы.


Редакторы: Eugene Gorbunoff, Deniska

Попробуй программу:

Panorama VESA - быстрый видеодрайвер для многопроцессорных компьютеров.

Комментарии:

Timur Kazimirov
2002-06-20 09:59:47

Куль!!! Только вот... Пива что-то подозрительно мало было выпито... ;-)

Sergey Posokhov
2002-06-20 12:03:45

Преисполняясь уважения снимаю шляпу. Это самая удивительная статья про OS/2, которую мне приходилось читать !

Sergey Poziturin
2002-06-21 02:22:46

Молодец.

VAD)))
2002-06-21 17:57:13

Крут [Pasha] и дело его круто. И статью написал неслабую. Браво! :)

vladest
2002-06-21 18:03:37

А давайте побъем Lou??

он еще хуже бимеров :-\

Eleph
2002-06-21 18:21:48

"Мочи их!"- закричали лохи...

2[Pasha]: Класс!!! (В зале бурные и продолжительные аплодисменты, местами переходящие в овации...) ;))))

Как бы айбиемеров-то пнуть? Сильно... Или они-таки совсем плохие... ;(((

taxman
2002-06-21 19:38:11

Паша!

Надоест JFS - переходи на детективы! :)

Stepan Kazakov
2002-06-22 08:57:31

бpаво, маэстpо, текст написан мастеpски!

пpо остальное - не знаю, не знаю.. ;)

(многочисленные возгласы из зала)

kamuzon
2002-06-22 10:31:48

Восторг! нопасаран.

RElf
2002-06-22 10:48:14

Паша, а не хочешь написать подробно все технические детали, которые ты обнаружил, дабы восполнить пробелы в документации?

EvgenSK
2002-06-24 21:59:38

Эта. А на буржуйский перевести в морду некоторым ткнуть ?

porro
2002-06-25 05:43:11

I'm ready to translate this wonderful atricle into English if the author don't mind ;-) I'll try to save all peculiar moments in it, I swear ;-)

porro
2002-06-25 05:43:59

Sorry for misprints, I'm short of time in the I-net :(

GPV&KGB
2002-06-26 16:42:39

Теперь бы в самый раз потамагочить МежДелМаш на предмет вделать загрузку с JFS в очереденую версию Авроры (ACP3?)...

FonMax
2002-06-27 01:02:39

Вот чудеса.. а вещали, что энто inpossible.. Встаю и хлопаю в ладошки, неимоверно ожидая технических подробностей.

Oxyd
2002-06-27 08:15:05

В очередной раз убеждаюсь, что в OS/2 можно сделать даже то что нельзя :)

MadInt
2002-06-27 11:36:36

А вот у меня такая мысль - почему бы смещение нужных фунок в jfs.ifs не брать из .sym-файла?

Помниться такой примерно трюк делает для OS2KRNL драйверок win32k.sys из поставки одина...

Andy Porro
2002-07-08 03:34:44

Hi guys!

I have this article translated and if somebody is interested in that fact I can as soon as I find the way to download translated file give it to public.

2Author.

1. Seems to me somewhen I saw a boot process description with all addresses and steps mentioned in the PC-hardware description. Try to find it.

2. I have some doubts that it is possible to remove LVM, does you program work with JFS volume splitted over two or more disks? I guess no. I don't know either you are aware or not, but LVM stores additional information about drive letters and so on in the boot sector, I suppose you have some trouble due insufficient information about LVM compatible software.

Михаил
2003-09-04 15:56:11

А как можно снести lvm ? А то он, сволочь, не полностью видит диск, в отличие от Fdisk а загруженного с дискет.

Михаил
2003-09-04 15:58:12

Да и VCU при переносе системы на другой винт не всегда срабатывает - приходится менять размеры разделов (ACP2) драйвер danis506

Прокомментируйте эту статью (напоминаем, автор работал над текстом несколько недель, уважайте мнение других).


Ваше имя:

Ваш E-Mail:

CODE:
......

  

Ваш комментарий:


Каждый пользователь eComStation/Rus может бесплатно зарегистрировать несколько полезных программ (общая стоимость которых > 6000 руб). Дисковые утилиты, программы для интернета, расширители рабочего стола. Нужны ли тебе эти программы?

Статьи

Операционная система
Программное обеспечение
Оборудование
Для разработчика
Разное
Колонка редактора


Готовая eComStation на SSD диске

 





Последний активный опрос: Какая высота барьера RPM?

IBM OS/2 Warp

 
Обучение новичков

Отчет: OS/2 совместимое оборудование

 
Статьи


   
  Почему eComStation?
Возможности
Особенности
Применение
Ролики и скриншоты
   eComStation для
для бизнесменов
для студентов и инженеров
для продавцов компьютеров
сообщество пользователей
   Разработчик
Распространить программу
Описание API, библиотеки
Начать новый проект
Конкурсы
   Программы
Он-лайн каталог
Выбрать через eCo Market
   Служба поддержки
Отправить вопрос
Купить eComStation
Вопросы и ответы
Обучение новичков
 
 
© 2001 - 2014 eCo Software, All rights reserved
eComStation is a registered trademark of Serenity Systems International
OS/2 Warp is a registered trademark of IBM Corporation
 

 

 
Картинка дня: