вызов оболочки из загрузчика - PullRequest
1 голос
/ 02 ноября 2010

Я делаю ОС с нуля. Я сделал привет загрузчик, используя учебники из интернета.

Я застрял на следующем шаге, хотя.

Мне нужно вызвать исполняемый файл (в основном мой код оболочки из кода загрузчика ASM). Я гуглил вокруг и не мог найти ничего существенного, что было бы хорошо объяснено.

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

Спасибо!

1 Ответ

2 голосов
/ 02 ноября 2010

Часть, которая находится между загрузчиком и приложением (например, оболочкой), довольно ... существенная.Можно сказать, что «создание ОС с нуля» на самом деле означает написание этой части, часто называемой kernel ;По сравнению с этим, загрузчик очень маленький и простой.

Давайте возьмем Linux в качестве примера (на 32-битной x86).Оболочка Linux - это набор кодов операций x86, которые ожидают загрузки по фиксированному адресу в ОЗУ (который был выбран, когда оболочка была скомпилирована или, точнее, связана).Первая задача ядра - настроить MMU так, чтобы оболочка имела такой вид памяти.Оболочка будет взаимодействовать с внешним миром, вызывая ядро, и будет делать это через системные вызовы .В Linux-x86 системные вызовы используют код операции int (это вызывает программное прерывание, и аргументы системного вызова обычно передаются в некоторых регистрах).Некоторые важные системные вызовы включают в себя вызовы read и write: с точки зрения оболочки, то, что вы вводите с клавиатуры, может быть прочитано из виртуального файла, проиндексированного дескриптором (целое число со значением0 для «стандартного ввода»).Задача ядра заключается в том, чтобы накапливать нажатия клавиш (каждое из них вызывает аппаратное прерывание, которое получает ядро ​​- ядро ​​должно реагировать на аппаратные прерывания - и переводить в символы) и возвращать их приложению, когда приложениепросит их.Точно так же данные, записанные оболочкой для того, что оболочка считает «стандартным выводом» (дескриптор 1), должны быть преобразованы ядром в отображаемые символы, что подразумевает обращение к видеооборудованию.

AБольшой ресурс обучения созданию операционной системы - Minix .Изначально Minix был задуман как инструмент обучения, подробно описанный в книге Танненбаума «Разработка и внедрение операционных систем» .Это с открытым исходным кодом и бесплатно.Сделайте себе одолжение, скачайте исходный код Minix и купите книгу (или позаимствуйте ее где-нибудь в библиотеке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...