Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Apr 19, 2019 3:44 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 39 posts ]  Go to page Previous 1 2 3 Next
Author Message
PostPosted: Fri Jul 04, 2008 12:54 pm 
Offline

Joined: Thu Sep 20, 2007 8:09 pm
Posts: 96
Предлагаю обсудить задачи, которые должны выполняться вторичным загрузчиком и алгоритмы работы.


Top
   
PostPosted: Fri Jul 04, 2008 1:22 pm 
Offline

Joined: Thu Sep 20, 2007 8:09 pm
Posts: 96
собственно возник вопрос... а как узнать, какое именно устройство загрузочное? Просто сразу же в начальном загрузчике сохранить регистр dl или я не правильно понимаю?


Top
   
PostPosted: Fri Jul 04, 2008 1:29 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
В текущем состоянии дел, когда все в ядре, наличее вторичного загрзчика будет нужным. Рассмотим модель загрузки ОС:
Первичный загручкик стартует, загружает ядро, ядро уже сохраняет некоторые параметры, загружает образ, делает RAM диск и т.д. Т.е. если отделить вторичный загручик, то он будет делать загрузку ядра, формирование RAM диска, сохранение определенных настроек (скажем из blue screen) загрузка ядра, и т.д. ... Для этого нужно сделать поддержку обработки ini файла на уровне вторичного загрузчика, сохранение и загрузку. Частично можно подсмотреть обработку ini файлов в библиотеке от майка, и в принципе сделать все остальное. Но для каждой файловой системы нужне будет свой первичный загрузчик, и поддержка им callback функций.


Top
   
PostPosted: Fri Jul 04, 2008 1:42 pm 
Offline

Joined: Thu Sep 20, 2007 8:09 pm
Posts: 96
Ну, про первичный загрузчик это да. Сейчас думаю, как передать номер загрузоного устройства вторичному загрузчику (смотрю код первичного, обнуляется ли там dl перед передачей управления). Т.е. вообще, после загрузки вторичного загрузчика после того, как он получает управление, с моей точки зрения он должен сделать: смотрим таблицу параметров тома, и определяем к использованию процедуры чтения/записи для данной ФС... После чего проверяем наличие конфигурационного файла, скажем boot.ini. Хотя, чтоб не по аналогии виндой и никсами, пусть будет kolibri.cfg... Если его нет - создаем, далее определяем оборудование, спрашиваем пользователя про видеорежимы и т.п., пишем информацию в файл... Если пользователю нужен RAM-диск, формируем его, загружаем ядро и передаем ему управление. Т.е. от первиного загрузчика нам нужен только номер загрузочноного устройства, и больше ничего собственно. все остальное мы в состоянии выяснить сами...


Top
   
PostPosted: Fri Jul 04, 2008 2:30 pm 
Offline
Kernel Developer

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

Сделай загрузку GRUBом. Это сложно, но можно. Функциональность системы вырастет на порядок.


Top
   
PostPosted: Fri Jul 04, 2008 3:05 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Ну кроме WinImage есть ещё гнутая программулина (приеду домой вспоню как называетя), в линуксе запросто можеш монтировать образ как обычную дискету, с досом - хз, ибо не приходилось этим в нем заниматся. Сборку без RAM`а вроде кто то уже делал. Хоче делать - делай, всё польза ).
Про вторичный загрузчик. Что ты под ним понимаеш и подробнее что хочеш сам в нем сделать? В принципе то о чем ты писал выше, происходит в /boot/bootcode.inc посути это и есть вторичный загрузчик, просто если можно так сказать "собраный" вместе с ядром. В их разделении я вижу потенциальную проблему в будущем, с совместимостью вторичного загрузчика и ядра, так как обе эти части сильно связаны (предварительная инициализация железа, и его последующее использование).
В общем я не вижу сейчас острой необходимости в их разделении. Насколько я понимаю ты хорошо разбираешся в низкоуровневом программировании x86 (как звучит то криво, ну вы меня поняли), может найдеш задачу поинтереснее?
[offtop]млин, пока писал, опять кучу постов пропустил ((([/offtop]

Про GRUB польностью согласен, было бы хорошо.


Top
   
PostPosted: Fri Jul 04, 2008 3:23 pm 
Offline

Joined: Thu Sep 20, 2007 8:09 pm
Posts: 96
Эх... Было бы время. Просто я хочу как раз разделить инициализацию оборудования от ядра. Сейчас смотрю на GRUB. Ядро у нас монолит... Я не вижу потенциальных проблем, я вижу дальнейшее разбиение на модули, плюс уменьшение ядра. Именно отделить bootcode плюс оставить именно на него задачу инициализации и предзагрузочной конфигурации системы... Дать возможность зщапускать различные ядра и т.д. Сейчас смотрю в сторону GRUB. Разберусь с этой задачей, потом все же хочу сделать шаг в сторону микроядра.


Top
   
PostPosted: Fri Jul 04, 2008 3:25 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
поддерживаю мнение насчет GRUB

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
PostPosted: Fri Jul 04, 2008 3:32 pm 
Offline

Joined: Thu Sep 20, 2007 8:09 pm
Posts: 96
Короче, ТЗ получил, сроков не называю :)


Top
   
PostPosted: Fri Jul 04, 2008 3:50 pm 
Offline
Kernel Developer

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

Если осилишь GRUB огромный респект тебе будет. Я подумывал сам взяться но асм меня уже задолбал. Зато могу приделать новый менеджер страничной памяти и прислать код для инициализации ядра после GRUBа.


Top
   
PostPosted: Fri Jul 04, 2008 3:59 pm 
Offline

Joined: Thu Sep 20, 2007 8:09 pm
Posts: 96
Я пока слил WinGrub, изучаю... Я этим загрузчиком не пользовался в общем ни разу, сейчас осваиваюсь с синтаксисом... Читаю доки...


Top
   
PostPosted: Fri Jul 04, 2008 4:33 pm 
Offline

Joined: Thu Sep 20, 2007 8:09 pm
Posts: 96
Эм... Получается, надо просто привести ядро к формату, который понимает GRUB? Я что-т не понял... Я считал, что загрузил файл, передал управление и усе, а тут...


Top
   
PostPosted: Fri Jul 04, 2008 4:55 pm 
Offline
Kernel Developer

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

Чтобы передать управление Груб ищет заголовок в первых восьми килобайтах файла.

mboot:
dd 0x1BADB002
dd 0x00010003
dd -(0x1BADB002 + 0x00010003)
dd mboot
dd 0x100000
dd _edata ;
dd _end
dd __start
Поля подробно описаны в Multiboot Specification

Ядро грузится по адресу 0х100000. Груб передаст управление на __start уже в защищённом режиме.


Top
   
PostPosted: Fri Jul 04, 2008 5:06 pm 
Offline

Joined: Thu Sep 20, 2007 8:09 pm
Posts: 96
Угу. сейчас как раз читаю multiboot specification. чешу репу :). Если он передает управление уже в защищенном режиме, тогда придется ядро хорошо править. :).


Top
   
PostPosted: Fri Jul 04, 2008 5:11 pm 
Offline

Joined: Thu Sep 20, 2007 8:09 pm
Posts: 96
Как я понимаю, нужно будет после получения управления сразу установить свои GDT и IDT, стек и прочее, а потом bluescreen переписывать, уже под защищенный режим, ибо прерывания BIOS там не заюзать... Хотя, есть возможность уйти в реальный режим после получения управления, а затем перейти в него своими средствами... Это проще...


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 39 posts ]  Go to page Previous 1 2 3 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


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