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

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

Sunny icons - большие прозрачные иконки. (скриншоты)

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

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? Каждый осевик может установить eCS своим друзьям и родственникам, распечатать для них методичку, как пользоваться системой - Сайт LiveBook

Статьи

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


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

 





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

Самая комментируемая новость за месяц: OS/2 Firefox откат к старому

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
 

 

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