OSDev
http://osdev.su/

Дальнейшая разработка ос после создания загрузчика и консоли
http://osdev.su/viewtopic.php?f=5&t=399
Страница 1 из 2

Автор:  NElamer [ 04 фев 2011, 09:56 ]
Заголовок сообщения:  Дальнейшая разработка ос после создания загрузчика и консоли

Всем привет, в общем проблема такая - несколько дней уже, как меня заинтересовала тема разработки ос, пока по примерам и статьям смог написать на чистом ассемблере загрузчик и консоль, переводит проц в реальный режим (надо бы в защищённый, но так ли это пока важно?), можно вводить команды (пока единственная команда help выводит список команд состоящий из одной лишь её :D), кое как влезло в 512 байт.

Но вот как от этого отталкивать к дальнейшей разработке? - статей почти нет, гугл выдаёт чуть менее чем все статьи либо на тему загрузчика, который уже в целом готов, либо на различные расплывчатые темы, которые непонятно, как сюда применить.

На сколько я понимаю, надо для начала подгрузить ещё несколько секторов, чтоб было, куда расширяться и как-то перейти оттуда на си, потом заняться файловой системой (пока хотя бы одноуровневый фат16), но я так и не нашёл толковых статей и уроков по этому, может подкинете каких-нибудь? :3

Надеюсь, здесь ещё кто-то есть, т.к. сайт выглядит несколько заброшенным.

Автор:  pavia [ 04 фев 2011, 12:52 ]
Заголовок сообщения:  Re: Дальнейшая разработка ос после создания загрузчика и кон

Насколько видно загрузчик у вас не готов. Так как он ничего не грузит.
Да и вопросы у вас собственно по загрузчику.

Загрузчик грузить некоторый файл которому и передает управление.
Процесс загрузки обычно много ступенчатый.
MBR->boot record раздела диска-> boot.bin-> boot.exe->kernel.sys

MBR грузит boot record раздела диска.
MBR выполняет роль мультизагрузчика. Позволяя пользователю выбрать с какого раздела грузить ОС.
Иногда они такие же сложные как загрузчик ОС.

boot record раздела диска разбирает файловую систему и грузит boot.bin
В 512 байт обычно трудно запихнуть полноценный разбор ФС. Поэтому обычно грузится только 512 байт.
boot.bin уже догружает boot.exe
Иногда boot.bin это первые 512 байт файла boot.exe

boot.exe формирует среду для работы ядра. И грузить kernel.sys
Также возможно что грузится драйвер жесткого диска HDD.sys это драйвер может как входить так и не входить в ядро.


В качестве среды для работы ядра. boot.exe определяет число доступной памяти. Переводит процессор в защищенный режим. Создает каталог страниц. Также возможны и другие функции к примеру установка графического режима.

kernel.sys читает файл настроек и выполняет действия согласно этому файлу. Для примера OSRun.ini
В котором прописаны какие программы и сервисы, драйвера надо загрузить.

От ядра требуется следующее - разделять ресурсы компьютера. В качестве таких ресурсов выступает память, процессорное время, аппаратура компьютера.
Уметь грузить задачи и уметь управлять ими. Предоставлять сервис для общения.

Автор:  SII [ 04 фев 2011, 23:45 ]
Заголовок сообщения:  Re: Дальнейшая разработка ос после создания загрузчика и кон

Впихнуть в 512 байт загрузчик целого файла из корневого каталога ФАТ12/16 (и, думаю, ФАТ32) вполне реально; в частности, это реализовано в загрузчике Алексея Фрунзе. Вот в НТФС, наверное, уже нельзя. Во всяком случае, первичный загрузчик Вислы и Семёрки (который в МБР) грузит вторичный загрузчик (первый сектор активного раздела диска), тот грузит ещё 15 (если память не изменяет) секторов, а они уже грузят программу собственно загрузчика (bootmgr), которая обеспечивает загрузку системы.

Автор:  iz56 [ 05 фев 2011, 02:02 ]
Заголовок сообщения:  Re: Дальнейшая разработка ос после создания загрузчика и кон

Сайт выглядит несколько заброшенным по одной простой причине - что бы писать ось нужно много времени и мало интернета. Разобраться с той же ФАТ с ходу не получится. И готовые решения из сети мало чем помогут, если нет очень большого желания. Лично у меня на реализацию простой оси (загрузка с дискеты, переход в PMode, консоль и работа с ФАТ12) - ушло примерно около года. А на данный момент переписываю всё с нуля третий (вроде) раз. Достаточно сказать что начал я в 2007.

Автор:  Himik [ 05 фев 2011, 04:10 ]
Заголовок сообщения:  Re: Дальнейшая разработка ос после создания загрузчика и кон

Заморачиваться на загрузчике не обязательно, потому что есть готовые загрузчики. Здесь в кратце описано:
https://docs.google.com/leaf?id=0B2qk7V ... I1NjAwZWI1

Автор:  SII [ 05 фев 2011, 11:02 ]
Заголовок сообщения:  Re: Дальнейшая разработка ос после создания загрузчика и кон

Himik писал(а):
Заморачиваться на загрузчике не обязательно


Но если толком не знаешь, что это такое и с чем его едят, то лучше с него как раз и начать -- для лучшего понимания процесса загрузки и прочая.

Автор:  NElamer [ 05 фев 2011, 11:26 ]
Заголовок сообщения:  Re: Дальнейшая разработка ос после создания загрузчика и кон

Перевёл проц в защищенный режим, наковырял вывод на экран и ввод с клавиатуры в нём:
Код:
// вызывается в цикле ядром
void kernel_upd()
{
   char keyboard_input = KeyboardIsr();
   
   if (keyboard_input != 0)
   {
      putchar(keyboard_input);
   }
   // TODO если 8, стереть последний введённый символ
}

Код:
// code.h
char codes[] = {0, 0, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 8,'\t','q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']','\n', 0,'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '`',0,'\\', 'z', 'x', 'c', 'v','b', 'n', 'm', ',', '.', '/',0,'*',0,' ',0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,'-', 0, 0, 0,'+', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
char codes_sh[] = {0, 0, '!', '@', '#', '$', '%', '^', '&', '*', '(', ')','_', '+', 8, '\t', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', '\n', 0, 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', '~', 0, '|', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '-', 0, 0, 0, '+', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
// 8 - backspace, на ctrl, alt и пр. стоят заглушки - 0.

Код:
// keyboard.c
#include "code.h"

unsigned shift_state = 0;
 
char KeyboardIsr()
{
    char new_scan_code = inportb(0x60);

    switch(new_scan_code) {
      case 0x2a:
         shift_state = 1;
         break;

      case 0xaa:
         shift_state = 0;
         break;
 
      default:
         if (new_scan_code & 0x80) {
      return 0;
        } else {
      return (shift_state ? codes_sh : codes)[new_scan_code];
        }
        break;
    }

    outportb(0x20,0x20);
}

И как не странно, работает. Но есть проблема - он так быстро выводит, что 1 лёгким нажатием какой-либо кнопки отбивает несколько страниц символов, как его замедлить?

И ещё если нажать шифт и отпустить, он с точки зрения ос остаётся зажатым, событие его отпускания как будто не происходит.

Автор:  Himik [ 05 фев 2011, 16:43 ]
Заголовок сообщения:  Re: Дальнейшая разработка ос после создания загрузчика и кон

SII писал(а):
Но если толком не знаешь, что это такое и с чем его едят, то лучше с него как раз и начать

Небольшой загрузчик он уже написал, этого достаточно. Эта тема гораздо сложней чем кажется, поэтому и рекомендовал не лезть в дебри.

Автор:  Himik [ 05 фев 2011, 16:51 ]
Заголовок сообщения:  Re: Дальнейшая разработка ос после создания загрузчика и кон

NElamer писал(а):
И как не странно, работает. Но есть проблема - он так быстро выводит, что 1 лёгким нажатием какой-либо кнопки отбивает несколько страниц символов, как его замедлить?

Ошибка в том, что обработчик прерывания должен вызываться прерыванием от клавиатуры, а не ядром.

Автор:  NElamer [ 06 фев 2011, 11:34 ]
Заголовок сообщения:  Re: Дальнейшая разработка ос после создания загрузчика и кон

Реально ли создать более-менее работающую ос не используя прерывания или сведя их использование к минимуму? Я не как не могу заставить их нормально работать

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/