CleverMouse
Если я правильно понял вопрос, то загрузчик самый обычный. mkisofs собирает загрузочный CD, kolibri.img эмулируется как дискета при загрузке. Я использовал такую команду mkisofs -U -J -pad -b kolibri.img -c boot.catalog -hide-joliet boot.catalog -hide-joliet kolibri.img -iso-level 3 -o kolibri.iso /kolibri
По непонятной причине Колибри умеет читать только joliet диски и не понимает просто iso9660. Тормоза в эмуляторе (QEMU ?) скорее всего вызваны ошибкой в ядре. На настоящем железе пульсирующая нагрузка скорее всего не заметна.
Mario
Озадачивать пользователя не нужно. Идея такая:
генерируется uuid version 4 (или берётся текущая ревизия svn+время:дата) и создаётся файл с таким именем. При загрузке ядро или launcher тупо сканирует корневые каталоги /cd0/1 /cd1/1 /cd2/1 /cd3/1 в поисках файла и при совпадении назначает путь. Для лаунчера в этом случае понадобится новый системный вызов. Всё это вполне автоматизируется для автосборки.
Коллизии конечно возможны, но здесь надо посмотреть пути в программах и ядре. Для загрузки с CD необязательно генерировать полный образ, это только раздувание упакованных iso. Обязательные программ - CPU, ICON, RB, PANEL и т.п. должны всегда грузиться с /rd/1, остальные из /sys/ . Но сначала необходимо разобраться с тормозами в эмуляторе.
"Ночные" сборки KolibriOS
То есть что-то наподобие http://builds.kolibrios.org/.test/kolibri1.iso ?
Mario
замаскировал вызов check_ATAPI_device_event и тормоза в QEMU чудесным образом исчезли.
замаскировал вызов check_ATAPI_device_event и тормоза в QEMU чудесным образом исчезли.
CleverMouse
Да, грузится отлично. Для начала подходит обычный образ без всяких изменений. Я посмотрел последний LiveCD от diamond-а. Там не так много дополнительных программ и весь дискеточный дистрибутив в корне CD.
Да, грузится отлично. Для начала подходит обычный образ без всяких изменений. Я посмотрел последний LiveCD от diamond-а. Там не так много дополнительных программ и весь дискеточный дистрибутив в корне CD.
Serge
CleverMouse
Поскольку на 99% код для ATAPI и iso9660 (joliet) написан мной, то я объясню непонятные места.
1) Joliet потому что мне лень было писать поддержку для ASCII имен. При том что у меня не было ни одного диска (из 300 штук) на тот момент отличающихся от Joliet. Код тупо ищет нужный ему описатель и использует его - ничего не мешает дописать поиск другого описателя (Кулаков Владимир "Дисковая подсистема ПК" в помощь) и написать код работающий с ASCII именами. Только вот от поддержки символов отличных от латиницы на системном CD диске (раз уж оно будет формироваться по старому стандарту) тогда вспоминать не нужно - впрочем их вроде и так нет. У меня нет времени, возможности и честно говоря я этим кодом никак не заинтересован, но любой желающий может сделать. Вообще на диски куча подстандартов и я удивляюсь почему мне еще никто не предъявил претензии насчет поддержки UDF -наверное потому что MPEG2 плеера для DVD дисков у нас еще нет.
2) Насчет тормозов в Qemu - да они есть. Об этом я уже писал на форуме. Все потому что производители ATAPI устройств не озаботились повесить событие нажатия кнопки на прерывание. В результате приходится тупо читать состояние порта. На реальных компьютерах это не вызывает никаких проблем - проверено на Cyrix233 (187 МГц). В Qemu почему то опрос с периодичностью 0,1 секунды вызывает жуткий ступор - очевидно код реализующий эту часть написан крайне неэффективно.
Разумеется можно было бы вообще отключить опрос порта, но в таком случае монтировать и размонтировать пришлось бы вручную, что не есть удобно для большинства пользователей. Совсем отключить блокировку диска никак нельзя - по другому нельзя гарантировать актуальность данных в кэше устройства.
Если кто-найдет решение чтобы и овцы целы и волки сыты и пастух жив - я буду рад за вас.
CleverMouse
Поскольку на 99% код для ATAPI и iso9660 (joliet) написан мной, то я объясню непонятные места.
1) Joliet потому что мне лень было писать поддержку для ASCII имен. При том что у меня не было ни одного диска (из 300 штук) на тот момент отличающихся от Joliet. Код тупо ищет нужный ему описатель и использует его - ничего не мешает дописать поиск другого описателя (Кулаков Владимир "Дисковая подсистема ПК" в помощь) и написать код работающий с ASCII именами. Только вот от поддержки символов отличных от латиницы на системном CD диске (раз уж оно будет формироваться по старому стандарту) тогда вспоминать не нужно - впрочем их вроде и так нет. У меня нет времени, возможности и честно говоря я этим кодом никак не заинтересован, но любой желающий может сделать. Вообще на диски куча подстандартов и я удивляюсь почему мне еще никто не предъявил претензии насчет поддержки UDF -наверное потому что MPEG2 плеера для DVD дисков у нас еще нет.
2) Насчет тормозов в Qemu - да они есть. Об этом я уже писал на форуме. Все потому что производители ATAPI устройств не озаботились повесить событие нажатия кнопки на прерывание. В результате приходится тупо читать состояние порта. На реальных компьютерах это не вызывает никаких проблем - проверено на Cyrix233 (187 МГц). В Qemu почему то опрос с периодичностью 0,1 секунды вызывает жуткий ступор - очевидно код реализующий эту часть написан крайне неэффективно.
Разумеется можно было бы вообще отключить опрос порта, но в таком случае монтировать и размонтировать пришлось бы вручную, что не есть удобно для большинства пользователей. Совсем отключить блокировку диска никак нельзя - по другому нельзя гарантировать актуальность данных в кэше устройства.
Если кто-найдет решение чтобы и овцы целы и волки сыты и пастух жив - я буду рад за вас.
Mario
Может тебе посмотреть внимательней check_ATAPI_device_event. Там наверное с таймингами или с флагами проблема.
Может тебе посмотреть внимательней check_ATAPI_device_event. Там наверное с таймингами или с флагами проблема.
Serge
Вообще-то когда я обнаружил эту фичу с Qemu - а нашел я это гораздо раньше чем все остальные, то я ковырял код как мог. С точки зрения логики там все нормально и я не вижу причину такого мутного поведения. Про крайне неэффективный код - это были слова про Qemu.
Есть смысл проверить на других эмуляторах, но у меня их нет по рукой в настоящее время. Дома нет сети, а на работе я не имею времени и возможности заниматься Колибри.
Вообще-то когда я обнаружил эту фичу с Qemu - а нашел я это гораздо раньше чем все остальные, то я ковырял код как мог. С точки зрения логики там все нормально и я не вижу причину такого мутного поведения. Про крайне неэффективный код - это были слова про Qemu.
Есть смысл проверить на других эмуляторах, но у меня их нет по рукой в настоящее время. Дома нет сети, а на работе я не имею времени и возможности заниматься Колибри.
Mario
Чтение CD в qemu не тормозит, хотя там pio. И в никсах проблем не было. Я в qemu инсталлировал убунту с iso livecd.
Чтение CD в qemu не тормозит, хотя там pio. И в никсах проблем не было. Я в qemu инсталлировал убунту с iso livecd.
Qemu - если не брать совсем последнюю версию - не знает про ATAPI-команду GET_EVENT_STATUS_NOTIFICATION, так что отзывается на неё ошибкой. Тем не менее, код чтения ответа от устройства эту ошибку игнорировал и долго ждал, пока не появятся данные, причём в основном потоке ядра - отсюда тормоза. Я переставила код проверки ошибки во внутренний цикл ожидания в r1909 - тормоза исчезли.
http://builds.kolibrios.org/.test/kolibri2.iso - пока так.
Сделаем мир лучше!
Ну, я рад за тебя. Всяко приятно в чужом коду соринку найти.
В оправдание могу только сказать, что в доступной документации не совсем четко было расписано. По крайней мере на тот момент.
В оправдание могу только сказать, что в доступной документации не совсем четко было расписано. По крайней мере на тот момент.
Команда входит в список обязательных для всех устройств. Эмуляторы
Вот так вот в результате и появляются всякие kqemu для Linux, которые работают исключительно при поддержке драйвером со стороны гостевой ОС, а всем остальным - фиг вам ускорение и прочие вкусности, в результате лишний код.
Поскольку возражений по поводу LiveCD не поступало, я настроила автосборку на генерацию дополнительно образа LiveCD.
Сделаем мир лучше!
CleverMouse
Спасибо, всё отлично работает. Осталось определится с генерацией ID для LiveCD. Можно использовать версию svn и текущее время или аналог mktemp() ?
Спасибо, всё отлично работает. Осталось определится с генерацией ID для LiveCD. Можно использовать версию svn и текущее время или аналог mktemp() ?
Serge, разве не проще определять физическое размещение CD через int 13h/ah=48h? Код в bootcode.inc уже давно пользуется этой функцией для определения, идёт ли загрузка дискеты с реальной дискеты или с CD, но функция возвращает всю нужную информацию.
При выполнении мейкфайлов есть и сведения о текущей версии svn, и все возможности шелла, в том числе date и mktemp.
При выполнении мейкфайлов есть и сведения о текущей версии svn, и все возможности шелла, в том числе date и mktemp.
Сделаем мир лучше!
Who is online
Users browsing this forum: No registered users and 33 guests