LINUX.ORG.RU

попытка написать загрузчик

 ,


1

1

здрасьте здрасьте люди добрые

хочу попытаться написать что-то вроде загрузчика для Linux.

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

скажите с чего начать? писать планирую в Nano.

возникают вопросы, каким должно быть расширение файла? 

и если несложно то скажите на каком языке лучше это делать? на Assembler или лучше перевести сразу в машинные инструкции?

скажите с чего начать?

Изучить код существующего загрузчика для того, чтобы быть в «теме».

Владимир

anonymous
()

писать планирую в Nano

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

каким должно быть расширение файла

.loader

anonymous
()

на Assembler или лучше перевести сразу в машинные инструкции?

Это как?
Минуя ассемблер сразу писать бинарный код?

Владимир

anonymous
()

и если несложно то скажите на каком языке лучше это делать?

На C/C++. Сейчас для загрузки ОС используется интерфейс UEFI. В некоторых старых туториалах используется BIOS и 16 битный ассемблер, но это всё давно устарело и в некоторых компьютерах уже не поддерживается. Для UEFI можно спокойно писать на любом компилируемом языке программирования который умеет компилироваться в PE executable. Для C/C++ лучше использовать компилятор Clang потому что он поддерживает кросс-компиляцию и EFI совместимые PE исполняемые файлы.

Hello world выглядит примерно так:

#include <efi/system-table.h>

efi_handle gImage;
efi_system_table *gSystemTable;


extern "C" efi_status
efi_main(efi_handle image, efi_system_table *systemTable)
{
	gImage = image;
	gSystemTable = systemTable;

	gSystemTable->ConOut->OutputString(systemTable->ConOut, (char16_t*)u"efi_main()\r\n");

	return EFI_SUCCESS;
}
X512 ★★★★★
()

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

Да, профи на этом форуме много.
И вы станете профи - но не сразу …

Владимир

anonymous
()

тяжело не пытаться сделать что-то самому, когда все кругом этим занимаются.

Все занимаются написанием загрузчиков?!

Я вроде с этого начинал. Давно было, не помню толком.

anonymous
()

«Вот тебе голубчик, овчинный тулупчик».

https://littleosbook.github.io/                            Об создании OS
                                                           Об создании OS.pdf

https://habrahabr.ru/post/343690/                          Как выйти на путь разработки ОС

https://habrahabr.ru/post/351082/                          Операционные системы с нуля; Уровень 1 (младшая половина)

https://habrahabr.ru/post/351568/                          Операционная система на Rust: минимальный multiboot загрузчик
                                                           https://os.phil-opp.com/multiboot-kernel/

https://habrahabr.ru/post/351774/                          Операционные системы с нуля; уровень 1 (старшая половина)
https://habrahabr.ru/post/352414/                          Операционные системы с нуля; уровень 2 (младшая половина)
https://habrahabr.ru/post/353994/                          Операционные системы с нуля; уровень 3 (младшая половина)
https://habr.com/post/354784/                              Операционные системы с нуля; уровень 3 (старшая половина) https://web.stanford.edu/class/cs140e/assignments/3-spawn/#subphase-e-exception-return

https://os.phil-opp.com/entering-longmode/                 Entering Long Mode

https://habr.com/post/426525/                              Написание собственной работоспособной ОС за полгода

https://vk.com/butterflyos

https://habr.com/search/?q=%5Bosdev%5D&target_type=posts

https://habr.com/ru/post/436606/                           Пишем операционную систему на Rust. Страничная организация памяти https://os.phil-opp.com/paging-introduction/

https://habr.com/ru/post/467759/                           Разработка Unix подобной OS Виртуальное адресное пространство (6) _ Хабр

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Это я к тому, что не было тогда UEFI. А то двусмысленно получилось.

anonymous
()
Ответ на: комментарий от imb

https://gitlab.denx.de/u-boot/u-boot

Directory Hierarchy:
====================

/arch			Architecture specific files
  /arc			Files generic to ARC architecture
  /arm			Files generic to ARM architecture
  /m68k			Files generic to m68k architecture
  /microblaze		Files generic to microblaze architecture
  /mips			Files generic to MIPS architecture
  /nds32		Files generic to NDS32 architecture
  /nios2		Files generic to Altera NIOS2 architecture
  /openrisc		Files generic to OpenRISC architecture
  /powerpc		Files generic to PowerPC architecture
  /riscv		Files generic to RISC-V architecture
  /sandbox		Files generic to HW-independent "sandbox"
  /sh			Files generic to SH architecture
  /x86			Files generic to x86 architecture

В проекте 1761 директорий и 16784 файлов

Владимир

anonymous
()
Ответ на: комментарий от anonymous

В проекте 1761 директорий и 16784 файлов

Впрочем это же не футбол в котором, «Кто выще бье, тот лучше грае» .

Владимир

anonymous
()
Ответ на: комментарий от paramon

поддерживается на UEFI

я у себя отключил csm, адекватные дистрибутивы поддерживают чистый efi

anonymous
()
Ответ на: комментарий от paramon

Еще актуально.

Автор темы не указал под какую платформу он собрался писать загрузчик. Я предположил, что платформа: современный x86_64 ПК. Если автора интересует старое железо, ARM или ещё что-нибудь, пусть напишет.

BIOS-загрузка поддерживается на UEFI

Не всегда. На некоторых новых x86 компьютерах BIOS MBR загрузка не работает. Со временем таких компьютеров будет всё больше.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)

писать планирую в Nano

наш человек

anonymous
()
Ответ на: комментарий от X512

Я бы предложил ТСу использовать всё-таки EDK2. Да, он более объёмный и сложнее чем GNU-EFI но всё же если надо весь функционал изучить то я бы выбрал EDK2

golovastik
()
Ответ на: комментарий от X512

мега-костыль

вантузятнику бомбит со смекалочки

anonymous
()
Ответ на: комментарий от anonymous

Да, именно так

если я использую bios mbr, и буду писать в машинных инструкциях, то какое расширение файла выставить?

Assembler
() автор топика
Ответ на: комментарий от anonymous

это не важно на каком языке будет написанн загрузчик?

Assembler
() автор топика
Ответ на: комментарий от X512

это важное для меня уточнение. скажите, а может получиться скомпилить спомощью gcc , если все будет написанно на Ассемблер

.code16

такая директива способна создать код для реального режима?

Assembler
() автор топика

спасибо всем кто откликнулся и написал.

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

Assembler
() автор топика
Ответ на: комментарий от burato

Зачем ему? Он конечно тут благодаря вам сильно поднабрал но как был клоуном так и останется. Мысль конечна хорошая что лучше написать свое чем изучать кривонаписаное другими. Но он непотянет.

Вам же огромный плюс. Вы из ничего сделали что то похожее на кодера. Вот так не зная автора можно решить что он настоящий. Молодцы лорчане.

anonymous
()
Ответ на: комментарий от imb

Он не arm_щик. Я понял с кем вы его путаете.

anonymous
()
Ответ на: комментарий от Assembler

если я использую bios mbr

Тогда только на ассемблере. Расширение исходника *.s для GNU assembler, *.asm для NASM. В результате должен получится бинарный файл не важно с каким расширением и размером 512 байт, который нужно записать в начало диска или раздела. Писать нужно на 16 битном ассемблере real mode. Только учти что 16 бинтый ассемблер и real mode устарели и полученные знания вам скорее всего нигде кроме загрузчика не понадобятся.

X512 ★★★★★
()

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

Чем?

anonymous
()

скажите с чего начать?

Сформулировать, чем не устраивают существующие загрузчики.

hobbit ★★★★★
()
Ответ на: комментарий от Harald

Лично я тебя поддерживаю в таких предложениях. Тут не детсад.

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от hobbit

Сформулировать, чем не устраивают существующие загрузчики.

Тем, что требюут конфиги. В Haiku загрузчик автоматически находит системный раздел и работает безо всяких конфигов.

X512 ★★★★★
()
Ответ на: комментарий от X512

Ну вот, я хотел услышать, что ТС скажет :)

hobbit ★★★★★
()
Ответ на: комментарий от Assembler

Понятно.

На самом деле, вполне нормальный аргумент, своё время от времени хочется написать каждому. Правда, загрузчик для линукс это не совсем типично, обычно сразу на свою ОС замахиваются. :)

hobbit ★★★★★
()

вызыванно

Етижы-пассатижы….

Zhbert ★★★★★
()

скажите с чего начать? писать планирую в Nano.

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

Zhbert ★★★★★
()

когда все кругом этим занимаются

Я с утра уже два загрузчика написал.

theNamelessOne ★★★★★
()
Ответ на: комментарий от Zhbert

непоняли. расширение файла наверное иногда может и зависить от того в чем пишешь. поэтому я сразу сказал, что кроме Nano ничего не имею и писать буду в нем. Под Linux в Nano. все это лишь для того чтобы люди могли правильно подсказать расширение файла

Assembler
() автор топика
Ответ на: комментарий от Assembler

файла наверное иногда может и зависить от того в чем пишешь. поэтому я сразу сказал, что кроме Nano ничего не имею и писать буду в нем. Под Linux в Nano. все это лишь для того чтобы люди могли правильно подсказать расширение файла

Причем тут расширение файла вообще? Что ты знаешь о программировании и языках его в целом?

Zhbert ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.