субота, 20 априла, 2024
Хардвер

Firmware и secure boot, FUD или претња? (1. део)

Аутор: Иван Булатовић

Некада давно, у веома, веома удаљеној галаксији, када је „dial-up” конекција преко бакарне парице без PCM-а била привилегија, Linux корисници су много више ценили хардвер који је био испоручиван у FoC (енгл. Firmware on Chip) варијанти. Можда се присећате тзв. „Win модема”, који су се од хардверских разликовали по томе што је DSP (Digital Signal Processor) био имплементиран софтверски. То је резултирало трошењем CPU циклуса и успоравањем рачунара када сте били на мрежи, али је погодовало компанијама попут US Robotics, Motorola, Lucent и осталима, јер је PCB (Printed Circuit Board) био до три пута мањи него код хардверских модема, а гомила чипова и пратећих компоненти је могло бити уклоњено, чиме је њихова производња појефтинила. Са раслојавањем се овде није стало, па је постало тешко разликовати хардверске и „Win модеме” само по величини. Примера ради, Conexant HSF је чист софтверски модем док је Conexant HCF мање процесирања радио софтверски. Први није радио на Linux-у, док је други могао бити натеран на то компајлирањем OEM driver-а и „скрнављењем” kernel-а. ТВ картице имају сличну историју; „гломазне” картице, већина са BT878 чипом, су биле компатибилне са Linux-ом, док су картице, које су по спецификацији тражиле последњи врисак модерне PC технологије и биле мало веће од возачке дозволе, имале нулте шансе да прораде под, омиљеним нам,Linux дистрибуцијама.

Дакле, хардвер и firmware на њему (док год је програмибилан) је наш пријатељ? Данас, ова констатација не може бити даља од истине.

Linux корисници су се изборили за право да купе хардвер без преинсталираног „mainstream desktop” оперативног система, али победа је донекле Пирова, јер у процесу производње тог истог хардвера, инсталација и коришћење других оперативних система може представљати болно искуство.

Све се своди на минимизацију трошкова у производњи, диференцијацији и ограничавању функција хардвера које би он иначе могао да обавља, а које је произвођач са намером онемогућио кроз firmware, да би купце натерао да пазаре скупљи производ са могућностима које им можда никада неће затребати. Пример за ово је Intel, који је H67 chipset „осакатио” тако да је VT-d подршка изостала иако се кроз BIOS могла омогућити. Ако сте планирали да свој desktop рачунар користите за виртуелизацију, купили Intel-ов процесор који подржава VT-d инструкције, купили матичну плочу са chipset-ом који по спецификацијама подржава VT-d, чекало вас је непријатно изненађење у виду OEM произвођача који су по смерницама из Intel-а онемогућили VT-d у BIOS-у, а што у тренутку изласка матичне плоче на тржиште није било јасно назначено. Са друге стране, произвођачи GPU чипова користе firmware да неисправне компоненте чипа искључе, а да производ остане потпуно функционалан са умањеним перформансама, што је апсолутно корисно за купце који графичке картице могу купити по јефтинијој цени, а са свим могућностима које скупље и брже картице имају; мада су ти исти произвођачи прибегавали истој тактици као и Intel, па су корисници хаковањем firmware-а са јефтинијим картицама достизали перформансе бржих (AMD HD6950 → HD6970). Дакле, firmware може бити користан и купцима и произвођачима, али се може и злоупотребити, тако да, иначе исправан хардвер ограниче зарад манипулације тржиштем – док год су сва ограничења јасно назначена на производу, а често нису, то и не представља неки проблем за купца.

Најпознатија имплементација firmware-а се огледа кроз BIOS/UEFI. То је интерфејс којим можете управљати основним поставкама рачунара и његових компоненти. Ради унификације, осмишљено је неколико стандарда и спецификација од којих је најбитнија ACPI. ACPI је отворена спецификација која је, макар на папиру, платформски агностична и која контролу над конфигурацијом и стањем хардверских компоненти пребацује на оперативни систем који подржава ACPI. То конкретно значи да корисник, или оперативни систем, може да регулише подразумевану брзину вентилатора или такт процесора итд. Звучи добро, у могућности смо да у одређеној мери контролишемо рад хардвера који смо платили.

ACPI дефинише одређен број табела које служе као интерфејс између оперативног система и самог firmware-а. OEM произвођачи дефинишу ове табеле са AML изворним кôдом, који се затим помоћу Microsoft или Intel compiler-а претвара у бинарни облик који је доступан, тј. видљив у kernel простору. Како се генерације матичних плоча заједно са остатком компоненти који чине модерну PC платформу смењују сваке године, врло је кратак временски период који се може посветити подршци производу који је актуелан на тржишту. Примера ради, ажурирања BIOS-а се по правилу „избацују” током прве две године од како се производ нашао на тржишту, а затим се сваки вид firmware подршке за такве производе укида. Свака генерација нових матичних плоча је доступна у виду 15 различитих модела истог OEM-а, од којих је за сваки неопходно одржавати BIOS, за штȁ је потребан довољан број програмера, што све, наравно, кошта. Зато се време, за које траје овај вид подршке, непрестано смањује, па се догађа да са рачунаром који је времешан свега годину дана и поред очигледних проблема немате другу опцију осим, да са проблемима научите да функционишете или да пробате да хакујете сам BIOS. Можете купити и нов модел што је и циљ произвођача. Поменете ли Linux произвођачу, велика је вероватноћа да ће вам рећи да не одговарају за функционалност уређаја на том оперативном систему.

Поступак хаковања BIOS-а се огледа у копирању бинарних ACPI табела из заштићеног меморијског простора, њиховим претварањем у изворни AML кôд, прилагођавањем тог кôда, његовим компајлирањем а затим учитавањем помоћу дефинисаних kernel параметара. У већини случајева, AML је компајлиран са Microsoft компајлером од стране OEM произвођача, па у случају да чак и не модификујете AML већ само покушате да га компајлирате са Intel компајлером, у великом броју случајева Intel компајлер ће извршити бројне оптимизације, пријавити упозорења па чак и грешке, што доводи до закључка да се ACPI спецификација и не примењује доследно, већ се BIOS програмери одлучују за трикове који су довољни да хардвер ради исправно на „mainstream” оперативном систему, чиме се ефективно поништава платформски агностична аспирација ACPI спецификације.

Ако заборавимо BIOS на моменат, firmware може да садржи патентом заштићену интелектуалну својину која умногоме може да отежа развој отворених driver-а за хардвер који га имплементира. Велики број Linux корисника који су били, или и даље су, поносни власници netbook преносних рачунара са Atom процесорима и GMA500 (Poulsbo) IGP-ом, знају шта значи мука, где се стабилност и перформансе под Linux-ом могу описати у распону од патетичног до јадног.

Неколико савета којих би требали да се придржавате приликом куповине новог хардвера:

* Немојте бити „early adopter”; сачекајте пар месеци пре куповине најновијих компоненти које су тек изашле на тржиште. Посебну пажњу обратите на матичну плочу.

* Претражите каква су искуства Linux корисника са жељеним хардвером. Kernel bugzilla је одлично место где можете да почнете; на располагању су вам и интернет форуми.

* Добро се информишите о спецификацијама уређаја, виталним компонентама на којима је базиран, проверите да ли се driver за тај уређај активно развија унутар kernel стабла да бисте избегли зависност од OEM-а и његове подршке за Linux.

* Прочитајте корисничко упутство сваког уређаја којег намеравате да купите, пре него што за њега дате новац.

* Пожељно је да је на амбалажи опреме коју купујете назначена подршка за Linux.

Постоје неколико пројеката који за циљ имају firmware отвореног кôда или макар олакшавају дизајнирање истог, као што су: Coreboot, Intel FSP, OpenBoot и OpenWRT. Међутим, истина је да ниједан није добио подршку од стране већине OEM произвођача, те се овакви пројекти ретко где могу видети примењени у пракси.

У следећем броју ЛиБРЕ! часописа описаћемо UEFI и Secure boot и њихов утицај на кориснике Linux базираних оперативних система.