Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: prezek 07. 01. 2013, 11:48:28

Název: Kde zjistit funkce a proměnné jádra?
Přispěvatel: prezek 07. 01. 2013, 11:48:28
Zdravím, snažím se vytvořit kernel modul a při jeho načítání skončím na tomto:
Kód: [Vybrat]
my_module: Unknown symbol irq_desc
Ve zdrojovém kódu modulu se to způsobují tyto řádky:
Kód: [Vybrat]

extern struct irq_desc irq_desc[NR_IRQS];

static inline struct irq_desc *irq_to_desc(unsigned int irq)
{
return (irq < nr_irqs) ? irq_desc + irq : NULL;
}
...
struct irq_desc *desc;
desc = irq_to_desc(IRQ_TC0);
Odhadoval bych, že to bude tím, že nemám přesně stejné zdrojové kódy jádra, jako ty, ze kterých je jádro zkompilováno. Dá se nějak zjistit z běžícího linuxu, jaké funkce, konstanty, proměnné atd. jsou dostupné pro kernel moduly?
Název: Re:Kde zjistit funkce a proměnné jádra?
Přispěvatel: Jan Ťulák 07. 01. 2013, 13:01:20
Jestli se to dá získat runtime fakt netuším, ale - jak jsi získal ty kernelové hlavičky, co máš? Většina distribucí by měla mít balíček jako "linux-headers", který obsahuje právě hlavičkové soubory pro buildování modulů a ten musí* souhlasit s tím, co máš v systému puštěné.

* pokud není v distru rozbitý updatovač a/nebo si neděláš jen selektivní update.
Název: Re:Kde zjistit funkce a proměnné jádra?
Přispěvatel: prezek 07. 01. 2013, 13:45:53
Jedná se o embedded linux a pokud vím, tak nemá žádné repozitáře, ze kterých by se "linux-headers" dalo získat. Hlavičky jsem získal ze stránek výrobce CPU, ale nejsou shodné s tím, co je v zařízení nahráno. Na některé věci to stačí, ale bohužel ne na vše.
Název: Re:Kde zjistit funkce a proměnné jádra?
Přispěvatel: RDa 07. 01. 2013, 17:27:08
Aktualni funkce (tj. symboly) jsou uvedeny v System.map souboru, ale pokud je to embedded, je mozna tento soubor smazan.

Takze pak nastupuje:   objdump -t vmlinux   (pokud nemas vmlinux, musis ho z kernelu vypreparovat - odstranit loader/sfx kod a rozbalit vlastni jadro rucne). Bud na to pojedes pres bruteforce (odstranis 1 byte ze zacatku a zkusis to rozbalit, kdyz nepujde tak dalsi byte...), nebo si najdes typ komprese a prislusnou hlavicku (treba bzipu) a takto oddelis komprimovane jadro.

Název: Re:Kde zjistit funkce a proměnné jádra?
Přispěvatel: prezek 09. 01. 2013, 08:54:37
Díky za odpověď. System.map ani vmlinux nemám k dispozici. Zkoušel jsem zkombinovat soubor firmwaru (linux.rom) se souborem vmlinux z jiné kompilace jádra (stejná verze jádry, stejný procesor, ale jiná konfigurace a možná jiný patch). Linux.rom vypadá, že je ořezaný vmlinux. Z výsledku se ale nedalo nic použitelného vyčíst.

Název: Re:Kde zjistit funkce a proměnné jádra?
Přispěvatel: RDa 09. 01. 2013, 09:12:52
Z toho linux.rom je treba vyextrahovat vmlinuz a pak rozbalit na vmlinux :)