KolibriOS в BIOS

Using Kolibri in embedded systems
  • XVilka
    Ещё раз: CoreBoot+Колибри как конечная цель - это замечательно.

    Но есть три серьезных соображения против:

    1) сейчас ядро опирается на многочисленные BIOS-костыли. CoreBoot выбьет их все разом - фиг разберешься что, где и почему виснет.

    2) не каждый потенциальный заказчик решится пожертвовать своим BIOSом ради тест-драйва шустрой, но никому не известной и (прямо скажем) сыроватой новой EOS.

    3) Есть ещё цинично-коммерческая сторона вопроса. Лицензия не позволяет закрывать код, но явно разрешает брать плату за консультации и техническую поддержку конечного продукта.
    Прошивку PCI Extension ROM можно привязать к конкретной фишке в железе, и консультировать только легальных владельцев этого железа.
    А с CoreBoot_payload такой фикс не пройдет. Пробивные дармоеды успеют хапнуть первыми, а тебе оставят только строчку в коллективном копирайте.
  • Ещё забыли про то, что проблематично самостоятельно сделать полноценную поддержку оборудования. Например, на современных матерях Gigabyte и других фирм используются хитрые системы управления электропитанием процессора, которыми управляет код SMM, зашитый в BIOS. В частности, он отвечает за переключение числа активных фаз преобразователя в зависимости от потребляемого тока. Ну и попробуй это сделать сам, если спецификации закрыты, а сама реализация может меняться от одной модели к другой (не говоря уже о том, что у разных производителей одна и та же идея реализуется по-разному, если говорить о тонкостях). В общем, BIOS -- зло, но на ПК это зло неизбежно.
  • Вот потому я люблю лицензию BSD - в любой момент можно закрыть и продолжать разработку. Старые версии, конечно будут доступны всем, но новые никто не сможет потребовать открыть.
  • art_zh wrote:сейчас ядро опирается на многочисленные BIOS-костыли
    "Многочисленные" - это поддержка не-ATA дисков и переключение в графический режим при запуске, что ли? 2 - это "много", что ли?
    Ушёл к умным, знающим и культурным людям.
  • diamond wrote:
    art_zh wrote:сейчас ядро опирается на многочисленные BIOS-костыли
    "Многочисленные" - это поддержка не-ATA дисков и переключение в графический режим при запуске, что ли? 2 - это "много", что ли?
    Я имею в виду не только эти явные опоры,- про них все знают.
    И даже не разную мелочевку вроде E820, про которую, похоже, уже даже автор запамятовал.
    PCI BIOS, init_mtrr в memory.inc и еще кое-что, сейчас навскидку всего не перечислить. Но опять-таки, это явно вызываемые ядром элементы BIOS-сервиса. При большом желании их все можно вычислить и профиксить. К тому же, открытый код CoreBoot-аналогов этих функций только пойдет ядру на пользу.

    А вот чего нельзя профиксить на 100% на всех платформах - неявные заморочки, которые обязательно выползут при замене BIOS на CoreBoot всвязи со спецификой оборудования и нетождественной инициализацией холодной системы. Только на хорошо документированном железе есть шанс когда-нибудь вычесать всех багов.

    Ув. SII привел лишь один частный пример. Общая же картина такова:

    - в принципе, на связке CoreBoot + KOS можно построить мощную встраиваемую систему с уникальными характеристками.
    - но сложно.
    - и работать она будет не на всех аппаратных платформах.
    - гораздо меньшими усилиями можно добиться практически тех же результатов на базе BIOS - для любых чипсетов и материнок.
    - почти теми же усилиями можно построить ещё более крутую ROM-KOS без BIOS и CoreBoot, с "холодной" инициализацией одной, отдельно взятой платформы.

    Большим плюсом этих двух альтернативных решений была бы их независимость от "чужой" GPL-лицензии...
    Евангелие от Иоанна: стих 1

    Code: Select all

    ; В начале было Слово:
    B32:        mov     ax, os_stack       ; Selector for os
    [/size]
  • art_zh wrote:И даже не разную мелочевку вроде E820, про которую, похоже, уже даже автор запамятовал.
    PCI BIOS, init_mtrr в memory.inc и еще кое-что, сейчас навскидку всего не перечислить.
    PCI BIOS по существу используется только для определения номера последней PCI-шины (и, естественно, для инициализации (в процессе POST) всего хозяйства PCI-мостов), но не в процессе работы. Для init_mtrr прямо в транке есть запасной вариант на случай, когда BIOS не инициализировала регистры MTRR. Аналогичный обход есть и вместо E820 (хотя там он несколько неэквивалентен, сканируя только до первой возможной "дыры"). Фразу "всего не перечислить" считаю отговоркой.
    Собственно, наличие кучи действий BIOSа в SMM посреди работы основной системы есть неоспоримый факт. Меня возмущает, что вышеупомянутые вещи приписываются к "костылям" основного ядра, хотя это совершенно не так (за исключением, естественно, не-ATAшного int 13h и, возможно, ненативного int 10h). А то почитаешь разные темы на форуме - и складывается ощущение, что ядро просто целиком состоит из самых разнообразных костылей.
    Ушёл к умным, знающим и культурным людям.
  • - почти теми же усилиями можно построить ещё более крутую ROM-KOS без BIOS и CoreBoot, с "холодной" инициализацией одной, отдельно взятой платформы.
    Мне почему-то кажется что многих этот вариант более заинтересует чем просто BIOS+KOS :)
    Кстати libpayload из coreboot - BSD-лицензирован.

    Но как упоминалось AMD по-максимуму старается открывать работу на низком уровне и присылает патчи для coreboot.
    Intel предоставляет достаточно хорошую документацию (правда часто с ошибками, но лучше чем ничего).

    Самая большая проблема с NVIDIA железом.
  • Зря вы BIOS к костылям относите, как будто ACPI не костыль ))) это такой костыль что система превращается в марионетку. ИМХО сделать систему не зависимую от вспомогательных сервисов утопично (ну конечно если вы не собираетесь изобретать новую платформу).
  • Вот еще полезная для изучения работы BIOS и работы без BIOS штука - http://git.linuxtogo.org/?p=kevin/seabios.git;a=summary

    То есть open-source реализация стандартных сервисов BIOS
  • Вот инструкция по загрузке kolibri с coreboot (Писалось с учетом linux-системы)
    Также ссылка на готовый образ для ленивых:

    1. Скачать и собрать coreboot:

    Code: Select all

    svn co svn://coreboot.org/coreboot/trunk coreboot
    cd coreboot
    make menuconfig
    
    В меню выбираем Target -> QEMU, payload -> SeaBIOS (master) (пока только SeaBIOS)
    меняем что хотим, и собираем командой

    Code: Select all

    make
    
    1a. Как вариант, возможно собрать SeaBIOS отдельно:

    Code: Select all

    git clone git://git.seabios.org/seabios.git seabios
    cd seabios
    make menuconfig
    make
    
    только в menuconfig надо выбрать опцию build for coreboot
    Потом скопируем файл out/bios.bin.elf в каталог, где собираем coreboot, и в опции Payload в make menuconfig выбираем elf - указываем путь к файл bios.bin.elf

    Вот что у меня получилось на выходе (я собирал образ для 4мбитной флешки)

    Code: Select all

    coreboot.rom: 4096 kB, bootblocksize 1504, romsize 4194304, offset 0x0
    Alignment: 64 bytes
    
    Name                           Offset     Type         Size
    cmos_layout.bin                0x0        unknown      1159
    fallback/romstage              0x4c0      stage        12720
    fallback/coreboot_ram          0x36c0     stage        27797
    fallback/payload               0xa3c0     payload      40596
    (empty)                        0x142c0    null         4110104
    
    То есть есть место для KolibrioOS :) Даже более чем достаточно!

    2. Собираем QEMU, желательно последний, из гита
    3. Загружаем образ видеобиоса: http://www.coreboot.org/images/0/0d/Vgabios-cirrus.zip
    4. В каталог, где будем работать копируем файлы:
    а) coreboot.rom из coreboot/build и переименовываем в bios.bin
    б) vgabios-cirrus.bin из архива Vgabios-cirrus.zip
    в) образ колибри (я проверял на исо, флоп тоже работает)
    5. Запускаем:

    Code: Select all

    qemu -L . -cdrom kolibri.iso -serial stdio
    
    Опция -L указывает на каталог с нашими биосами и образом колибри.
    6. PROFIT!

    7. Также возможно включить образ колибри в образ биоса:
    Скачиваем kolibri.img
    Упаковываем:

    Code: Select all

    lzma -zc kolibri.img > kolibri.img.lzma
    ./build/cbfstool coreboot.rom add kolibri.img.lzma floppyimg/Kolibri.lzma raw
    
    cbfstool находиться в каталоге coreboot/build
    Проверим результат командой:

    Code: Select all

    ./build/cbfstool coreboot.rom print
    
    А потом так же переименовываем coreboot.rom в bios.bin и используем для загрузки

    Точно так же возможно собрать все и для работы на реальном железе и прошить с помощью утилиты flashrom (http://www.flashrom.org) - справедливо только для поддерживаемого coreboot-ом железа, а также на свой страх и риск!

    Готовые образы и конфиги, по которым собрано, прикрепляю - только добавить образ колибри и вуаля!
    Дополнительно почитать про сборку можно здесь:

    http://www.coreboot.org/Build_HOWTO
    http://www.coreboot.org/SeaBIOS


    Пишем отзывы, пожелания :)
    Attachments
    coreboot image + config files
    Downloaded 489 times
  • Щас ковыряюсь и пробую выкинуть 16-битный код и загрузчик из ядра, а также пробую сделать из него elf, чтобы из coreboot грузиться напрямую.
  • XVilka wrote:Вот инструкция по загрузке kolibri с coreboot (Писалось с учетом linux-системы)
    Точно так же возможно собрать все и для работы на реальном железе и прошить с помощью утилиты flashrom (http://www.flashrom.org) - справедливо только для поддерживаемого coreboot-ом железа, а также на свой страх и риск!
    Пишем отзывы, пожелания :)
    Круто 8) А что нужно сделать, чтобы eBox стал поддерживаемым coreboot-ом железом? :wink:
  • Найти человека, который будет готов портировать :)
    И, желательно документы Memory Reference Code - как инициализировать память для Vortex
  • XVilka wrote:Найти человека, который будет готов портировать :)
    И, желательно документы Memory Reference Code - как инициализировать память для Vortex
    А ты не готов? :wink: Могу подарить железку для опытов 8)
    С документами сложнее, как ты уже понял. Но есть документ на процессор RDC, который имеет много общего.
  • Who is online

    Users browsing this forum: No registered users and 2 guests