Egy kis "hardverhekk" sötét téli estékre...

Pár hete elkezdtem a Coreboot nevű nyílt forrású firmware-t portolni az otthoni HTPC-mben használt ASUS AM1I-A alaplapra.

Egész jól haladok, egy Ubuntu 16.04-gyel teszteltem tegnap, ami a kezdeti, hardverkonfigurációs problémákra visszavezethető fagyogatások ellenére most már gond nélkül bebootol és az első tesztek alapján hibátlanul működik, igaz, nem volt még lehetőségem alaposabban kitesztelni.

Így néz ki most az asztalom otthon:

https://www.youtube.com/watch?v=aGGqsWx3-1c

Az F8-as kód, ahol a debug modul kijelzője "megáll", annyit jelent, hogy a coreboot végzett a hardver inicializálásával, és átadta a vezérlést a payload-nak, ami jelen esetben nem más, mint a KVM-es virtualizáció kapcsán biztosan ismerősen csengő SeaBIOS:

https://github.com/coreboot/coreboot/blob/master/src/include/console/po…

/**
* \brief Entry into elf boot
*
* This POST code is called right before invoking jmp_to_elf_entry()
* jmp_to_elf_entry() invokes the payload, and should never return
*/
#define POST_ENTER_ELF_BOOT 0xf8

A coreboot payload-jai közül a memtest, a SeaBIOS és a videón is látható nvramcui (ami lényegében egy minimalista BIOS setup implementáció) tökéletesen működik, a TianoCore tesztelése viszont még várat magára kicsit.

Végső soron az lenne a cél, hogy a gyári, kicsit bugos és lassúcska BIOS-t ki tudjam váltani egy coreboot+TianoCore alapú megoldással, funkcióvesztés nélkül. Egy Fedora 25 fut a HTPC-n, amit EFI módban telepítettem annó, így (hacsak nem akarom újratelepíteni a rendszert MBR módban) mindenképp a TianoCore-t volna érdemes használni majd "élesben".

Alább pár hasznos link, ha esetleg valaki kedvet kapott volna a portoláshoz:

https://www.coreboot.org/Motherboard_Porting_Guide
https://www.coreboot.org/SeaBIOS
https://www.coreboot.org/BeagleBone_Black_-_screwdriver
https://www.coreboot.org/EHCI_Debug_Port
https://github.com/avivgr/teensy_debugdev

Update 2018-03-01: bekerült az alaplap a coreboot által támogatott alaplapok közé:

https://review.coreboot.org/#/c/coreboot/+/23002/
https://www.coreboot.org/Supported_Motherboards

Hozzászólások

Köszi! Van benne kihívás, az biztos, bár az az igazság, hogy maga a platform (AMD Kabini) már implementálva volt a kódban, ráadásul épp a gyártó által, így valójában csak annyi dolgom volt, hogy hozzáigazítottam a beállításokat ehhez a konkrét alaplaphoz (pl. GPIO pinek beállításai, ami minden lapnál más és más) és javítottam egy-két bugot, ami menet közben felmerült. Persze ettől még nagyon sok időbe telt, mire a mostani állapotig eljutottam, de szerencsére kellően kitartó és makacs vagyok ahhoz, hogy sose adjam fel, amit egyszer a fejembe veszek. :)

Egy ilyen projekt sok szorgalmat és türelmet igényel, viszont cserébe elképesztő sokat lehet tanulni menet közben a PC-k alacsony szintű működéséről (buszok, órajelek, regiszterek, megszakításkezelés stb). A portolás javarészt abból állt, hogy az AMD által publikált developer guide-ban lévő infók alapján addig hegesztgettem a kódot, amíg egyszer csak be nem bootolt.

Az egyik legnagyobb kihívás az volt, hogy az alaplap "jobbkezeként" működő SuperIO IC-hez nem találtam publikusan elérhető datasheet-et, ráadásul a gyártó sem volt hajlandó kiadni, így kénytelen voltam reverse engineering-gel és némi kísérletezgetéssel megoldani, hogy legyen egy működő soros konzolom, ami nélkülözhetetlen a hatékony debuggoláshoz.

A linket köszönöm, igazából nem szeretnék konvertálni, inkább az lenne a cél, hogy a meglévő rendszert egy az egyben be tudjam bootolni coreboot/TianoCore alól. Tudom, sok a vita ennek kapcsán, de nekem nincs semmi bajom az UEFI-vel, ha a TianoCore képes elindítani a gyári BIOS-szal telepített Fedorát, az nekem már elég a boldogsághoz. :)

kénytelen voltam reverse engineering-gel és némi kísérletezgetéssel megoldani, hogy legyen egy működő soros konzolom

Ezt a vélhetően küzdelmes munka eredményét nem publikálod valahol a neten? Legalább valamilyen doksi legyen, ha nem is teljes, s nem is hivatalos, hátha segít még valakinek.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Természetesen fogom publikálni a munkámat (reményeim szerint be is fognak kerülni majd a fejlesztéseim a coreboot hivatalos repójába, és támogatott státusza lesz ennek az alaplapnak), de külön dokumumentációt nem szeretnék készíteni, na meg amúgy sincs rá szükség, hiszen ott a forráskód. :)

Ne gondold, hogy írtam egy 100 oldalas feljegyzést magamnak arról, hogy az egyes regiszterek hogy működnek, mi a funkciójuk, és milyen lehetséges állapotaik vannak, mert nem erről van szó. Szerencsére az ITE által gyártott chipek eléggé egy kaptafára készülnek, a különféle modellek inkább csak funkcionalitásban térnek el egymástól. Pl. úgy tudom, minden ITE chipnél ugyanúgy kell "megszólítani" az IC-t (konfigurációs módba kapcsolni), amiben különbségek vannak, az az LDN-ek (logikai komponensek) azonosítói, pl. COM port, LPT port, GPIO vezérlő, illetve a regiszterek konkrét működése (melyik regiszter mit állít, milyen lehetséges állapotai vannak stb). Itt igazából annyit csináltam, hogy a gyári BIOS-szal bebootolva kidumpoltam a regiszterek tartalmát, majd ezt átültettem a coreboot kódjába. Arra a mazochista feladatra már nem vállalkoztam, hogy a SuperIO chip-en lévő összesen 56 db GPIO lábról kiderítsem, hogy pontosan mire használja őket az alaplap, mert akkor talán jövőre ilyenkor sikerült volna eljutnom odáig, hogy bebootoljon a rendszer. :D

Szia!

Azt szeretném kérdezni, hogy Libreboot-ban tudnál-e segíteni? Oda is kell hw + tudás.
Nekem Gigabyte GA-G41M-ES2L van. Libreboot támogatott lap: https://libreboot.org/docs/hardware/ga-g41m-es2l.html
De egyéb eszköz (https://libreboot.org/docs/install/bbb_setup.html) nem áll rendelkezésre. Se tudás hozzá.
Menete ez lenne: https://libreboot.org/docs/install/ga-g41m-es2l.html

Bárki segítségét szívesen fogadom, akár a kihívásért, de természetesen korrekt honorárium ellenében is megy a dolog.

Szia!

Én most jól el vagyok a magam kis projektjével, sajnos biztos nem férne bele az időmbe, hogy egy másik hasonló projektet bevállaljak mellé, de szívesen segítek, ha van valami konkrét kérdés vagy probléma.

Az egyik linken egyébként azt írják: "Internal flashing is possible", ami azt jelenti, hogy külső flash programozó nélkül is be lehet égetni a libreboot-ot a flash-be.

Tekintve, hogy támogatott az alaplap, szerintem nyugodtan meg lehet próbálkozni a libreboot flash-be égetésével - persze azért itt is van némi rizikó.

Ennél az alaplapnál kicsit macerás a külső flash-elés a DualBIOS miatt (a két chip "osztozik" az SPI buszon), de megoldható a dolog.

A flashrom-ból a legfrissebb verziót pillanatok alatt ki lehet fordítani forrásból az alábbi linken lévő útmutatást követve:

https://www.flashrom.org/Downloads