Aha, tak to jsem si popletl. Nešlo o kompilaci firmware, ale o kompilaci kernelu od no_bodyho + tvoje úpravy do vanilky 5.0.8
To se odkazujete na historické verze, se kterými jsme my dva začínali.
Verze patche, co jde momentálně do Vanilky, je učesanější, bylo zohledněno několik námitek/hledisek maintainerů,
jak to přesně navlíknout, aby se změny pro T230C2 uplatnily skutečně jenom pro T230C2 - prostě to co sám no_body zmínil jako "todo".
Plus tam byl jeden-dva další drobné cleanupy dalších řešených quirků. Kromě toho quirku s resetem bufferů jsem snad zaslechl, že díky transplantaci patche do dvbsky.c namísto cxusb.c bude líp chodit podpora pro IR dálkáč.
Obecně to vypadá, že ovladač dvbsky.c je o kus dál v pečlivé strukturalizaci kódu (směrem k plug-n-play a code reuse pro různé příbuzné modely HW). On totiž ten USB dongle obsahuje hned několik čipů, které je zvenčí vidět. Konkrétně demodulátor s USB rozhraním, a skrz něj ještě skrz I2C ovladatelný tuner. (Už si nepamatuju, jestli třeba ještě nějaký třetí šváb v RF front-endu.) Různé konstrukce tunerů se liší kombinací těchto dvou-tří švábů, jejich zadrátováním a konfigurací, ale ti švábi se dost často opakují. Takže podle toho vypadá i struktura kódu ovladačů. Maintaineři se maximálně snaží, aby se neduplikoval zdrojový kód, a co se jednou napíše pro nějaký dongle a funguje to, tak aby se s tím svezl i další hardware, který už existuje nebo se v budoucnu objeví.
Zrovna u různých modelů/revizí Mygica se tuším řešilo, že někde je potřeba z tuneru do demodulátoru posílat payload s explicitními hodinami nebo bez, a jakou hodinovou frekvenci použít apod. Nebo že v jednom modelu je tuner vidět skrz I2C z demodulátoru na I2C řadiči A a na příbuzném na řadiči B... A že "T230C rev.2" vlastně nebyla formálně oznámena, ale vypadá to, že se prostě takový hardware objevil na trhu, a vyznačuje se určitým designovým bugem/odchylkou snad na plošáku, oproti klasické T230C, takže je potřeba (a lze to) ten bug obejít, ovšem vyžaduje to drobnou odchylku v chování ovladače, což výrobce po pár tisících prodaných kusů následně zohlednil změnou USB PID... prostě žůžo. Toto vše maintaineři zjišťují převážně pokus/omyl, reverzním inženýrstvím. A takovéhle modulární techtle se odehrávají v tom jednom pitomém donglíku, na plošáku velkém jak nehet...
Moc mě to teda není jasné jak to funguje. Když přijde na trh nový HW (nemusí to být jen DVB-T2), tak nestačí když výrobce dodá fw soubory, ale ten daný produkt musí být navíc i v kernelu?
Je dobrým zvykem, že na rozhraní USB (nebo třeba PCI) je konkrétní model hardwaru jednoznačně určen nějakými přidělenými identifikačními kódy: na USB Vendor ID a Product ID. Když postupně koupíte na různých místech v různém čase dvě hračičky, které mají stejné tyto kódy, měly by ty dvě hračičky fungovat se shodným softwarovým ovladačem na hostitelském počítači. K tomu jsou ty device-ID kódy dobré. (Nebudu radši mást výjimkami a příhodami z natáčení.)
Dnešní kus periferního HW, který z hostitelského stroje vidíte jako pár "USB endpointů" a IDček, obsahuje několik čipů (viz výše). Dost často tyhle čipy obsahují MCU jádra - nějaké prťavé ARMy, 80C51 apod. Aby ten USB dongle nemusel obsahovat ještě taky hejno EEPROMek/flashek, a taky kvůli pružnosti updatů, je nutné/vhodné, uploadnout do těch pidi MCU jader firmware při startu počítače/zařízení/ovladače. Tenhle firmware je k dispozici pouze v binární podobě, a často nikoli přímo od výrobce periferní hračky, ale ještě navíc ho autoři/maintaineři linuxových driverů museli v potu tváře vypárat z windowsího binárního ovladače... Zdrojáky k tomu firmwaru nejsou a navíc je to pro velmi různé CPU/MCU architektury, takže i kdyby zdrojáky byly, je nepravděpodobné, že by bylo zvladatelné, vláčet zdrojáky firmwaru jako součást vanilkového linuxového kernelu a cross-kompilovat je současně s vlastním kódem kernelu. Takže nakonec všichni přimhouřili oko (Linus i skladatelé distribucí) a mají většinu binárních firmwarů dostupných poměrně oficiálně v balíčkovacím systému. Firmwary žijí hezky na hromádce v /lib/firmware , víme o nich, nejde bez nich fungovat, takže se kromě skalních "free software" aktivistů nikdo moc nevzteká.
No a pak je strana toho hostitelského počítače. Kolem hardwaru je obalený kernel, ten je v dnešní době modulární, ovladače pro hardware mívají podobu kernelových modulů. A od kernelu máme zdrojáky, včetně zdrojáků ovladačů pro hardware. Zdrojáky ovladačů pro všelijaký hardware jsou součástí balíku zdrojáků vanilkového linuxového kernelu, který roste na
www.kernel.org. Kernel je to co běží na Vašem procesoru (nějaké Core i3 apod.) - ovladače jsou modulární kusy tohoto kernelu.
Nad kernelem se vznáší jakýsi user space, počínaje libc, dál už to znáte.
Když se vrátím k Vašemu dotazu:
Pokud výrobce USB cetek uvede na trh novou cetku, má dvě možnosti:
A) nová cetka je natolik podobná předchozí generaci cetek, z hlediska ovládání skrz USB rozhraní (nebo PCI apod.), že může mít původní USB IDčka, a fungovat s původním ovladačem. Prostě zpětná kompatibilita hardwarového rozhraní vůči ovladači.
B) nová cetka je funkčně natolik odlišná, že by se starým ovladačem nefungovala. Proto dostane přiděleno nové USB ID a musí být vydána nová verze ovladače, která s touto novou revizí hardwaru bude fungovat.
Ovladač obsahuje tabulku USB IDček ve standardizovaném formátu, při natažení kernelového modulu si ji kernel standardním způsobem přečte, a pokud se následně na stromě USB sběrnice objeví takové zařízení (USB IDčka jsou shodná), kernel přes nějaké callbacky z této tabulky "ovladač nastartuje" pro danou instanci HW zařízení.
Verze firmwaru uvnitř v inteligentních cetkách se střídají jak ponožky - ale pokud se nemění HW rozhraní vůči hostitelskému ovladači, může zůstat původní hostitelský ovladač. Viz třeba RAIDové řadiče slušných značek.
V našem případě USB tuneru je ale ten firmware zřejmě dlouhá léta neměnný.
Pokud se nepletu, ty firmwarové bloby, které je potřeba kvůli DVB-T2 donglu odněkud stáhnout do /lib/firmware, ty se netýkají snad ani demodulátoru (USB slave bridge) ale konkrétně tuneru = té maličké "analogové" blechy, co je dostupná skrz I2C. (Ona vlastně asi analogová moc nebude, ale to je opět na delší povídání.) Čili pak tentýž blob může být potřeba pro různé DVB-T2 dongly, klidně s různými USB ID's?
Pozn.: s ohledem na toto názvosloví mi připadá poměrně dementní, označovat jako firmware to, čemu se dřív několik desítek let říkalo BIOS. Běží to na hostitelském CPU, tak to u mě není firmware - ať si marketingová oddělení Intelu, AMD, Applu a Microsoftu standardizují co chtějí :-) Košer firmware je kdyžtak ten malý blob, uložený v BIOSové flashce, který se při startu počítače pokradmu uploadne do AMT BMC parazita.
Kompatibilita HW rozhraní je dost pestré pole pro všelijakou tvorbu. Zařízení od různých výrobců s natolik shodným a standardizovaným rozhraním, přitom třeba relativně pružným, že na ně funguje generický ovladač. Vemte si SATA nebo IDE disky, nebo třeba vnitřní rozhraní "legacy IDE" nebo moderního AHCI na hostitelské sběrnici (PCI, PCI-e). Nebo třeba USB mass storage. Taky má univerzální class-based ovladač, přestože USB VID a PID se patrně model od modelu liší...
a DOST :-)