Хочу по тихой грусти рабить ядро на несколько модулей..

Kernel architecture questions
  • собственно возник вопрос... а как узнать, какое именно устройство загрузочное? Просто сразу же в начальном загрузчике сохранить регистр dl или я не правильно понимаю?
  • В текущем состоянии дел, когда все в ядре, наличее вторичного загрзчика будет нужным. Рассмотим модель загрузки ОС:
    Первичный загручкик стартует, загружает ядро, ядро уже сохраняет некоторые параметры, загружает образ, делает RAM диск и т.д. Т.е. если отделить вторичный загручик, то он будет делать загрузку ядра, формирование RAM диска, сохранение определенных настроек (скажем из blue screen) загрузка ядра, и т.д. ... Для этого нужно сделать поддержку обработки ini файла на уровне вторичного загрузчика, сохранение и загрузку. Частично можно подсмотреть обработку ini файлов в библиотеке от майка, и в принципе сделать все остальное. Но для каждой файловой системы нужне будет свой первичный загрузчик, и поддержка им callback функций.
  • Ну, про первичный загрузчик это да. Сейчас думаю, как передать номер загрузоного устройства вторичному загрузчику (смотрю код первичного, обнуляется ли там dl перед передачей управления). Т.е. вообще, после загрузки вторичного загрузчика после того, как он получает управление, с моей точки зрения он должен сделать: смотрим таблицу параметров тома, и определяем к использованию процедуры чтения/записи для данной ФС... После чего проверяем наличие конфигурационного файла, скажем boot.ini. Хотя, чтоб не по аналогии виндой и никсами, пусть будет kolibri.cfg... Если его нет - создаем, далее определяем оборудование, спрашиваем пользователя про видеорежимы и т.п., пишем информацию в файл... Если пользователю нужен RAM-диск, формируем его, загружаем ядро и передаем ему управление. Т.е. от первиного загрузчика нам нужен только номер загрузочноного устройства, и больше ничего собственно. все остальное мы в состоянии выяснить сами...
  • Hack_phoenix

    Сделай загрузку GRUBом. Это сложно, но можно. Функциональность системы вырастет на порядок.
  • Ну кроме WinImage есть ещё гнутая программулина (приеду домой вспоню как называетя), в линуксе запросто можеш монтировать образ как обычную дискету, с досом - хз, ибо не приходилось этим в нем заниматся. Сборку без RAM`а вроде кто то уже делал. Хоче делать - делай, всё польза ).
    Про вторичный загрузчик. Что ты под ним понимаеш и подробнее что хочеш сам в нем сделать? В принципе то о чем ты писал выше, происходит в /boot/bootcode.inc посути это и есть вторичный загрузчик, просто если можно так сказать "собраный" вместе с ядром. В их разделении я вижу потенциальную проблему в будущем, с совместимостью вторичного загрузчика и ядра, так как обе эти части сильно связаны (предварительная инициализация железа, и его последующее использование).
    В общем я не вижу сейчас острой необходимости в их разделении. Насколько я понимаю ты хорошо разбираешся в низкоуровневом программировании x86 (как звучит то криво, ну вы меня поняли), может найдеш задачу поинтереснее?
    [offtop]млин, пока писал, опять кучу постов пропустил ((([/offtop]

    Про GRUB польностью согласен, было бы хорошо.
  • Эх... Было бы время. Просто я хочу как раз разделить инициализацию оборудования от ядра. Сейчас смотрю на GRUB. Ядро у нас монолит... Я не вижу потенциальных проблем, я вижу дальнейшее разбиение на модули, плюс уменьшение ядра. Именно отделить bootcode плюс оставить именно на него задачу инициализации и предзагрузочной конфигурации системы... Дать возможность зщапускать различные ядра и т.д. Сейчас смотрю в сторону GRUB. Разберусь с этой задачей, потом все же хочу сделать шаг в сторону микроядра.
  • поддерживаю мнение насчет GRUB
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Короче, ТЗ получил, сроков не называю :)
  • Hack_phoenix

    Если осилишь GRUB огромный респект тебе будет. Я подумывал сам взяться но асм меня уже задолбал. Зато могу приделать новый менеджер страничной памяти и прислать код для инициализации ядра после GRUBа.
  • Я пока слил WinGrub, изучаю... Я этим загрузчиком не пользовался в общем ни разу, сейчас осваиваюсь с синтаксисом... Читаю доки...
  • Эм... Получается, надо просто привести ядро к формату, который понимает GRUB? Я что-т не понял... Я считал, что загрузил файл, передал управление и усе, а тут...
  • 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 уже в защищённом режиме.
  • Угу. сейчас как раз читаю multiboot specification. чешу репу :). Если он передает управление уже в защищенном режиме, тогда придется ядро хорошо править. :).
  • Как я понимаю, нужно будет после получения управления сразу установить свои GDT и IDT, стек и прочее, а потом bluescreen переписывать, уже под защищенный режим, ибо прерывания BIOS там не заюзать... Хотя, есть возможность уйти в реальный режим после получения управления, а затем перейти в него своими средствами... Это проще...
  • Who is online

    Users browsing this forum: No registered users and 1 guest