Board.KolibriOS.org

Official KolibriOS board
It is currently Mon Sep 21, 2020 11:11 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 1323 posts ]  Go to page Previous 113 14 15 16 1789 Next
Author Message
PostPosted: Tue Mar 22, 2011 7:33 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
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/ . Но сначала необходимо разобраться с тормозами в эмуляторе.


Top
   
PostPosted: Tue Mar 22, 2011 7:56 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1624
То есть что-то наподобие http://builds.kolibrios.org/.test/kolibri1.iso ?


Top
   
PostPosted: Tue Mar 22, 2011 8:06 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario
замаскировал вызов check_ATAPI_device_event и тормоза в QEMU чудесным образом исчезли.


Top
   
PostPosted: Tue Mar 22, 2011 8:17 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
CleverMouse
Да, грузится отлично. Для начала подходит обычный образ без всяких изменений. Я посмотрел последний LiveCD от diamond-а. Там не так много дополнительных программ и весь дискеточный дистрибутив в корне CD.


Top
   
PostPosted: Wed Mar 23, 2011 9:11 am 
Serge
CleverMouse
Поскольку на 99% код для ATAPI и iso9660 (joliet) написан мной, то я объясню непонятные места.

1) Joliet потому что мне лень было писать поддержку для ASCII имен. При том что у меня не было ни одного диска (из 300 штук) на тот момент отличающихся от Joliet. Код тупо ищет нужный ему описатель и использует его - ничего не мешает дописать поиск другого описателя (Кулаков Владимир "Дисковая подсистема ПК" в помощь) и написать код работающий с ASCII именами. Только вот от поддержки символов отличных от латиницы на системном CD диске (раз уж оно будет формироваться по старому стандарту) тогда вспоминать не нужно - впрочем их вроде и так нет. У меня нет времени, возможности и честно говоря я этим кодом никак не заинтересован, но любой желающий может сделать. Вообще на диски куча подстандартов и я удивляюсь почему мне еще никто не предъявил претензии насчет поддержки UDF -наверное потому что MPEG2 плеера для DVD дисков у нас еще нет. :lol:

2) Насчет тормозов в Qemu - да они есть. Об этом я уже писал на форуме. Все потому что производители ATAPI устройств не озаботились повесить событие нажатия кнопки на прерывание. В результате приходится тупо читать состояние порта. На реальных компьютерах это не вызывает никаких проблем - проверено на Cyrix233 (187 МГц). В Qemu почему то опрос с периодичностью 0,1 секунды вызывает жуткий ступор - очевидно код реализующий эту часть написан крайне неэффективно.

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

Если кто-найдет решение чтобы и овцы целы и волки сыты и пастух жив - я буду рад за вас. :mrgreen:


Top
   
PostPosted: Wed Mar 23, 2011 11:51 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario

Может тебе посмотреть внимательней check_ATAPI_device_event. Там наверное с таймингами или с флагами проблема.


Top
   
PostPosted: Wed Mar 23, 2011 2:36 pm 
Serge
Вообще-то когда я обнаружил эту фичу с Qemu - а нашел я это гораздо раньше чем все остальные, то я ковырял код как мог. С точки зрения логики там все нормально и я не вижу причину такого мутного поведения. Про крайне неэффективный код - это были слова про Qemu.

Есть смысл проверить на других эмуляторах, но у меня их нет по рукой в настоящее время. Дома нет сети, а на работе я не имею времени и возможности заниматься Колибри.


Top
   
PostPosted: Wed Mar 23, 2011 3:12 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario

Чтение CD в qemu не тормозит, хотя там pio. И в никсах проблем не было. Я в qemu инсталлировал убунту с iso livecd.


Top
   
PostPosted: Wed Mar 23, 2011 3:53 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1624
Это называется "С точки зрения логики там все нормально и я не вижу причину такого мутного поведения"?
Qemu - если не брать совсем последнюю версию - не знает про ATAPI-команду GET_EVENT_STATUS_NOTIFICATION, так что отзывается на неё ошибкой. Тем не менее, код чтения ответа от устройства эту ошибку игнорировал и долго ждал, пока не появятся данные, причём в основном потоке ядра - отсюда тормоза. Я переставила код проверки ошибки во внутренний цикл ожидания в r1909 - тормоза исчезли.
http://builds.kolibrios.org/.test/kolibri2.iso - пока так.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Wed Mar 23, 2011 4:04 pm 
Ну, я рад за тебя. Всяко приятно в чужом коду соринку найти. :lol:
В оправдание могу только сказать, что в доступной документации не совсем четко было расписано. По крайней мере на тот момент.


Top
   
PostPosted: Wed Mar 23, 2011 4:25 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Команда входит в список обязательных для всех устройств. Эмуляторы :twisted:


Top
   
PostPosted: Thu Mar 24, 2011 10:16 am 
Вот так вот в результате и появляются всякие kqemu для Linux, которые работают исключительно при поддержке драйвером со стороны гостевой ОС, а всем остальным - фиг вам ускорение и прочие вкусности, в результате лишний код.


Top
   
PostPosted: Mon Mar 28, 2011 1:34 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1624
Поскольку возражений по поводу LiveCD не поступало, я настроила автосборку на генерацию дополнительно образа LiveCD.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Tue Mar 29, 2011 1:04 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
CleverMouse

Спасибо, всё отлично работает. Осталось определится с генерацией ID для LiveCD. Можно использовать версию svn и текущее время или аналог mktemp() ?


Top
   
PostPosted: Tue Mar 29, 2011 3:51 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1624
Serge, разве не проще определять физическое размещение CD через int 13h/ah=48h? Код в bootcode.inc уже давно пользуется этой функцией для определения, идёт ли загрузка дискеты с реальной дискеты или с CD, но функция возвращает всю нужную информацию.
При выполнении мейкфайлов есть и сведения о текущей версии svn, и все возможности шелла, в том числе date и mktemp.

_________________
Сделаем мир лучше!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1323 posts ]  Go to page Previous 113 14 15 16 1789 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited