LINUX.ORG.RU
ФорумTalks

В чём особенность загрузчиков, что они не могут быть как ОС?

 , ,


0

2

Хотел бы уточнить у тех кто знает, что делает невозможным передачу управления из ОС в ОС без перезагрузки и загрузчика?

А вообще наверное было бы здорово написать такой загрузчик, который мог бы ещё больше чем GRUB. Например редактировать файлы и вообще быть неким быстрым просмотрщиком без ОС и без сети, но с возможностью в любой момент загрузиться в полноценную ОС.

★★★★★

В UEFI Shell есть какой-то текстовый редактор. А так — одно время были штуки типа ASUS Express Gate, но с появлением скоростных SSD их время прошло. И, в крайнем случае, никто не мешает положить iso-шку того же SystemRescue в /boot и сконфигурить груб так, чтобы, если что, загрузиться в неё.

alegz ★★★★★
()

UEFI Shell умеет полноэкранно редактировать файлы, блоки на устройствах массовой памяти и содержимое main storage.

https://uefi.org/sites/default/files/resources/UEFI_Shell_Spec_2_0.pdf#page=138

https://uefi.org/sites/default/files/resources/UEFI_Shell_Spec_2_0.pdf#page=149

To edit a file in hex mode:

fs0:\> hexedit test.bin

• To edit block device fs0 starting at block 0 with size of 2 blocks:

fs0:\> hexedit -d fs0 0 2

• To edit memory region starting at address 0x00000000 with size of 2 bytes:

fs0:\> hexedit -m 0 2
• To edit the 'shell.log' file:
fs0:\> edit shell.log

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

Для старого линукса был модуль, который загружал один линукс из другого http://www.uwsg.indiana.edu/hypermail/linux/kernel/0003.2/1339.html ** Two Linux Monte **

Дурацкая платформа, конечно, может этому помешать.

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

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

тут рассказывается как добавить гуй в UEFI https://habr.com/ru/articles/583450/

так что делать можно много чего.

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

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

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

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

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

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

Мне кажется для такого загрузчика лучше оставить оффлайн-режим.

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

вот тут есть некий курс, который вводит в тему реализации в uefi. https://github.com/tianocore/tianocore.github.io/wiki/UEFI EDKII Learning Dev

в пятом курсе в самом начале есть картинка порядка инициализации.

в общем edk в руки и вперёд ваять.

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

Хм. А что принципиально мешает скомпилировать какой-нибудь OpenWRT в один EFI файл?

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

За курс спасибо. Информация - это полезно.

unDEFER ★★★★★
() автор топика

Хотел бы уточнить у тех кто знает, что делает невозможным передачу управления из ОС в ОС без перезагрузки и загрузчика?

То, что если кто-то передаёт управление в другую ОС, то его называют загрузчиком. Соответственно, чтобы называться ОС, надо НЕ уметь передавать управление в другую.

А вообще наверное было бы здорово написать такой загрузчик, который мог бы ещё больше чем GRUB. Например редактировать файлы и вообще быть неким быстрым просмотрщиком без ОС и без сети, но с возможностью в любой момент загрузиться в полноценную ОС.

Это всё какие-то костыли. Надо просто сделать нормальную неблоатварную ОС, которая и места мало занимает, и умеет всё что нужно.

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

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

Linux уже придумали)

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

Проблема здесь с определением «всё что нужно». Кто-то скажет, что Kolibri всё умеет, даже игры и интернет, кто-то скажет про Hurd, а кто-то, что даже Linux умеет не всё.

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

А всем ли нужна ОС?

Не всем. Можно просто бухать^Wмедитировать на природе.

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

При чём я нашел в своей ОС и вообще во всех проектах фатальный недостаток. Я дошел до этапа, когда нужно проектировать GUI. А если бы я знал, как правильно спроектировать GUI… Но я не знаю. Я могу повторить дизайн или иксов, или винапи, или вяленого. Свежей идеи у меня нет.

А без свежей идеи ГУЯ – пилить ОС дальше смысла нет.

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

Делайте без ГУЯ. Если нет смысла без ГУЯ, то и с ГУЁМ смысла будет немного.

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

и умеет всё что нужно

умеет всё железо, и все файловые системы…

greenman ★★★★★
()

Защита памяти. В ОС, где её нет, это вполне возможно, из DOS и Windows 9x можно запускать Linux через LOADLIN.EXE

Vsevolod-linuxoid ★★★★★
()

было бы здорово написать такой загрузчик, который мог бы ещё больше чем GRUB.

Иной модуль GRUB может больше, чем тот же GRUB, но без этого модуля.

vM ★★
()

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

А почему невозможно то? Есть же гипервизоры и виртуалки где одна ос загружает другую ОС

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

Ну виртуальная машина это всë же не то. Хочется полноценной передачи. Чтобы одна ОС полностью завершила свои процессы и перестала потреблять ресурсы, а вторая загрузилась.

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

Да поди знай кому он для чего. Кто-то из linux через kvm запускает винду или даже macosx и ни в чем себе не отказывает.

Если вернуться к технике, то проблема как выше писали в защищённом режиме. x64 не предполагает выхода из защищённого режима, если он был активирован иначе как через ресет. Так в документации сказано. Есть исключения в виде SMM и виртуализации

cobold ★★★★★
()

Мой загрузчик может даже размечать диск, грузить удаленно и устанавливать какую-то MacOS Big Sur =)

А вообще мсье фигню сморозить изволили.

Загрузчиком в его первоначальном понимании может считаться только первые 512 байт сектора носителя информации, сделанные такими для совместимости с реальным режимом x86. Его задача - передать управление чему-нибудь, находящемуся на полноценных (!) ФС загрузочных дисков.

На ARM например роль загрузчика отводится u-boot.

Но общий смысл концепции загрузчика прост - его можно размещать на небольшом устройстве, к примеру spi-flash, а оттуда оно уже может грузить взрослые ОС с разных устройств.

А вообще наверное было бы здорово написать такой загрузчик, который мог бы ещё больше чем GRUB

Есть такой проект, но боюсь тебе не понравится, начинается буквами «systemd» :))

windows10 ★★★★★
()

Был же какой-то загрузчик который позволял из DOS запустить Linux. То ли dos2lin назывался то ли как-то так.

Xintrea ★★★★★
()

передачу управления из ОС в ОС

Если забить на поиск красивого решения, в uefi есть возможность загрузиться сразу в определенную ОС:

  1. https://habr.com/ru/articles/341766/
  2. rebootto

У себя тестировал - всё работает.

Khronos
()
Последнее исправление: Khronos (всего исправлений: 1)
Ответ на: комментарий от wandrien

Нет ос, в которых ВЕСЬ gui (начиная от root window и далее рекурсивно) построен по принципу DOM. С изоляцией на принципах Shadow DOM.

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

x64 не предполагает выхода из защищённого режима, если он был активирован иначе как через ресет. Так в документации сказано.

Что там в документации сказано, мне не слышно, но в документации AMD написано, что из основного (64-разрядного) подрежима Long Mode можно без сброса перейти в Compatibility (32-разрядный) подрежим, тот самый, в котором 32-разрядные программы работают под управлением 64-разрядного супервизора на x64.

Если достачно привилигий, из Compatibility mode без сброса можно перейти в собственно «защищённый режим» – Legacy Protected mode, таким образом покинув Long Mode. Из Protected mode без сброса можно перейти в Real mode ( в т.ч Unreal).

Сбросом можно перейти в стартовый Real mode из любого режима. Из любого режима устройство может переключить процессор в SMM, подав сигнал на соответствующий вход.

Откуда, куда и как можно переходить, не только написано, но и нарисовано:

Figure 1-6. Operating Modes of the AMD64 Architecture https://image1.slideserve.com/3329209/slide23-n.jpg

в параграфе 1.3 Operating Modes. тома Volume 2: System Programming справочника AMD64 Architecture Programmer’s Manual

https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24593.pdf#page=73

На практике могут работать и недокументированные переходы в обход документированного маршрута.

Способ выхода из Long Mode документирован в 14.7 Leaving Long Mode:

https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24593.pdf#G20.888207

14.7 Leaving Long Mode

  1. Switch to compatibility mode and place the processor at the highest privilege level (CPL=0).
  2. Deactivate long mode by clearing CR0.PG to 0. This causes the processor to clear the LMA bit to
  3. The MOV CR0 instruction used to disable paging must be located in an identity-mapped page. Once paging is disabled, the processor behaves as a standard 32-bit x86 processor.
  4. Load CR3 with the physical base-address of the legacy page tables.
  5. Disable long mode by clearing EFER.LME to 0.
  6. Enable legacy page-translation by setting CR0.PG to 1. The instruction following the MOV CR0 that enables paging must be a branch, and both the MOV CR0 and the following branch instruction must be located in an identity-mapped page
vM ★★
()
Последнее исправление: vM (всего исправлений: 2)
Ответ на: комментарий от unDEFER

Насколько я понимаю

Вы понимаете, но не совсем то.

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

Очень интересно. В каком из этих режимов можно полностью отдать контроль над памятью и передать управление другой ОС?

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

В том-то и дело, что во всех. Нивкаком режиме процессора не предусмотрена сдача защиты памяти. Ни юзерспейс процессов, ни ядерных. Такая «фича» открывала бы огромную дыру в безопасности.

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

Да нет тут никакой проблемы безопасности. Запись в CRx доступна только из ring0. Если злоумышленник каким-то образом добрался до ring0, то разговаривать о безопасности поздновато

cobold ★★★★★
()
Последнее исправление: cobold (всего исправлений: 1)
Ответ на: комментарий от cobold

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

PhD
()

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

а что kexec?

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

kexec пример того что такое переключение ОСей всё же возможно при их правильном взаимодействии.

Но всё же жаль что такого переключения Linux->Windows Windows->Linux до сих пор не реализовано.

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

kexec пример того что такое переключение ОСей всё же возможно

kexec всё же предназначен не для переключения ОСей, а для обслуживания работающего линукса и тестирования разрабатываемого линукса.

Но, конечно, можно разработать firmware на основе линукса, которое будет выполнять IPL Windows 7, OpenSolaris и других систем.

vM ★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)