Coreboot – Зачем? Что должен сделать System BIOS: • инициализировать аппаратное обеспечение • инициализировать нормальную работу SMM и ACPI • предоставить базовые функции для Legacy OS


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.
ПсбкуйцёткпёиобкпнтугптптгпвпеопкбмьуёсобуйгпкBIOS+UEFI
NickVoid(mn3m)
[email protected]#com
June16:1015
http://mn3m#info/
План
Планвыступления:
1#
why
1#
internals
3#
howto
4#
demo
1
coreboot-зачем?
1
Coreboot–Зачем?
Длячегочеловекув101xгодудуматьоsystemfirmware(System
BIOS):
1#
багинауровнеfirmware;
1#
желаниерасширитьвозможностиfirmware;
3#
желаниеиметьсвободнуюfirmware;
4#
security;
3
Coreboot–Зачем?
Длячегочеловекув101xгодудуматьоsystemfirmware(System
BIOS):
1#
багинауровнеfirmware;
1#
желаниерасширитьвозможностиfirmware;
3#
желаниеиметьсвободнуюfirmware;
4#
security;
3
Coreboot–Зачем?
Длячегочеловекув101xгодудуматьоsystemfirmware(System
BIOS):
1#
багинауровнеfirmware;
1#
желаниерасширитьвозможностиfirmware;
3#
желаниеиметьсвободнуюfirmware;
4#
security;
3
Coreboot–Зачем?
Длячегочеловекув101xгодудуматьоsystemfirmware(System
BIOS):
1#
багинауровнеfirmware;
1#
желаниерасширитьвозможностиfirmware;
3#
желаниеиметьсвободнуюfirmware;
4#
security;
3
Coreboot–Зачем?
ЧтодолженсделатьSystemBIOS:

инициализироватьаппаратноеобеспечение;

инициализироватьнормальнуюработуSMMиACPI;

предоставитьбазовыефункциидляLegacyOS;

загрузить
ROMBASICОС;

иногда-предоставитьфункциисобственнойОСUEFI;

иногда-предоставитьидентификационныеданныедля
некоторыхОС(OEM);

иногда-предоставитьфункциивосстановлениясебяи/или
предустановленнойОС;
4
Coreboot–Зачем?
ЧтодолженсделатьSystemBIOS:

инициализироватьаппаратноеобеспечение;

инициализироватьнормальнуюработуSMMиACPI;

предоставитьбазовыефункциидляLegacyOS;

загрузить
ROMBASICОС;

иногда-предоставитьфункциисобственнойОСUEFI;

иногда-предоставитьидентификационныеданныедля
некоторыхОС(OEM);

иногда-предоставитьфункциивосстановлениясебяи/или
предустановленнойОС;
4
Coreboot–Зачем?
ЧтодолженсделатьSystemBIOS:

инициализироватьаппаратноеобеспечение;

инициализироватьнормальнуюработуSMMиACPI;

предоставитьбазовыефункциидляLegacyOS;

загрузить
ROMBASICОС;

иногда-предоставитьфункциисобственнойОСUEFI;

иногда-предоставитьидентификационныеданныедля
некоторыхОС(OEM);

иногда-предоставитьфункциивосстановлениясебяи/или
предустановленнойОС;
4
Coreboot–Зачем?
ЧтодолженсделатьSystemBIOS:

инициализироватьаппаратноеобеспечение;

инициализироватьнормальнуюработуSMMиACPI;

предоставитьбазовыефункциидляLegacyOS;

загрузить
ROMBASICОС;

иногда-предоставитьфункциисобственнойОСUEFI;

иногда-предоставитьидентификационныеданныедля
некоторыхОС(OEM);

иногда-предоставитьфункциивосстановлениясебяи/или
предустановленнойОС;
4
Coreboot–Зачем?
ЧтодолженсделатьSystemBIOS:

инициализироватьаппаратноеобеспечение;

инициализироватьнормальнуюработуSMMиACPI;

предоставитьбазовыефункциидляLegacyOS;

загрузить
ROMBASICОС;

иногда-предоставитьфункциисобственнойОСUEFI;

иногда-предоставитьидентификационныеданныедля
некоторыхОС(OEM);

иногда-предоставитьфункциивосстановлениясебяи/или
предустановленнойОС;
4
Coreboot–Зачем?
ЧтодолженсделатьSystemBIOS:

инициализироватьаппаратноеобеспечение;

инициализироватьнормальнуюработуSMMиACPI;

предоставитьбазовыефункциидляLegacyOS;

загрузить
ROMBASICОС;

иногда-предоставитьфункциисобственнойОСUEFI;

иногда-предоставитьидентификационныеданныедля
некоторыхОС(OEM);

иногда-предоставитьфункциивосстановлениясебяи/или
предустановленнойОС;
4
Coreboot–Зачем?
ЧтодолженсделатьSystemBIOS:

инициализироватьаппаратноеобеспечение;

инициализироватьнормальнуюработуSMMиACPI;

предоставитьбазовыефункциидляLegacyOS;

загрузить
ROMBASICОС;

иногда-предоставитьфункциисобственнойОСUEFI;

иногда-предоставитьидентификационныеданныедля
некоторыхОС(OEM);

иногда-предоставитьфункциивосстановлениясебяи/или
предустановленнойОС;
4
Coreboot–Зачем?
ОсновныепредставителиSystemBIOSдляx86:
PCBIOS
EFI
Coreboot
Assembly8086
many
96%ANSIC:1%asm
realmode
protectedmode
protectedmode
Closed
Open
GPLv2
Table1:
СравнениеосновныхBIOS’ов
5
Coreboot–Зачем?
Сложностьтемы:

нетподстраховки
(noonewillcatchyourexceptions)

множествоаппаратно-зависимойvendorspecificинформации
(котораяневсегдаесть:невсегдаоткрытаиневсегдасоответствует
действительности)

программированиебезRAM;

программированиебезстека;

ассемблер:ANSIC;

realmodeprogramming;

тестирование;
6
Coreboot–Зачем?
Сложностьтемы:

нетподстраховки
(noonewillcatchyourexceptions)

множествоаппаратно-зависимойvendorspecificинформации
(котораяневсегдаесть:невсегдаоткрытаиневсегдасоответствует
действительности)

программированиебезRAM;

программированиебезстека;

ассемблер:ANSIC;

realmodeprogramming;

тестирование;
6
Coreboot–Зачем?
Сложностьтемы:

нетподстраховки
(noonewillcatchyourexceptions)

множествоаппаратно-зависимойvendorspecificинформации
(котораяневсегдаесть:невсегдаоткрытаиневсегдасоответствует
действительности)

программированиебезRAM;

программированиебезстека;

ассемблер:ANSIC;

realmodeprogramming;

тестирование;
6
Coreboot–Зачем?
Сложностьтемы:

нетподстраховки
(noonewillcatchyourexceptions)

множествоаппаратно-зависимойvendorspecificинформации
(котораяневсегдаесть:невсегдаоткрытаиневсегдасоответствует
действительности)

программированиебезRAM;

программированиебезстека;

ассемблер:ANSIC;

realmodeprogramming;

тестирование;
6
Coreboot–Зачем?
Сложностьтемы:

нетподстраховки
(noonewillcatchyourexceptions)

множествоаппаратно-зависимойvendorspecificинформации
(котораяневсегдаесть:невсегдаоткрытаиневсегдасоответствует
действительности)

программированиебезRAM;

программированиебезстека;

ассемблер:ANSIC;

realmodeprogramming;

тестирование;
6
Coreboot–Зачем?
Сложностьтемы:

нетподстраховки
(noonewillcatchyourexceptions)

множествоаппаратно-зависимойvendorspecificинформации
(котораяневсегдаесть:невсегдаоткрытаиневсегдасоответствует
действительности)

программированиебезRAM;

программированиебезстека;

ассемблер:ANSIC;

realmodeprogramming;

тестирование;
6
Coreboot–Зачем?
Сложностьтемы:

нетподстраховки
(noonewillcatchyourexceptions)

множествоаппаратно-зависимойvendorspecificинформации
(котораяневсегдаесть:невсегдаоткрытаиневсегдасоответствует
действительности)

программированиебезRAM;

программированиебезстека;

ассемблер:ANSIC;

realmodeprogramming;

тестирование;
6
Coreboot–Зачем?
некоторыеsecurityвекторы:

SystemBIOSимеетнеограниченныйдоступкhardware;

приcoldrebootRAMнеочищается;

кодобработчикаSMMвыплняетсянауровне>=ядраОСиНЕ
являетсячастьюОС;

вenvОСUEFIможнозаписатьизuserspace;

GPUумеетходитьвRAMвобходCPUчерезDMA;
7
Coreboot–Зачем?
некоторыеsecurityвекторы:

SystemBIOSимеетнеограниченныйдоступкhardware;

приcoldrebootRAMнеочищается;

кодобработчикаSMMвыплняетсянауровне>=ядраОСиНЕ
являетсячастьюОС;

вenvОСUEFIможнозаписатьизuserspace;

GPUумеетходитьвRAMвобходCPUчерезDMA;
7
Coreboot–Зачем?
некоторыеsecurityвекторы:

SystemBIOSимеетнеограниченныйдоступкhardware;

приcoldrebootRAMнеочищается;

кодобработчикаSMMвыплняетсянауровне>=ядраОСиНЕ
являетсячастьюОС;

вenvОСUEFIможнозаписатьизuserspace;

GPUумеетходитьвRAMвобходCPUчерезDMA;
7
Coreboot–Зачем?
некоторыеsecurityвекторы:

SystemBIOSимеетнеограниченныйдоступкhardware;

приcoldrebootRAMнеочищается;

кодобработчикаSMMвыплняетсянауровне>=ядраОСиНЕ
являетсячастьюОС;

вenvОСUEFIможнозаписатьизuserspace;

GPUумеетходитьвRAMвобходCPUчерезDMA;
7
Coreboot–Зачем?
некоторыеsecurityвекторы:

SystemBIOSимеетнеограниченныйдоступкhardware;

приcoldrebootRAMнеочищается;

кодобработчикаSMMвыплняетсянауровне>=ядраОСиНЕ
являетсячастьюОС;

вenvОСUEFIможнозаписатьизuserspace;

GPUумеетходитьвRAMвобходCPUчерезDMA;
7
Coreboot–Зачем?
Пешениенекоторыхсекуритипроблем:

использовать
бумагу
и
печатную
машинку:
а
всю
компьютерную
технику
сжечь
ЗспользоватьСвободнуюfirmware;

Пазрабатыватьсвободныеальтернативыпроприетарного
инициализирующегокодаипроприетарныхдрайверов

ПазвиватьидеюSecureLinuxBoot
8
Coreboot–Зачем?
Пешениенекоторыхсекуритипроблем:

использовать
бумагу
и
печатную
машинку:
а
всю
компьютерную
технику
сжечь
ЗспользоватьСвободнуюfirmware;

Пазрабатыватьсвободныеальтернативыпроприетарного
инициализирующегокодаипроприетарныхдрайверов

ПазвиватьидеюSecureLinuxBoot
8
Coreboot–Зачем?
Пешениенекоторыхсекуритипроблем:

использовать
бумагу
и
печатную
машинку:
а
всю
компьютерную
технику
сжечь
ЗспользоватьСвободнуюfirmware;

Пазрабатыватьсвободныеальтернативыпроприетарного
инициализирующегокодаипроприетарныхдрайверов

ПазвиватьидеюSecureLinuxBoot
8
Corebootinternals
9
Coreboot–internals
ПервыешагизагрузкиCoreboot(LINUXBIOS)v0#01(1999)
1#
перейтивprotectedmode
1#
скопироватьinitramfsсGNU/LinuxвRAM
3#
jump
10
Coreboot–internals
ПервыешагизагрузкиCoreboot(LINUXBIOS)v0#01(1999)
1#
перейтивprotectedmode
1#
скопироватьinitramfsсGNU/LinuxвRAM
3#
jump
10
Coreboot–internals
ПервыешагизагрузкиCoreboot(LINUXBIOS)v0#01(1999)
1#
перейтивprotectedmode
1#
скопироватьinitramfsсGNU/LinuxвRAM
3#
jump
10
Coreboot–internals
ПервыешагизагрузкиCoreboot(LINUXBIOS)v0#01(1999)
11
Coreboot–internals
ПервыешагизагрузкиCoreboot(LINUXBIOS)v0#01(1999)
Плюсы:

BusyboxwithBASHshellinBIOS

Protectedmode”изкоробки”

NativeLinuxfilesystemssupport

МеньшезадачнаCoreboot:большенаLinux

Меньшезадач-меньшекода

Меньшекода-меньшебагов
11
Coreboot–internals
ПервыешагизагрузкиCoreboot(LINUXBIOS)v0#01(1999)
Плюсы:

BusyboxwithBASHshellinBIOS

Protectedmode”изкоробки”

NativeLinuxfilesystemssupport

МеньшезадачнаCoreboot:большенаLinux

Меньшезадач-меньшекода

Меньшекода-меньшебагов
11
Coreboot–internals
ПервыешагизагрузкиCoreboot(LINUXBIOS)v0#01(1999)
Плюсы:

BusyboxwithBASHshellinBIOS

Protectedmode”изкоробки”

NativeLinuxfilesystemssupport

МеньшезадачнаCoreboot:большенаLinux

Меньшезадач-меньшекода

Меньшекода-меньшебагов
11
Coreboot–internals
ПервыешагизагрузкиCoreboot(LINUXBIOS)v0#01(1999)
Плюсы:

BusyboxwithBASHshellinBIOS

Protectedmode”изкоробки”

NativeLinuxfilesystemssupport

МеньшезадачнаCoreboot:большенаLinux

Меньшезадач-меньшекода

Меньшекода-меньшебагов
11
Coreboot–internals
ПервыешагизагрузкиCoreboot(LINUXBIOS)v0#01(1999)
Плюсы:

BusyboxwithBASHshellinBIOS

Protectedmode”изкоробки”

NativeLinuxfilesystemssupport

МеньшезадачнаCoreboot:большенаLinux

Меньшезадач-меньшекода

Меньшекода-меньшебагов
11
Coreboot–internals
ПервыешагизагрузкиCoreboot(LINUXBIOS)v0#01(1999)
Плюсы:

BusyboxwithBASHshellinBIOS

Protectedmode”изкоробки”

NativeLinuxfilesystemssupport

МеньшезадачнаCoreboot:большенаLinux

Меньшезадач-меньшекода

Меньшекода-меньшебагов
11
Coreboot–internals
ПервыешагизагрузкиCoreboot(LINUXBIOS)v0#01(1999)
Минусы:

неработаетна”современном”железеиз-заVendorspecific
условийинициализацииRAM:SouthBridge

неработаютPCIустройстваиз-занеобходимостиих
дополнительноинициализировать
13
Coreboot–internals
ПервыешагизагрузкиCoreboot(LINUXBIOS)v0#01(1999)
Минусы:

неработаетна”современном”железеиз-заVendorspecific
условийинициализацииRAM:SouthBridge

неработаютPCIустройстваиз-занеобходимостиих
дополнительноинициализировать
13
Coreboot–internals
”Современный”вариантзагрузкиCoreboot(LINUXBIOS)v3иv4
дляIntelархитектурыx86
1#
переходвProtectedMode
1#
mainboardinit1(FPUenable:SSEenable:CacheasRAM)
3#
mainboardinit1(VendorSpecificcode:Southbridge:initRAM
(ROMstage)
4#
copydecompressedCorebootinRAM
5#
jumptoRAMentrypoint(startRAMstage)
6#
Initializeconsole:enumeratedevices:ACPITable:SMMhandler
(RAMstage)
7#
jumptopayloadentry
14
Coreboot–internals
”Современный”вариантзагрузкиCoreboot(LINUXBIOS)v3иv4
дляIntelархитектурыx86
1#
переходвProtectedMode
1#
mainboardinit1(FPUenable:SSEenable:CacheasRAM)
3#
mainboardinit1(VendorSpecificcode:Southbridge:initRAM
(ROMstage)
4#
copydecompressedCorebootinRAM
5#
jumptoRAMentrypoint(startRAMstage)
6#
Initializeconsole:enumeratedevices:ACPITable:SMMhandler
(RAMstage)
7#
jumptopayloadentry
14
Coreboot–internals
”Современный”вариантзагрузкиCoreboot(LINUXBIOS)v3иv4
дляIntelархитектурыx86
1#
переходвProtectedMode
1#
mainboardinit1(FPUenable:SSEenable:CacheasRAM)
3#
mainboardinit1(VendorSpecificcode:Southbridge:initRAM
(ROMstage)
4#
copydecompressedCorebootinRAM
5#
jumptoRAMentrypoint(startRAMstage)
6#
Initializeconsole:enumeratedevices:ACPITable:SMMhandler
(RAMstage)
7#
jumptopayloadentry
14
Coreboot–internals
”Современный”вариантзагрузкиCoreboot(LINUXBIOS)v3иv4
дляIntelархитектурыx86
1#
переходвProtectedMode
1#
mainboardinit1(FPUenable:SSEenable:CacheasRAM)
3#
mainboardinit1(VendorSpecificcode:Southbridge:initRAM
(ROMstage)
4#
copydecompressedCorebootinRAM
5#
jumptoRAMentrypoint(startRAMstage)
6#
Initializeconsole:enumeratedevices:ACPITable:SMMhandler
(RAMstage)
7#
jumptopayloadentry
14
Coreboot–internals
”Современный”вариантзагрузкиCoreboot(LINUXBIOS)v3иv4
дляIntelархитектурыx86
1#
переходвProtectedMode
1#
mainboardinit1(FPUenable:SSEenable:CacheasRAM)
3#
mainboardinit1(VendorSpecificcode:Southbridge:initRAM
(ROMstage)
4#
copydecompressedCorebootinRAM
5#
jumptoRAMentrypoint(startRAMstage)
6#
Initializeconsole:enumeratedevices:ACPITable:SMMhandler
(RAMstage)
7#
jumptopayloadentry
14
Coreboot–internals
”Современный”вариантзагрузкиCoreboot(LINUXBIOS)v3иv4
дляIntelархитектурыx86
1#
переходвProtectedMode
1#
mainboardinit1(FPUenable:SSEenable:CacheasRAM)
3#
mainboardinit1(VendorSpecificcode:Southbridge:initRAM
(ROMstage)
4#
copydecompressedCorebootinRAM
5#
jumptoRAMentrypoint(startRAMstage)
6#
Initializeconsole:enumeratedevices:ACPITable:SMMhandler
(RAMstage)
7#
jumptopayloadentry
14
Coreboot–internals
”Современный”вариантзагрузкиCoreboot(LINUXBIOS)v3иv4
дляIntelархитектурыx86
1#
переходвProtectedMode
1#
mainboardinit1(FPUenable:SSEenable:CacheasRAM)
3#
mainboardinit1(VendorSpecificcode:Southbridge:initRAM
(ROMstage)
4#
copydecompressedCorebootinRAM
5#
jumptoRAMentrypoint(startRAMstage)
6#
Initializeconsole:enumeratedevices:ACPITable:SMMhandler
(RAMstage)
7#
jumptopayloadentry
14
Coreboot–internals
Payloads:
1#
SeaBIOS(oldname-ADLO);
1#
OpenBIOS;
3#
OpenFirmware;
4#
GRUB1:FILO;
5#
TianoCore(UEFI);
6#
Etherboot/GPXE/iPXE;
7#
OSaspayload:Linux:NetBSD:PLAN9;
8#
Depthcharge:Uboot:Explorer(Chromebookspayloads);
9#
Games:Tint:Invaders;
10#
Testsandinfo:Memtest86:Memtest86+:CoreInfo:nvramcui;
11#
Bayou(loadmenuformultiplepayloads);
11#
Libpayload;
15
Coreboot–internals
Payloads:
1#
SeaBIOS(oldname-ADLO);
1#
OpenBIOS;
3#
OpenFirmware;
4#
GRUB1:FILO;
5#
TianoCore(UEFI);
6#
Etherboot/GPXE/iPXE;
7#
OSaspayload:Linux:NetBSD:PLAN9;
8#
Depthcharge:Uboot:Explorer(Chromebookspayloads);
9#
Games:Tint:Invaders;
10#
Testsandinfo:Memtest86:Memtest86+:CoreInfo:nvramcui;
11#
Bayou(loadmenuformultiplepayloads);
11#
Libpayload;
15
Coreboot–internals
Payloads:
1#
SeaBIOS(oldname-ADLO);
1#
OpenBIOS;
3#
OpenFirmware;
4#
GRUB1:FILO;
5#
TianoCore(UEFI);
6#
Etherboot/GPXE/iPXE;
7#
OSaspayload:Linux:NetBSD:PLAN9;
8#
Depthcharge:Uboot:Explorer(Chromebookspayloads);
9#
Games:Tint:Invaders;
10#
Testsandinfo:Memtest86:Memtest86+:CoreInfo:nvramcui;
11#
Bayou(loadmenuformultiplepayloads);
11#
Libpayload;
15
Coreboot–internals
Payloads:
1#
SeaBIOS(oldname-ADLO);
1#
OpenBIOS;
3#
OpenFirmware;
4#
GRUB1:FILO;
5#
TianoCore(UEFI);
6#
Etherboot/GPXE/iPXE;
7#
OSaspayload:Linux:NetBSD:PLAN9;
8#
Depthcharge:Uboot:Explorer(Chromebookspayloads);
9#
Games:Tint:Invaders;
10#
Testsandinfo:Memtest86:Memtest86+:CoreInfo:nvramcui;
11#
Bayou(loadmenuformultiplepayloads);
11#
Libpayload;
15
Coreboot–internals
Payloads:
1#
SeaBIOS(oldname-ADLO);
1#
OpenBIOS;
3#
OpenFirmware;
4#
GRUB1:FILO;
5#
TianoCore(UEFI);
6#
Etherboot/GPXE/iPXE;
7#
OSaspayload:Linux:NetBSD:PLAN9;
8#
Depthcharge:Uboot:Explorer(Chromebookspayloads);
9#
Games:Tint:Invaders;
10#
Testsandinfo:Memtest86:Memtest86+:CoreInfo:nvramcui;
11#
Bayou(loadmenuformultiplepayloads);
11#
Libpayload;
15
Coreboot–internals
Payloads:
1#
SeaBIOS(oldname-ADLO);
1#
OpenBIOS;
3#
OpenFirmware;
4#
GRUB1:FILO;
5#
TianoCore(UEFI);
6#
Etherboot/GPXE/iPXE;
7#
OSaspayload:Linux:NetBSD:PLAN9;
8#
Depthcharge:Uboot:Explorer(Chromebookspayloads);
9#
Games:Tint:Invaders;
10#
Testsandinfo:Memtest86:Memtest86+:CoreInfo:nvramcui;
11#
Bayou(loadmenuformultiplepayloads);
11#
Libpayload;
15
Coreboot–internals
Payloads:
1#
SeaBIOS(oldname-ADLO);
1#
OpenBIOS;
3#
OpenFirmware;
4#
GRUB1:FILO;
5#
TianoCore(UEFI);
6#
Etherboot/GPXE/iPXE;
7#
OSaspayload:Linux:NetBSD:PLAN9;
8#
Depthcharge:Uboot:Explorer(Chromebookspayloads);
9#
Games:Tint:Invaders;
10#
Testsandinfo:Memtest86:Memtest86+:CoreInfo:nvramcui;
11#
Bayou(loadmenuformultiplepayloads);
11#
Libpayload;
15
Coreboot–internals
Payloads:
1#
SeaBIOS(oldname-ADLO);
1#
OpenBIOS;
3#
OpenFirmware;
4#
GRUB1:FILO;
5#
TianoCore(UEFI);
6#
Etherboot/GPXE/iPXE;
7#
OSaspayload:Linux:NetBSD:PLAN9;
8#
Depthcharge:Uboot:Explorer(Chromebookspayloads);
9#
Games:Tint:Invaders;
10#
Testsandinfo:Memtest86:Memtest86+:CoreInfo:nvramcui;
11#
Bayou(loadmenuformultiplepayloads);
11#
Libpayload;
15
Coreboot–internals
Payloads:
1#
SeaBIOS(oldname-ADLO);
1#
OpenBIOS;
3#
OpenFirmware;
4#
GRUB1:FILO;
5#
TianoCore(UEFI);
6#
Etherboot/GPXE/iPXE;
7#
OSaspayload:Linux:NetBSD:PLAN9;
8#
Depthcharge:Uboot:Explorer(Chromebookspayloads);
9#
Games:Tint:Invaders;
10#
Testsandinfo:Memtest86:Memtest86+:CoreInfo:nvramcui;
11#
Bayou(loadmenuformultiplepayloads);
11#
Libpayload;
15
Coreboot–internals
Payloads:
1#
SeaBIOS(oldname-ADLO);
1#
OpenBIOS;
3#
OpenFirmware;
4#
GRUB1:FILO;
5#
TianoCore(UEFI);
6#
Etherboot/GPXE/iPXE;
7#
OSaspayload:Linux:NetBSD:PLAN9;
8#
Depthcharge:Uboot:Explorer(Chromebookspayloads);
9#
Games:Tint:Invaders;
10#
Testsandinfo:Memtest86:Memtest86+:CoreInfo:nvramcui;
11#
Bayou(loadmenuformultiplepayloads);
11#
Libpayload;
15
Coreboot–internals
Payloads:
1#
SeaBIOS(oldname-ADLO);
1#
OpenBIOS;
3#
OpenFirmware;
4#
GRUB1:FILO;
5#
TianoCore(UEFI);
6#
Etherboot/GPXE/iPXE;
7#
OSaspayload:Linux:NetBSD:PLAN9;
8#
Depthcharge:Uboot:Explorer(Chromebookspayloads);
9#
Games:Tint:Invaders;
10#
Testsandinfo:Memtest86:Memtest86+:CoreInfo:nvramcui;
11#
Bayou(loadmenuformultiplepayloads);
11#
Libpayload;
15
Coreboot–internals
Payloads:
1#
SeaBIOS(oldname-ADLO);
1#
OpenBIOS;
3#
OpenFirmware;
4#
GRUB1:FILO;
5#
TianoCore(UEFI);
6#
Etherboot/GPXE/iPXE;
7#
OSaspayload:Linux:NetBSD:PLAN9;
8#
Depthcharge:Uboot:Explorer(Chromebookspayloads);
9#
Games:Tint:Invaders;
10#
Testsandinfo:Memtest86:Memtest86+:CoreInfo:nvramcui;
11#
Bayou(loadmenuformultiplepayloads);
11#
Libpayload;
15
Coreboot–internals
OwnPayloadwithlibpayload:
#include

int
main(
void
)
{
printf(”Hello:

world!\n”);
halt();
return
0;
}
16
Coreboot–internals
ЗсторияпроектаCoreBoot:
1#
существуетс1999годакаксвободнаяGPLv1firmwareдля
кластерныхрешений(LINUXBIOS);
1#
95:7%-ANSIC:1:4%-Assembly:rest-C++:Perl:Shell:textfiles
3#
May/1015119newcommitsper30days(7#3commits/day:1commit
every197mins)
4#
с1008называетсяCoreBootт#к#можетзагружатьнетолько
Linux:ноиBSDиPLAN9
5#
с1010разрабатываетсядляGoogleдляChromeбуковподx86
6#
http://coreboot#org
17
Coreboot–internals
ЗсторияпроектаCoreBoot:
1#
существуетс1999годакаксвободнаяGPLv1firmwareдля
кластерныхрешений(LINUXBIOS);
1#
95:7%-ANSIC:1:4%-Assembly:rest-C++:Perl:Shell:textfiles
3#
May/1015119newcommitsper30days(7#3commits/day:1commit
every197mins)
4#
с1008называетсяCoreBootт#к#можетзагружатьнетолько
Linux:ноиBSDиPLAN9
5#
с1010разрабатываетсядляGoogleдляChromeбуковподx86
6#
http://coreboot#org
17
Coreboot–internals
ЗсторияпроектаCoreBoot:
1#
существуетс1999годакаксвободнаяGPLv1firmwareдля
кластерныхрешений(LINUXBIOS);
1#
95:7%-ANSIC:1:4%-Assembly:rest-C++:Perl:Shell:textfiles
3#
May/1015119newcommitsper30days(7#3commits/day:1commit
every197mins)
4#
с1008называетсяCoreBootт#к#можетзагружатьнетолько
Linux:ноиBSDиPLAN9
5#
с1010разрабатываетсядляGoogleдляChromeбуковподx86
6#
http://coreboot#org
17
Coreboot–internals
ЗсторияпроектаCoreBoot:
1#
существуетс1999годакаксвободнаяGPLv1firmwareдля
кластерныхрешений(LINUXBIOS);
1#
95:7%-ANSIC:1:4%-Assembly:rest-C++:Perl:Shell:textfiles
3#
May/1015119newcommitsper30days(7#3commits/day:1commit
every197mins)
4#
с1008называетсяCoreBootт#к#можетзагружатьнетолько
Linux:ноиBSDиPLAN9
5#
с1010разрабатываетсядляGoogleдляChromeбуковподx86
6#
http://coreboot#org
17
Coreboot–internals
ЗсторияпроектаCoreBoot:
1#
существуетс1999годакаксвободнаяGPLv1firmwareдля
кластерныхрешений(LINUXBIOS);
1#
95:7%-ANSIC:1:4%-Assembly:rest-C++:Perl:Shell:textfiles
3#
May/1015119newcommitsper30days(7#3commits/day:1commit
every197mins)
4#
с1008называетсяCoreBootт#к#можетзагружатьнетолько
Linux:ноиBSDиPLAN9
5#
с1010разрабатываетсядляGoogleдляChromeбуковподx86
6#
http://coreboot#org
17
Coreboot–internals
ЗсторияпроектаCoreBoot:
1#
существуетс1999годакаксвободнаяGPLv1firmwareдля
кластерныхрешений(LINUXBIOS);
1#
95:7%-ANSIC:1:4%-Assembly:rest-C++:Perl:Shell:textfiles
3#
May/1015119newcommitsper30days(7#3commits/day:1commit
every197mins)
4#
с1008называетсяCoreBootт#к#можетзагружатьнетолько
Linux:ноиBSDиPLAN9
5#
с1010разрабатываетсядляGoogleдляChromeбуковподx86
6#
http://coreboot#org
17
Coreboot–internals
ЗаявленноеподдерживаемоеоборудованиевCoreBootv4на
May/1015:
1#
x86:x86_64:ARM:ARM64:MIPS
1#
61desktopMB
3#
39serverMB
4#
30laptopMB(andsomeApple)
5#
33embeddedboards
6#
17Mini-ITX/Micro-ITX/Nano-ITX
7#
7Set-top-boxes/Thinclients
8#
QEMU
9#
+more
18
Coreboot–internals
ЗаявленноеподдерживаемоеоборудованиевCoreBootv4на
May/1015:
1#
x86:x86_64:ARM:ARM64:MIPS
1#
61desktopMB
3#
39serverMB
4#
30laptopMB(andsomeApple)
5#
33embeddedboards
6#
17Mini-ITX/Micro-ITX/Nano-ITX
7#
7Set-top-boxes/Thinclients
8#
QEMU
9#
+more
18
Coreboot–internals
ЗаявленноеподдерживаемоеоборудованиевCoreBootv4на
May/1015:
1#
x86:x86_64:ARM:ARM64:MIPS
1#
61desktopMB
3#
39serverMB
4#
30laptopMB(andsomeApple)
5#
33embeddedboards
6#
17Mini-ITX/Micro-ITX/Nano-ITX
7#
7Set-top-boxes/Thinclients
8#
QEMU
9#
+more
18
Coreboot–internals
ЗаявленноеподдерживаемоеоборудованиевCoreBootv4на
May/1015:
1#
x86:x86_64:ARM:ARM64:MIPS
1#
61desktopMB
3#
39serverMB
4#
30laptopMB(andsomeApple)
5#
33embeddedboards
6#
17Mini-ITX/Micro-ITX/Nano-ITX
7#
7Set-top-boxes/Thinclients
8#
QEMU
9#
+more
18
Coreboot–internals
ЗаявленноеподдерживаемоеоборудованиевCoreBootv4на
May/1015:
1#
x86:x86_64:ARM:ARM64:MIPS
1#
61desktopMB
3#
39serverMB
4#
30laptopMB(andsomeApple)
5#
33embeddedboards
6#
17Mini-ITX/Micro-ITX/Nano-ITX
7#
7Set-top-boxes/Thinclients
8#
QEMU
9#
+more
18
Coreboot–internals
ЗаявленноеподдерживаемоеоборудованиевCoreBootv4на
May/1015:
1#
x86:x86_64:ARM:ARM64:MIPS
1#
61desktopMB
3#
39serverMB
4#
30laptopMB(andsomeApple)
5#
33embeddedboards
6#
17Mini-ITX/Micro-ITX/Nano-ITX
7#
7Set-top-boxes/Thinclients
8#
QEMU
9#
+more
18
Coreboot–internals
ЗаявленноеподдерживаемоеоборудованиевCoreBootv4на
May/1015:
1#
x86:x86_64:ARM:ARM64:MIPS
1#
61desktopMB
3#
39serverMB
4#
30laptopMB(andsomeApple)
5#
33embeddedboards
6#
17Mini-ITX/Micro-ITX/Nano-ITX
7#
7Set-top-boxes/Thinclients
8#
QEMU
9#
+more
18
Coreboot–internals
ЗаявленноеподдерживаемоеоборудованиевCoreBootv4на
May/1015:
1#
x86:x86_64:ARM:ARM64:MIPS
1#
61desktopMB
3#
39serverMB
4#
30laptopMB(andsomeApple)
5#
33embeddedboards
6#
17Mini-ITX/Micro-ITX/Nano-ITX
7#
7Set-top-boxes/Thinclients
8#
QEMU
9#
+more
18
Coreboot–internals
ЗаявленноеподдерживаемоеоборудованиевCoreBootv4на
May/1015:
1#
x86:x86_64:ARM:ARM64:MIPS
1#
61desktopMB
3#
39serverMB
4#
30laptopMB(andsomeApple)
5#
33embeddedboards
6#
17Mini-ITX/Micro-ITX/Nano-ITX
7#
7Set-top-boxes/Thinclients
8#
QEMU
9#
+more
18
CorebootHOWTO
19
Coreboot–HowTO
Будетнелишнимнапомнить:
Авторненесётответственностизавозможныеповреждения
оборудования:упущеннуювыгоду:
разрушенную
психикуи
отсутствиеудачивстольнелёгкомделе;
10
Coreboot–HowTO
ЧтопотребуетсядляустановкиCoreBoot?
1#
удачанайтиMBвспискеподдерживаемогооборудования;
1#
обновитьоригинальныйпроприетарныйBIOSдопоследней
версии;
3#
ROMdatasheetируководствопоразборкеустройства;
4#
программныйпрограмматор-flashrom(иногдаработает);
5#
аппаратныйпрограмматор(когданеработаетпрограммный);
6#
паяльнаястанция(когдааппаратныйнельзяподключитьчерез
ISP);
7#
документациипоoffsetдлямодулейворигинальном
проприетарномBIOS;
8#
git:GCC:binutils+некоторыеotherdependencies;
9#
CoreBootsource;
11
Coreboot–HowTO
ЧтопотребуетсядляустановкиCoreBoot?
1#
удачанайтиMBвспискеподдерживаемогооборудования;
1#
обновитьоригинальныйпроприетарныйBIOSдопоследней
версии;
3#
ROMdatasheetируководствопоразборкеустройства;
4#
программныйпрограмматор-flashrom(иногдаработает);
5#
аппаратныйпрограмматор(когданеработаетпрограммный);
6#
паяльнаястанция(когдааппаратныйнельзяподключитьчерез
ISP);
7#
документациипоoffsetдлямодулейворигинальном
проприетарномBIOS;
8#
git:GCC:binutils+некоторыеotherdependencies;
9#
CoreBootsource;
11
Coreboot–HowTO
ЧтопотребуетсядляустановкиCoreBoot?
1#
удачанайтиMBвспискеподдерживаемогооборудования;
1#
обновитьоригинальныйпроприетарныйBIOSдопоследней
версии;
3#
ROMdatasheetируководствопоразборкеустройства;
4#
программныйпрограмматор-flashrom(иногдаработает);
5#
аппаратныйпрограмматор(когданеработаетпрограммный);
6#
паяльнаястанция(когдааппаратныйнельзяподключитьчерез
ISP);
7#
документациипоoffsetдлямодулейворигинальном
проприетарномBIOS;
8#
git:GCC:binutils+некоторыеotherdependencies;
9#
CoreBootsource;
11
Coreboot–HowTO
ЧтопотребуетсядляустановкиCoreBoot?
1#
удачанайтиMBвспискеподдерживаемогооборудования;
1#
обновитьоригинальныйпроприетарныйBIOSдопоследней
версии;
3#
ROMdatasheetируководствопоразборкеустройства;
4#
программныйпрограмматор-flashrom(иногдаработает);
5#
аппаратныйпрограмматор(когданеработаетпрограммный);
6#
паяльнаястанция(когдааппаратныйнельзяподключитьчерез
ISP);
7#
документациипоoffsetдлямодулейворигинальном
проприетарномBIOS;
8#
git:GCC:binutils+некоторыеotherdependencies;
9#
CoreBootsource;
11
Coreboot–HowTO
ЧтопотребуетсядляустановкиCoreBoot?
1#
удачанайтиMBвспискеподдерживаемогооборудования;
1#
обновитьоригинальныйпроприетарныйBIOSдопоследней
версии;
3#
ROMdatasheetируководствопоразборкеустройства;
4#
программныйпрограмматор-flashrom(иногдаработает);
5#
аппаратныйпрограмматор(когданеработаетпрограммный);
6#
паяльнаястанция(когдааппаратныйнельзяподключитьчерез
ISP);
7#
документациипоoffsetдлямодулейворигинальном
проприетарномBIOS;
8#
git:GCC:binutils+некоторыеotherdependencies;
9#
CoreBootsource;
11
Coreboot–HowTO
ЧтопотребуетсядляустановкиCoreBoot?
1#
удачанайтиMBвспискеподдерживаемогооборудования;
1#
обновитьоригинальныйпроприетарныйBIOSдопоследней
версии;
3#
ROMdatasheetируководствопоразборкеустройства;
4#
программныйпрограмматор-flashrom(иногдаработает);
5#
аппаратныйпрограмматор(когданеработаетпрограммный);
6#
паяльнаястанция(когдааппаратныйнельзяподключитьчерез
ISP);
7#
документациипоoffsetдлямодулейворигинальном
проприетарномBIOS;
8#
git:GCC:binutils+некоторыеotherdependencies;
9#
CoreBootsource;
11
Coreboot–HowTO
ЧтопотребуетсядляустановкиCoreBoot?
1#
удачанайтиMBвспискеподдерживаемогооборудования;
1#
обновитьоригинальныйпроприетарныйBIOSдопоследней
версии;
3#
ROMdatasheetируководствопоразборкеустройства;
4#
программныйпрограмматор-flashrom(иногдаработает);
5#
аппаратныйпрограмматор(когданеработаетпрограммный);
6#
паяльнаястанция(когдааппаратныйнельзяподключитьчерез
ISP);
7#
документациипоoffsetдлямодулейворигинальном
проприетарномBIOS;
8#
git:GCC:binutils+некоторыеotherdependencies;
9#
CoreBootsource;
11
Coreboot–HowTO
ЧтопотребуетсядляустановкиCoreBoot?
1#
удачанайтиMBвспискеподдерживаемогооборудования;
1#
обновитьоригинальныйпроприетарныйBIOSдопоследней
версии;
3#
ROMdatasheetируководствопоразборкеустройства;
4#
программныйпрограмматор-flashrom(иногдаработает);
5#
аппаратныйпрограмматор(когданеработаетпрограммный);
6#
паяльнаястанция(когдааппаратныйнельзяподключитьчерез
ISP);
7#
документациипоoffsetдлямодулейворигинальном
проприетарномBIOS;
8#
git:GCC:binutils+некоторыеotherdependencies;
9#
CoreBootsource;
11
Coreboot–HowTO
ЧтопотребуетсядляустановкиCoreBoot?
1#
удачанайтиMBвспискеподдерживаемогооборудования;
1#
обновитьоригинальныйпроприетарныйBIOSдопоследней
версии;
3#
ROMdatasheetируководствопоразборкеустройства;
4#
программныйпрограмматор-flashrom(иногдаработает);
5#
аппаратныйпрограмматор(когданеработаетпрограммный);
6#
паяльнаястанция(когдааппаратныйнельзяподключитьчерез
ISP);
7#
документациипоoffsetдлямодулейворигинальном
проприетарномBIOS;
8#
git:GCC:binutils+некоторыеotherdependencies;
9#
CoreBootsource;
11
Coreboot–HowTO
ОбщийалгоритмдляустановкиCoreBootнаустройство:
1#
ПрочитатьизПЗУоригинальныйпроприетарныйSystemBIOS;
1#
Ззвлечьжизненнонеобходимыемодулидлякоторыхнет
свободнойзамены;
3#
СобратьCorebootсмодулями;
4#
Записатьbuild/coreboot#romвПЗУ;
11
Coreboot–HowTO
ОбщийалгоритмдляустановкиCoreBootнаустройство:
1#
ПрочитатьизПЗУоригинальныйпроприетарныйSystemBIOS;
1#
Ззвлечьжизненнонеобходимыемодулидлякоторыхнет
свободнойзамены;
3#
СобратьCorebootсмодулями;
4#
Записатьbuild/coreboot#romвПЗУ;
11
Coreboot–HowTO
ОбщийалгоритмдляустановкиCoreBootнаустройство:
1#
ПрочитатьизПЗУоригинальныйпроприетарныйSystemBIOS;
1#
Ззвлечьжизненнонеобходимыемодулидлякоторыхнет
свободнойзамены;
3#
СобратьCorebootсмодулями;
4#
Записатьbuild/coreboot#romвПЗУ;
11
Coreboot–HowTO
ОбщийалгоритмдляустановкиCoreBootнаустройство:
1#
ПрочитатьизПЗУоригинальныйпроприетарныйSystemBIOS;
1#
Ззвлечьжизненнонеобходимыемодулидлякоторыхнет
свободнойзамены;
3#
СобратьCorebootсмодулями;
4#
Записатьbuild/coreboot#romвПЗУ;
11
Coreboot–HowTO
Thinkpadx101-ПазборкаилокализацияПЗУ
13
Coreboot–HowTO
Thinkpadx101-ПазборкаилокализацияПЗУ
14
Coreboot–HowTO
Thinkpadx101-ПазборкаилокализацияПЗУ
MX15L6445E
15
Coreboot–HowTO
магия
извлеченияME#binиdescriptor#binдляThinkpadx101:
dd
if
=flash#binof=descriptor#bincount=11188bs=1M\
iflag=count_bytes
dd
if
=flash#binof=me#binskip=11188count=5130591\
bs=1Miflag=count_bytes:skip_bytes
cat
/proc/iomem|grep’VideoROM’|(
read
m;\
m=${m/:*};s=${m/

*};e=${m/*

};dd
if
=/dev/mem\
of=vgabios#binbs=1cskip=$[0x$s]\
count=$[$[0x$e]

$[0x$s]+1]
16
Coreboot–HowTO
СобираемCorebootдляThinkpadx101:
важныепараметрысборки
makemenuconfig
1#
MX15L6445E
1#
LENOVOx101
3#
ME#bin
4#
descriptor#bin
5#
videorom#bin
17
Coreboot–HowTO
СобираемCorebootдляThinkpadx101:
важныепараметрысборки
makemenuconfig
1#
MX15L6445E
1#
LENOVOx101
3#
ME#bin
4#
descriptor#bin
5#
videorom#bin
17
Coreboot–HowTO
СобираемCorebootдляThinkpadx101:
важныепараметрысборки
makemenuconfig
1#
MX15L6445E
1#
LENOVOx101
3#
ME#bin
4#
descriptor#bin
5#
videorom#bin
17
Coreboot–HowTO
СобираемCorebootдляThinkpadx101:
важныепараметрысборки
makemenuconfig
1#
MX15L6445E
1#
LENOVOx101
3#
ME#bin
4#
descriptor#bin
5#
videorom#bin
17
Coreboot–HowTO
СобираемCorebootдляThinkpadx101:
важныепараметрысборки
makemenuconfig
1#
MX15L6445E
1#
LENOVOx101
3#
ME#bin
4#
descriptor#bin
5#
videorom#bin
17
Coreboot–HowTO
make
18
Coreboot–HowTO
ПодключениепрограмматоракПЗУ
ноутбка:
19
Coreboot–HowTO
ЗаписьвПЗУ:
30
demotime
31
Coreboot–demo
31
Questions?
33

Приложенные файлы

  • pdf 7010624
    Размер файла: 381 kB Загрузок: 0

Добавить комментарий