Kde zjistit funkce a proměnné jádra?

prezek

  • ***
  • 229
    • Zobrazit profil
Kde zjistit funkce a proměnné jádra?
« kdy: 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?


Zopper

  • *****
  • 657
    • Zobrazit profil
Re:Kde zjistit funkce a proměnné jádra?
« Odpověď #1 kdy: 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.

prezek

  • ***
  • 229
    • Zobrazit profil
Re:Kde zjistit funkce a proměnné jádra?
« Odpověď #2 kdy: 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.

RDa

  • *****
  • 2 467
    • Zobrazit profil
    • E-mail
Re:Kde zjistit funkce a proměnné jádra?
« Odpověď #3 kdy: 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.


prezek

  • ***
  • 229
    • Zobrazit profil
Re:Kde zjistit funkce a proměnné jádra?
« Odpověď #4 kdy: 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.



RDa

  • *****
  • 2 467
    • Zobrazit profil
    • E-mail
Re:Kde zjistit funkce a proměnné jádra?
« Odpověď #5 kdy: 09. 01. 2013, 09:12:52 »
Z toho linux.rom je treba vyextrahovat vmlinuz a pak rozbalit na vmlinux :)