Pull to refresh
210
Руслан@checkpoint

Old-time Unix hacker

1,2
Rating
192
Subscribers
Send message

Сразу видно, что Вы "юнит не нашего комьюнити". ;-)

Статья - квинтессценция нейрослопа. Три слова постояно переставляются местами и так по всем терминам. Статья не проясняет ничего кроме того, что ACPI создан для управления питанием. Но это и ёжу понятно, и просто следует из названия. Масса терминов переведенны на русский с очень низким качеством - понять по ним нельзя ровным счетом ничего. Нет ни строки кода примера демонстрирующего хотя бы базовые вещи. Автору толстый минус в карму за такую статью!

Автор наделал кучу ошибок и на них построил систему доказательств очевидного. Так и хочется сказать: "Спасибо, Кэп!"

На форуме FreeBSD есть ветка годичной давности про карту DG2 Arc310. Там народ ставит и пробует разные версии drm-kmod, но 14.3 и 15.0 паникует. Попробуйте собрать последний drm-kmod из исходников с Github-е - возможно проблема уже исправлена.

SSL/TLS высислительно емкие алгоритмы, их реализация на i486 возможна, но скорость шифрования/дешифрования трафика будет катастрофически низкой, вы не сможете дождаться загрузки даже 100К страницы.

Кстати, это не сложно проверить. Лостаточно установить на этот ПК современную ОС Linux или FreeBSD и прогнать тесты OpenSSL.

А какая карта у Вас ? Что показывает pciconf -lv | grep -A 4 vga ?

Дело не в размере страниц, а в протоколе SSL.

У нас тут в сибири морозы за -30С уже вторую неделю стоят, владельцы электричек и прочих гибридов сильно негодуют. :)

Но после вашей статьи я буду совершать 5-ю попытку!

Пишите в личку если возникнут проблемы - помогу чем смогу. :)

bsdinstall. Новый модный молодёжный пока не пробовал.

Приходится констатировать, что HTTPS сделал Web полностью недоступным для маломощных машин.

Я буквально вчера пытался ставить 15.0 на вполне стандартный ПК и не смог - не видит Ethernet, какие-то косяки в инсталлере. Похоже эта версия еще требуется доработки. 14.3 взлетела с пол пинка. :-)

Трамплин на переход в "long mode" (64 бит) действительно находится в /boot/loader, я нашел как это выглядит.

/boot/loader является 32-х битным приложением, у него есть конфигурационный массив struct file_format *file_formats[] который заполнется указателями на функции загрузки и исполнения ELF модуля (или ядра) для различных архитектур:

struct file_format *file_formats[] = {
        &multiboot,
        &multiboot_obj,
#ifdef LOADER_PREFER_AMD64
    &amd64_elf,
    &amd64_elf_obj,
#endif
    &i386_elf,
    &i386_elf_obj,
#ifndef LOADER_PREFER_AMD64
    &amd64_elf,
    &amd64_elf_obj,
#endif
    NULL
};

В свою очередь amd64_elf это структура с двумя указателями на функции загрузки и исполнения:

struct file_format amd64_elf = { elf64_loadfile, elf64_exec };

А elf64_exec это указатель на функцию которая содержит вызов трамплина amd64_tramp().

Получается, что /boot/loader загруженный через MBR может запускать 64-х битные ядра.

Осталось выяснить, почему схема boot0->boot1-boot2->loader не срабатывает в режиме совместимости BIOS (CSM).

Согласно статье в Handbook-е, boot2 состоит из следующих частей: boot2 релокатора, BTX-клиента и BTX-сервера. Переход в защищенный режим прозводиться в BTX сервере - он работает в 0-м кольце. Сервер нужен для возврата в 16-ти битный режим и вызова функций BIOS. BTX-клиент работает в 3-м кольце, он загружает загрузчик четвертой стадии /boot/loader. А этот уже загружает и запускает ядро. Это только часть схемы для MBR. Для других вариантов загрузки все подругому. Я нагуглил статью про процессы загрузки FreeBSD, пытаюсь из неё что-то понять.

Вот, кстати, все схемы по стадиям:

Схемы загрузки FreeBSD
BIOS/ MBR/UFS

  +-> MBR from 'Boot Device' BIOS disk          | MBR
    +-> boot0                                   | STAGE 0
      +-> boot1                                 | STAGE 1
        +-> boot2                               | STAGE 2
          +-> loader                            | STAGE 3
            +-> kernel                          | KERNEL
              +-> init                          | INIT

BIOS/ MBR/ZFS
  +-> MBR from 'Boot Device' BIOS disk          | MBR
    +-> boot0                                   | STAGE 0
      +-> boot1                                 | STAGE 1
        +-> zfsboot         | STAGE 2
          +-> zfsloader    | STAGE 3
            +-> kernel                          | KERNEL
              +-> init                          | INIT

BIOS/ GPT/UFS
  +-> GPT from 'Boot Device' BIOS disk          | GPT
    +-> pmbr                                    | STAGE 0
      +-> gptboot                               | STAGE 1 + STAGE 2
        +-> loader                              | STAGE 3
          +-> kernel                            | KERNEL
            +-> init                            | INIT

BIOS/ GPT/ZFS
  +-> GPT from 'Boot Device' BIOS disk          | GPT
    +-> pmbr                                    | STAGE 0
      +-> gptzfsboot                            | STAGE 1 + STAGE 2
        +-> zfsloader (analogous to loader)     | STAGE 3
          +-> kernel                            | KERNEL
            +-> init                            | INIT

UEFI/GPT/MBR/UFS/ZFS
  +-> GPT/MBR from 'Boot Device' BIOS disk      | GPT/MBR
    +-> UEFI                                    | STAGE 0
      +-> boot1.efi (/efi/boot/boot${ARCH}.efi) | STAGE 1 + STAGE 2
        +-> loader.efi                          | STAGE 3
          +-> kernel                            | KERNEL
            +-> init                            | INIT

UEFI/GPT/MBR/UFS/ZFS (13.0 and later)
  +-> GPT/MBR from 'Boot Device' BIOS disk      | GPT/MBR
    +-> UEFI                                    | STAGE 0
      +-> loader.efi (/efi/FreeBSD/loader.efi)  | STAGE 1-3
        +-> kernel                              | KERNEL
          +-> init                              | INIT

У меня такое ощущение, что вы ZFS пытаетесь накатить в MBR

Нет. ZFS, кстати, надо будет попробовать.

Для загрузки с GPT используется отдельный загрузчик gptboot, он имеется в двух вариантах для UEFI и для BIOS.

Функция elf64_exec() это трамплин, её вызов присутствует в нескольких загрузчиках, в том числе в UEFI, gptboot, userboot, но её вызова нет из boot1-boot2 (MBR загрузчик). Код boot1, boot2 и BTX весь 32-х битный. Этот загрузчик хорошо задокументирован - есть большая с статья с описанием в Handbook-е. Про устройство остальных загрузчиков информации мало, надо изучать код.

Что такое userboot мне пока не понятно.

Спасибо, но причем тут FreeBSD ? 32-х битная FreeBSD загружается без танцев с подменой загрузчика - это на случай если Вы статью не читали.

Так Вы напишите пару интересных статей в песочницу, и желательно без нейрослопа. И будет Вам кармы хоть на рынке торгуй. :)

В статье я описывал, что занимался сборкой ядер, драйверов и системных приложений для FreeBSD, у меня установлены ВСЕ необходимые для этого тулы. rustc среди них пока что не замечен, кода на Rust в ядре нет! (три раза сплюнул)

Я кое-что протестировал и вот что обнаружил. Старая машинка у меня всё же оказалась с UEFI, c 32-х битным, в ней AMD E-350 где-то 2011 года. Так вот, при попытке установить 64-х битную FreeBSD 15.0-RELEASE в раздел MBR, фрюшный Инсталлер добросовестно предупреждает, что загружаться система НЕ будет:

Фото 1

И действительно, после завершения установки и перезагрузки, от BIOS вывалило следующее сообщение:

Фото 2

То есть возвращаясь к изначальному вопросу пользователя @unreal_undead2 , ответ следующий: 64-х битная FreeBSD на 32-х битном и на 64-х битном UEFI в режиме BIOS (CSM) не загружается!

А вот с GPT таблицей разделов - очень даже загружается! Но как я отмечал в статье, старые макбуки не распознают диск с таблицей GPT как загрузочный! Поэтому, выходов у меня было два: либо ставить 32-х битную FreeBSD, либо патчить загрузчик loader_ia32.efi чтобы установить 64-х битную. Я проделал оба варианта.

Как ведет себя 64-х битная FreeBSD на машинах без UEFI я пока проверить не могу. Но я потратил некоторое время на чтение исходных кодов загрузчиков, которые используются при старте из MBR, и я пока НЕ вижу там кода "трамплина" для перехода в "long mode" (64-х битный режим). Там есть код перехода в 32-х битный "Protected Mode" - но это позволяет стартовать только 32-х битные ядра. Определенно есть какой-то нюанс, я попытаюсь в нем разобраться.

Information

Rating
1,960-th
Date of birth
Registered
Activity