partagenocce (partagenocce) wrote,
partagenocce
partagenocce

Category:

KolibriOS в coreboot / SeaBIOS

Утащено с просторов ....

http://board.kolibrios.org/viewtopic.php?t=3446

У меня получилось встроить KolibriOS в coreboot / SeaBIOS , и успешно запустить оттуда! :D Все файлы прилагаются!

[Spoiler (click to open)]Компьютер - ноутбук Lenovo G505S с процессором AMD A10-5750M , он поддерживается coreboot:
http://www.coreboot.org/Supported_Mothe ... vo.2Fg505s (последний репорт - 1 октября 2016, немного устарел)
Ноут середины 2013 года - больше не производится, но при желании можно найти на авито за 15-20 тыс.

Последовательность действий при сборке: (для удобства спрятал под спойлеры)

1-4: (подготовка)
Spoiler: Hide
1) в Windows 8 обновил BIOS до последней версии v3.00 - 83CN53WW используя официальную программу с сайта Lenovo, чтобы заодно обновилась прошивка EC-контроллера KB9012 (до версии v3.00 - 83EC53WW) и VGABIOS точно был самый последний

2) в Linux при помощи этой инструкции получил VGABIOS, файл vgabios.bin - http://www.coreboot.org/VGA_support#Ret ... nux_kernel

3) в Linux установил все нужное для сборки - http://www.coreboot.org/Build_HOWTO

4) скачал coreboot - git clone https://review.coreboot.org/coreboot.git , зашел в директорию coreboot, ввел make menuconfig (чтобы докачались некоторые другие вещи), вышел из menuconfig без сохранения конфигурации и собрал тулчейн make crossgcc-i386, который будет использоваться для компиляции coreboot (crossgcc-x64 плохо компилирует)
5: (правка для двух видеокарт)
Spoiler: Hide
5) в файле ./coreboot/src/device/Kconfig изменил
Code:

config MULTIPLE_VGA_ADAPTERS
bool
default n

на
Code:

config MULTIPLE_VGA_ADAPTERS
bool
default y

потому что в моей версии ноута две видеокарты а не одна (этот конфиг приведет к выполнению дополнительного кода в ./coreboot/src/northbridge/amd/agesa/family15rl/northbridge.c , но я пока толком не разобрался на что это влияет, давно не играл в игры и не использовал дискретную видеокарту)
6: (настройка сборки coreboot для G505S)
Spoiler: Hide
6) скопировал vgabios.bin внутрь папки coreboot, ввел опять make menuconfig и настроил сборку на Lenovo G505S. Полный конфиг - во вложениях; чтобы использовать, скопируйте его в
Code:

./coreboot/.config


Если вы желаете изменить некоторые опции самостоятельно, прочитайте о том как пользоваться menuconfig в самом низу этого сообщения. Самое главное: кнопка ? - узнать больше о подсвеченной опции, а правый слэш / - поиск по опциям.

Отличия моего конфига для G505S от конфига по умолчанию:

CONFIG_USE_OPTION_TABLE=y (Use CMOS for configuration values - чтобы можно было делать доп. настройки через nvramcui, http://www.coreboot.org/Payloads#nvramcui )

CONFIG_COLLECT_TIMESTAMPS=y (Create a table of timestamps collected during boot - чтобы можно было смотреть время загрузки в coreinfo, http://www.coreboot.org/Payloads#Coreinfo )

CONFIG_VGA_BIOS=y (Add a VGA BIOS image)
CONFIG_VGA_BIOS_FILE="vgabios.bin" (VGA BIOS path and filename - если vgabios.bin расположен в ./coreboot/, то полного пути не надо)

CONFIG_MULTIPLE_VGA_ADAPTERS=y (автоматически выставляется в y или n в зависимости от ./coreboot/src/device/Kconfig)

Code:

CONFIG_VGA_ROM_RUN=y
# CONFIG_ALWAYS_LOAD_OPROM is not set
# CONFIG_ON_DEVICE_ROM_LOAD is not set
# CONFIG_PCI_OPTION_ROM_RUN_REALMODE is not set
CONFIG_PCI_OPTION_ROM_RUN_YABEL=y
# CONFIG_YABEL_PCI_ACCESS_OTHER_DEVICES is not set
CONFIG_YABEL_VIRTMEM_LOCATION=0x1000000
# CONFIG_YABEL_DIRECTHW is not set

^^^ включил YABEL для повышения безопасности, чтобы предотвратить возможный недокументированный доступ VGABIOS к другим PCI-устройствам (исходный код VGABIOS закрыт, и чтобы он не смог наворотить бэкдорных дел если захочет - нужно огородить)

# CONFIG_DRIVERS_INTEL_WIFI is not set (Support Intel PCI-e WiFi adapters) - с интеловскими WiFi-адаптерами ни разу в жизни не сталкивался и не понимаю зачем они нужны когда есть Atheros AR9462, очень хороший WiFi-адаптер который поддерживает a/b/g/n 300Мбит/сек, 2.4ГГц и 5ГГц, даже Bluetooth 4.0, при этом на него есть полностью опенсорсные драйвера под Linux - http://wireless.wiki.kernel.org/en/users/Drivers/ath9k , поэтому поддержку интела выкинул чтобы место не занимало. AR9462 с официальным БИОСом не работает из-за Whitelist, а с coreboot / SeaBIOS работает прекрасно, да и стоит всего 500 р. на алиэкспресс

# CONFIG_SEABIOS_STABLE is not set
CONFIG_SEABIOS_MASTER=y - SeaBIOS посвежее

Code:

#
# Secondary Payloads
#
CONFIG_COREINFO_SECONDARY_PAYLOAD=y
CONFIG_MEMTEST_SECONDARY_PAYLOAD=y
# CONFIG_MEMTEST_STABLE is not set
CONFIG_MEMTEST_MASTER=y
CONFIG_NVRAMCUI_SECONDARY_PAYLOAD=y
CONFIG_TINT_SECONDARY_PAYLOAD=y

^^^ включил дополнительные payload-ы
7: (включаем USB клавиатуру для nvramcui)
Spoiler: Hide
7) в ./coreboot/payloads/nvramcui/nvramcui.c, самое начало функции int main(void),
добавил
Code:

#ifndef CONFIG_LP_USB
#define CONFIG_LP_USB 0
#endif

#if IS_ENABLED(CONFIG_LP_USB)
usb_initialize();
#endif

чтобы USB-клавиатура в nvramcui работала
8-9: (патчим тетрис до новой версии и собираем coreboot)
Spoiler: Hide
8) Заменил файлы ./coreboot/payloads/external/tint/ libpayload_tint.patch и Makefile своими, чтобы обновить версию тетриса TINT с 0.03b на 0.04+nmu1, включить поддержку USB-клавиатуры и пофиксить один баг (эти файлы прилагаются внизу сообщения, как и описание - что происходит в процессе автоматической сборки тетриса TINT)

9) Собрал coreboot командой make, на выходе получил файл ./coreboot/build/coreboot.rom
10: (дополнительно собираем загрузчик filo)
Spoiler: Hide
10) в Xubuntu 16.04.1 i386 (так и не смог нормально собрать на 64-битной системе, пришлось использовать LiveCD с 32-битной убунтой) скачал и собрал bootloader FILO - http://www.coreboot.org/FILO . При сборке FILO ссылается на ./../coreboot/payloads/libpayload , и чтобы он не отказывался использовать "непротестированный" SATA-контроллер, перед началом сборки FILO (первым вводом make menuconfig) я удалил из ./coreboot/payloads/libpayload/drivers/storage/ahci.c два куска кода
Code:

#if IS_ENABLED(CONFIG_LP_STORAGE_AHCI_ONLY_TESTED)
...
#endif

Результат сборки - файл ./filo/build/filo.elf (конфиг FILO прилагается ниже, после ввода make menuconfig в директории filo и выхода из menuconfig можно заменить .config на этот)
11: (добавляем filo к образу coreboot)
Spoiler: Hide
11) Скопировал filo.elf в ./coreboot/build/filo.elf и, находясь в ./coreboot/ , выполнил команду
Code:

./build/cbfstool build/coreboot.rom add-payload -f ./build/filo.elf -n img/filo.lzma -c lzma

Сжатие LZMA уменьшило занимаемый размер с 362КБ до 108КБ
12: (добавляем KolibriOS к образу coreboot)
Spoiler: Hide
12) Скачал 7z-архив, содержащий дискетный образ KolibriOS kolibri.img, скопировал его в ./coreboot/build/kolibri.img и выполнил команду
Code:

./build/cbfstool build/coreboot.rom add -f ./build/kolibri.img -n floppyimg/kolibri.lzma -t raw -c lzma

Сжатие LZMA уменьшило занимаемый размер с 1440КБ до 1225КБ
Карта памяти coreboot_stage3.rom:
Spoiler: Hide
Code:

./build/cbfstool ./build/coreboot.rom print

Code:

Performing operation on 'COREBOOT' region...
Name Offset Type Size
cbfs master header 0x0 cbfs header 32
apu/amdfw 0x80 raw 4096
fallback/romstage 0x10c0 stage 300588
fallback/ramstage 0x4a780 stage 111690
config 0x65c40 raw 478
revision 0x65e80 raw 575
cmos_layout.bin 0x66100 cmos_layout 1392
pci1002,990b.rom 0x666c0 optionrom 61952
fallback/dsdt.aml 0x75940 raw 9004
img/coreinfo 0x77cc0 payload 101048
img/nvramcui 0x907c0 payload 140636
fallback/payload 0xb2d80 payload 62953
payload_config 0xc23c0 raw 1543
payload_revision 0xc2a00 raw 238
img/tint 0xc2b40 payload 93928
img/memtest 0xd9a80 payload 180268
img/filo.lzma 0x105b00 payload 110829
floppyimg/kolibri.lzma 0x120c40 raw 1254336 (1474560 after LZMA decompression)
(empty) 0x253080 null 1755288
bootblock 0x3ff940 bootblock 1408


Прошивка:
Spoiler: Hide
Можно купить самый дешёвый программатор CH341A (поддерживается open-source программой flashrom на Linux) и SOIC8-прищепку к нему (в сумме где-то 500 р. на алиэкспресс). Сможете прошивать BIOS-чип без выпаивания. Полная инструкция по прошивке, в том числе описание правильного подключения к BIOS-чипу, здесь:
http://dangerousprototypes.com/docs/Fla ... Bus_Pirate
(в-основном написана для Bus Pirate, но ближе к концу есть пример для CH341A)
Загрузка:

Когда грузится coreboot ---> SeaBIOS, если нажать Escape на экране SeaBIOS то появляется экран выбора:

1. Ramdisk [kolibri]
2. Payload [filo]
3. Payload [memtest]
4. Payload [tint]
5. Payload [nvramcui]
6. Payload [coreinfo]

После kolibri и перед filo могут добавиться пункты USB Drive, CD/DVD Drive, HDD Drive если они вставлены в компьютер и являются загрузочными. Чтобы начала загружаться KolibriOS, достаточно нажать кнопку 1 на экране выбора, или ничего не делать с самого начала

Текущий статус KolibriOS на coreboot / SeaBIOS:
версия coreboot - 4.5-485-g52896c6-dirty || версия SeaBIOS - 1.10.0-9-g7b7b49e || версия KolibriOS - r6781

KolibriOS грузится и работает нормально, но после начального синего экрана, при дальнейшей загрузке ОС до рабочего стола перестаёт работать USB-клавиатура и USB-мышь (внутренняя клавиатура ноутбука и тачпад по-прежнему работают, может быть они являются PS/2 устройствами поэтому и продолжают работать) . Добавлю больше инфы когда протестирую поподробнее...
Tags: #define, #endif, #if, #ifndef, компьютеры
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 0 comments