Linux kernel modulok fordítása

Fórumok

A TBS65522 DVB tunerhez le kell fordítanom a drivert. Ez egy javítás után sikerült is, és a TBS6522 tuner működik is vele, de van egy másik AF9035 DVB tunerem is, ami a fordítás előtti állapotban még működött, de utána már nem.

(A komplett LinuxTv csomagba javítják bele a saját drivereiket, ezért az egészet csak egyben lehet lefordítani.)

Letöltöttem az eredeti kernel forrást, és az AF9035 tunerhez tartozó forráskódokat átjavítottam a TBS csomagjában az eredetire, újra lefordítottam, de ugyanaz maradt a helyzet.

A modinfo  a vermagic-ra az összes modul esetén ugyanazt a (helyes) értéket mutatja.

A lefordított új modulok döntő többsége működik, de a linux/drivers/media/usb/dvb-usb és a .../dvb-usb-v2 könyvtárakban lévők nem.

A probléma ott lesz, hogy az rc_register_device hívásakor ezek a modulok rossz értékkel töltik ki az átadott struct-ot.

Nem találom, hogy melyik fájlban és milyen néven van definiálva a kernel verzió.

 

Nem tudja valaki, hogy a kernelmodulok c programjaiban milyen néven hivatkoznak a kernel verzióra ?

 

A dmesg ezt mutatja:

[ 314.687885] dvb_usb_v2: disagrees about version of symbol rc_register_device

[ 314.687890] dvb_usb_v2: Unknown symbol rc_register_device (err -22)

[ 314.687914] dvb_usb_v2: disagrees about version of symbol rc_free_device

[ 314.687915] dvb_usb_v2: Unknown symbol rc_free_device (err -22)

...

Hozzászólások

Mit értesz azalatt hogy "javítás"?

"A TBS65522 DVB tunerhez le kell fordítanom a drivert. Ez egy javítás után sikerült is"

Erre kérdezel rá?

Az egyik modul forráskódjában egy függvényt int típusra definiáltak, pedig void-nak kellett volna. Ezért a fordítás hibaüzenettel leállt.

Javítás után a fordítás hibátlan.

Nagy Gábor   https://sign-el-soft.hu

Rossz helyen keresed a problémát.

A régebbi fordító csak figyelmeztetést adott ilyen félre definiálás esetén, de az újabb verzió szigorúbb, és ezért leáll hibával.

Egyébként meg a függvény tíz soros, és sehol nincs benne "return valami_int;".

Nagy Gábor   https://sign-el-soft.hu

Ez utolsó emlékeim szerint úgy működik, hogy a kernelmoduljaidat AHHOZ a kernelhez (forrás + config) kell hozzáfordítanod, amibe amúgy be akarod tölteni majd. Ergó kell a procedúrához AZ a kernelfordítás, amiből a futó base kernel lett (ez a verzióspecifikus modulfordítás esetére igaz; ki lehet ezt az opciót kapcsolni, akkor kb. random bármi más kernelhez hozzáfordított modult is be tudsz majd tölteni - csak ki tudja, hogy fog-e menni). Ha nem te fordítottad a kerneledet, akkor ez általában azt jelenti, hogy ahonnan a kerneled (binárisban) jött, onnan a teljesen egyező kernel source-t (configgal) is meg kell szerezned, mert csak azzal fog menni a kernel modul fordítás.

Igen, ez lett volna a kovetkezo kerdes :) Pl valódi bubuntu alatt az van hogy megcsinalod-leforditod a modult, beteszed a /lib/modules/... alá, `depmod -a`, mukodik, fasza. Majd a bubuntu a hatterben frissiti a kernelt, de ugy hogy a "biztonsag kedveert" a subsubminor verziojat is noveli. Na, es akkor kapunk egzaktul olyan uzeneteket mint a topicnyito kollega is irt.

Hat, ilyen feladatatokra inkabb rendes debiant hasznalok bubuntu heyett... ott a biztonsagi firssites valodi biztonsagi frissites, nem verzio-zsonglorkodes. Csak meg kb fel-1 eve jott szembe a problema hogy egy headless, remote, stb gepen is valami pupuntu-szarmazekot tettek fel a kollegak (biztos szeretik a kalandokat, pedig van nekik is eleg alapbol), es akkor ment a nyavaly egy random reboot utan, hogy :) 

A konfigját a futó kernelnek ki lehet szedni procfs-ből ha engedélyezve van a /proc/config.gz vagy /boot/config-`uname -r` fájlban is ott szokott lenni. Ehhez elég a kernel.org-ról leszedett azonos verzió és a konfiggal újra lehet fordítani. Sok disztróban van linux-source vagy hasonló package, ami letölti a épp futó kernelhez tartozó source fájl archívumát (ha ez nem valami custom built kernel). Ez annyiból jobb mint a kernel.org-ról leszedett azonos verzió, mert egyes disztrók külön is backportolhatnak bizonyos fixeket és lehet hogy nem lesz minden struct kompatibilis.

Úgy jártam el, ahogy írod: "Letöltöttem az eredeti kernel forrást" ahhoz fordítottam le a dolgot.

A modulok többsége működik gond nélkül.

A modinfo  a vermagic-ra az összes modul esetén ugyanazt a (helyes) értéket mutatja.

Ha a modprobe -f segítségével töltöm be az egyébként nem működő modulokat, akkor azok is működnek. (De ezt csak próbaként tartom elfogadhatónak.)

Nagy Gábor   https://sign-el-soft.hu