Вопрос по включению A20 Gate

Internal structure and you change requests/suggestions
  • Demonikss wrote:Если win95 на этом стареньком ноуте работает, я думаю и Колибри должен запуститься...
    Это неправильно допущение. Колибри требует для запуска некоторые команды, которые появились только в Pentium и совместимых с ним моделях процессоров. Если на том ноутбуке процессор 486 или более ранний, то Колибри не будет работать. Единственный пока известный процессор близкий к 486, на котором работает Колибри, это тот который установлен в eBox, но там как раз есть поддержка нужных для Колибри команд. Вопрос с поддержкой очень старых конфигураций неоднократно рассматривался, достаточно воспользоваться поиском по форуму.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • хорошо. я все таки изгольнулся сделать скрин загрузки с помощью веб камеры. Вылет как раз после надписи Частота процессора. Причем частоту он как раз и не пишет. И справа куча сообщений вылетает.
    K:Failed to initialize ramdisk
    K:Kernel SVN r4976
    Камера слабенькая плохо видно, но процессор идентифицирован (detected)
    Attach interrupt 6...
    Set IDE IRQs...
    И дальше эксцепшены и прибивание процесса с ID:0000002
    Ради интереса попробовал с MEOSLOAD.COM из MS-DOS 6.22. С драйвером HIMEM запускается в начальный экран загрузчика, а без него не хотит. Отсюда делается вывод что просто при переключении контекста загрузчик видимо теряет связь с расширенной памятью. Образ диска как я понимаю создается в расширенной памяти? Раз не может инициализировать рамдиск значит скорее всего мой вопрос по поводу активации A20 Gate не так уж и далек от истины.
    Я понимаю что вам неинтересно со старым железом копаться, а мне намного удобнее работать с системой на живом железе, пусть и стареньком. Кстати еще параллельно тогда как например запускается и работает NetBSD 1.6.2? У линуха ведь тоже многозадачность и всякое прочее.
    Продолжаю мучить дальше.
    PS. Да кстати, в других темах я видел высказывания про старое железо. А файловая система FAT? Да и процедура активации A20 используемая ядром уже померла давно. Сейчас Fast A20 Gate через порт 92 насколько я понимаю. Вот смотрю как некоторые холиварят и забывают подчищать старый код... Я конечно не хочу никого обидеть, но все таки мне кажется что для такой системы лучше поддерживать все переходные конфигурации как это у БСДшников сделано, а не только определенное железо Must Have.
  • Я специально поискал за вас - читайте и думайте сами:
    1) Запуск на 80486
    2) Запустить на 486-ом
    3) Минимальная протестированная конфигурация компьютера.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • а вывод дебуга при загрузке что то не то говорит. интересно как связан виртуальный диск в оперативной памяти с командами этими? тогда другой вопрос. как распаковать и установить все это дело на диск под вмварем чтоб можно было спокойно ядрышко собирать-тестировать без всяких запаковок? как вариант просто заменить загрузочную запись на диске в мбр любой программой для прямого редактирования диска?
    Ладно. С компиляцией ядра справились. Загрузил последний свн, в вмваре сделал машинку с Колибри и в ней откомпилял, заменив 1 строчку. Эффект есть. Теперь по крайней мере машина просто выдает дамп и виснет, не уходя в перезагрузку. Я думаю процедуру включения A20 Gate все же надо подправить, у тех же линуксов она имеет еще и проверку реально включилось А20 или нет... Для проверки сначала компилил без изменений и пожал кернпаком. Размер файла почему то больше вышел. Оригинальный 87080, у меня вышло 87254. Не пойму в чем разница. Может знающие могут пояснить. Ревизия вроде та же... 4976. Да и в загрузочном синем экранчике пропала надпись автосборка бла-бла-бла. Замечаю следующую странность. В машинке физически 8 мб памяти, а Колибри нашло 9 )))). Это мне нравится, глядишь и до 16 расширит ))) На виртуальной машине с 64 мб ОЗУ отказалось компилять ядро сказав что памяти не хватает... Ну да ладно, дал 256, не жалко. Хорошо что поставил 4 Гб в свое время. Проблема с рамдиском так и не решилась. Будем дальше курить бамбук (исходный код)...
  • Demonikss wrote:Ладно. С компиляцией ядра справились. Загрузил последний свн, в вмваре сделал машинку с Колибри и в ней откомпилял, заменив 1 строчку.
    Компилировать можно и Шиндовс и в Линукс, а ядро потом в IMG образ забросить.
    Demonikss wrote:Я думаю процедуру включения A20 Gate все же надо подправить, у тех же линуксов она имеет еще и проверку реально включилось А20 или нет...
    Процедура работает на всех соответствующих по характеристикам компьютерах и работает более десяти лет. Пока точно не установлено, что проблема именно в этом коде, а не в чем то другом, что пока явно наблюдается, то править не нужно.
    Demonikss wrote:Для проверки сначала компилил без изменений и пожал кернпаком. Размер файла почему то больше вышел. Оригинальный 87080, у меня вышло 87254. Не пойму в чем разница. Может знающие могут пояснить. Ревизия вроде та же... 4976.
    Нельзя заранее предсказать размер упакованного файла, так как содержимое бинарника изменилось, хотя его размер и не изменялся.
    Demonikss wrote:Да и в загрузочном синем экранчике пропала надпись автосборка бла-бла-бла.
    Это нормально - только сервер автосборки при компиляции вставляет текущую ревизию.
    Demonikss wrote:Замечаю следующую странность. В машинке физически 8 мб памяти, а Колибри нашло 9 )))). Это мне нравится, глядишь и до 16 расширит
    Весьма странно. Возможно это глюк BIOS.

    З.Ы. Пока не озвучены характеристики тестируемой машины сложно какие-либо советы.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • 8-часовой мозговой штурм гугла и интеловских референсов приводит к одной простой мысли. Во-первых не так уж у них там все было стандартизовано, и некоторые производители реализовывали свои методы переключения этого A20 Gate. Во-вторых, насколько видно из исходников ядра, применяется V86, как метод доступа к функциям BIOS я так понимаю... Подход немного устаревший (лет так на 10 наверное). Отсюда и проблемы с совместимостью Колибри на реальном железе. Эмуляторы реализуют правильные интерфейсы, и поэтому то что работает отлично в эмуле, не обязано работать на реальной машине. Поэтому все-таки нужно доработать метод, используя хотя бы линуксовый подход. На сайте вики Watcom написано про это много. Стандартный досовский himem.sys реализует аж целых 15 способов управления этой линией. Вот же лихие были времена...
    Характеристики машины: ноутбук Toshiba T2130CS, 8 мб ОЗУ, i486dx4, vesa 1.2. видео то ли 1024x768, то ли 800x600. Но точно 256 цветов. Вместо стандартного харда на 500 мб использую карточку CompactFlash, через переходник. Очень удобно, бесшумно и намного шустрее харда )))) У него даже внешний vga выход под монитор есть ))))
    В наличии прошивалка для биоса (утилита производителя) и последняя по версии доступная прошивка. Думаю на досуге заняться, когда голова дорастет до полного понимания всего что творит это железо. Биос обновил, но проблема с тем что из 1 Гб флешки он корректно определяет только 500 метров так и осталась.
    Теперь опять возвращаясь к траблам с установкой. Все же есть подозрение на машину V86, потому что простое изменение кода начальной загрузки уже позволило немного продвинуться вперед. Как докопаю думаю будет что обсудить с разработчиками ядра. Сейчас займусь пересборкой ядра выключив таймер, чтобы исключить вариант пентиумовских команд и там уже видно будет что к чему.
  • Demonikss wrote:vesa 1.2. видео то ли 1024x768, то ли 800x60
    С такими характеристиками видео только VGA и будет доступно - либо 640*480*16, либо 320*240*256.
    Demonikss wrote:Биос обновил, но проблема с тем что из 1 Гб флешки он корректно определяет только 500 метров так и осталась.
    Возможно проблема не только в BIOS, а еще контроллер IDE ограниченный и тоже больше 512 Мб не видит.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Ну и что? Я просто использую 500 метров раздел и все. С другими оськами проблем никаких пока не было. Я на большом компе в вмваре ставлю системы, втыкаю в ноут и все идет. Интересно бы узнать что за процесс с ID:0000002. Может пойму почему его так стремится прихлопнуть ядро...
    Да, тут еще с е820 надо посмотреть... Почему то видит 9 метров а не 8, может просто в несуществующую область отображает и пытается туда проломиться, вот и виснет.
    Last edited by Demonikss on Mon Jul 14, 2014 9:24 am, edited 1 time in total.
  • Demonikss wrote:Интересно бы узнать что за процесс с ID:0000002. Может пойму почему его так стремится прихлопнуть ядро...
    Вероятно это один из потоков самого ядра (ЕМНИП их 3) и он вызывает исключение обратившись не туда.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Сейчас на запущенной в виртуалке Колибри ID 2, 3 и 4 видны как OS. То что он системный понятно, я думаю не IDLE ли?
  • Люди, твёрдо в чём-то уверенные, порой хуже людей, которые ничего не знают.
    Demonikss wrote:Не может ли быть проблемой вылета при инициализации ядра неправильная активация A20 Gate?
    Нет.
    Demonikss wrote:Да и процедура активации A20 используемая ядром уже померла давно.
    Нет. Она незначительно медленнее, но надёжнее.
    Demonikss wrote:Вылет как раз после надписи Частота процессора. Причем частоту он как раз и не пишет.
    Правильно. При определении частоты процессора первый раз используется команда rdtsc, которой не было в 486-х. Что Mario_r4 пытается объяснить уже не первый пост.
    Demonikss wrote:Раз не может инициализировать рамдиск значит скорее всего мой вопрос по поводу активации A20 Gate не так уж и далек от истины.
    Раз не может инициализировать рамдиск, значит, неправильно организован процесс загрузки и никто не загрузил образ kolibri.img в память. Кто именно это должен делать, зависит от выбора в пункте [e] на синем загрузочном экране - если там "использовать уже загруженный образ", то чтение kolibri.img лежит на начальном загрузчике перед ядром.
    Demonikss wrote:Интересно бы узнать что за процесс с ID:0000002. Может пойму почему его так стремится прихлопнуть ядро...
    Это и есть само ядро. Его никто не пытается "прихлопнуть", оно умирает само. От того, что запускает команду rdtsc, которой не было в 486-х, что Mario_r4 пытается объяснить уже не первый пост.
    Сделаем мир лучше!
  • Вот очень трудно как раз с упертыми людьми которые уверяют что раз работает да и ладно. Нормальный порядок инициализации любой железки описан достаточно подробно:
    1. Проверка наличия, состояния.
    2. Собственно инициализация (подготовка к работе, установка начального состояния).
    3. Опрос устройства, проверка работоспособности.
    Всеми любимый Таненбаум об этом писал и не раз. Он свою оську написал не для того чтобы работало, а чтобы показать что должно ХОРОШО работать.
    Я не спорю, да, использование rdtsc вышибает старенькие компьютеры из числа совместимого с Колибри железа. Хотя вопрос этот я все равно поизучаю, просто ради интереса.
    Надежный код - это код который работает всегда, следует стандарту. Реализация данного метода в конкретном примере далеко этому не соответствует, поэтому код не является надежным. Почему, описано выше. Глючные биос были и будут всегда. Отмазочка типа вся проблема в производителях биос конечно хороша, но с такой идеологией пишутся только системы Шиндоуз, монстры которые жрут ресурсы и делают вид что работают.
    Почему то разработчик Fasm не погнался за красотой и рюшечками, а использовал простой и проверенный метод. Лучше меньше, но лучше.
    Еще раз повторюсь, у меня ни одно ядро Unix-like систем не падало на процессе первоначальной загрузки. У них кстати такие же проблемы роста размера ядра и отладки его уже давно возникли. Сам Линус уже сомневается в том что они долго смогут удержать позицию стабильной операционной системы. Даже мелкософт озаботился и начал исследования в сторону снижения размера своих громаднейших приложений.
    Причем я так думаю это проект написания свободно распространяемой оськи, с открытым исходным кодом, а значит каждый может высказаться по поводу его развития и внести любой посильный вклад.
    Я не прошу вас как другие - запустите мне Колибри на том на чем я хочу. Просто моя попытка немного изменить код привела к осознанию того что есть ошибка, и при необходимой правке она исчезнет. Значит другой пользователь на совершенно другой машине уже никогда с этим не столкнется. Разве это плохо?
    Когда я закончу полностью изучение данного вопроса, могу предоставить обобщенный код, вы его опробуете и скажете свое мнение.
    Да, попутно, на странице загрузки на сайте есть ошибка:
    -------------------------------------------------------------------------------------------------------------------------------
    На этой странице представлены ночные сборки дистрибутива — это означает, что они всегда содержат самые последние изменения в системе и потому могут быть нестабильны. Колибри распространяется на условиях GPLv2, её исходники доступны на нашем SVN сервере.
    Успеха и процветания.
    -------------------------------------------------------------------------------------------------------------------------------

    При нажатии на слово SVN в предпоследней строчке на свн перехода не происходит. Браузер FireFox.
  • Что касается команды rdtsc на i486 процессорах, то можно реализовать её эмуляцию используя
    процессорное исключение Interrupt 6—Invalid Opcode Exception (#UD). Вариантов множество,
    например, в исходниках Linux старых версий.
    Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!
  • Спасибо за подсказку Artyom, действительно дельное замечание. Тогда вопрос следующий. Ядро Колибри вообще содержит обработчики исключений? Или при использовании недопустимых команд просто радостно виснет начиная напоминать всенародно любимую сверхнадежную операционную систему? Судя по тому что даже логи не всегда удается получить и приходится копаться в исходнике догадываясь что же произошло нет?
  • Who is online

    Users browsing this forum: No registered users and 10 guests