Portál AbcLinuxu, 28. dubna 2024 05:48


Dotaz: Kompilace linux kernel modulu

26.10.2011 15:04 Martin Vetchy
Kompilace linux kernel modulu
Přečteno: 503×
Odpovědět | Admin
Zdravim, chtel bych se naucit programova linux kernel moduly.Nasel jsem spoustu tutorialu jak na to, napr:

http://www.freesoftwaremagazine.com/articles/drivers_linux?page=0%2C2

Ten uvodni hello world priklad je skoro vsude stejny, ale problem je, ze mi nejde zkompilovat. Tusim, ze to bude tim, ze vsechny tyto clanky jsou uz starsiho data a priklady jsou tedy urceny pro starsi kernely. Rad bych modul zkomplioval u sebe na 2.6.39.4, ale nikde jsem nenasel tutorial urceny pro novejsi jadra, muzete mi prosim poradit?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.10.2011 19:29 NN
Rozbalit Rozbalit vše Re: Kompilace linux kernel modulu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co znamena nejde zkompilovat ?

NN
Pavel Stárek avatar 26.10.2011 20:27 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: Kompilace linux kernel modulu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Přílohy:
Stáhni si tyto dva soubory do nějakého adresáře, a zkus zkompilovat modul pomocí make spuštěného v tom samém adresáři. V případě chyby pošli výstup.
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
27.10.2011 10:11 Martin Vetchy
Rozbalit Rozbalit vše Re: Kompilace linux kernel modulu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dekuji bylo to tedy tim makefilem, ktery jsem mel spatne. Jednoduchy hello world modul funguje, ja bych rad ale zkompiloval napriklad toto:

http://commons.oreilly.com/wiki/index.php/Network%5FSecurity%5FTools/Modifying%5Fand%5FHacking%5FSecurity%5FTools/Fun%5Fwith%5FLinux%5FKernel%5FModules#intercept_unlink.c

Jde mi o to, zachytit nejakou systemovou funkci. Vyse uvedeny priklad (adresu sys_call_table jsem upravil dle sveho systemu) mi pri kompilaci hlasi:
# make
make -C /lib/modules/2.6.39.4/build M=/root/LKM modules
make[1]: Entering directory `/usr/src/linux-source-2.6.39.4'

  WARNING: Symbol version dump /usr/src/linux-source-2.6.39.4/Module.symvers
           is missing; modules will have no dependencies and modversions.

  CC [M]  /root/LKM/smodule.o
/root/LKM/smodule.c:20: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘_init’
/root/LKM/smodule.c:36: error: expected declaration specifiers or ‘...’ before ‘{’ token
/root/LKM/smodule.c:36: warning: function declaration isn’t a prototype
/root/LKM/smodule.c:36: error: ‘my_exit’ declared as function returning a function
/root/LKM/smodule.c:38: error: expected identifier or ‘(’ before ‘}’ token
/root/LKM/smodule.c: In function ‘__inittest’:
/root/LKM/smodule.c:40: error: ‘my_init’ undeclared (first use in this function)
/root/LKM/smodule.c:40: error: (Each undeclared identifier is reported only once
/root/LKM/smodule.c:40: error: for each function it appears in.)
/root/LKM/smodule.c: In function ‘__exittest’:
/root/LKM/smodule.c:41: warning: return from incompatible pointer type
make[2]: *** [/root/LKM/smodule.o] Error 1
make[1]: *** [_module_/root/LKM] Error 2
make[1]: Leaving directory `/usr/src/linux-source-2.6.39.4'
make: *** [all] Error 2
28.10.2011 14:38 Martin Vetchy
Rozbalit Rozbalit vše Re: Kompilace linux kernel modulu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co jsem googlil, tak jsem zjistil, ze od nejake verze kernelu (2.6.18?) je sys_call_table uz jen readonly. Sice jsem nasel nejake workaroundy, ale zadny mi nesel prelozit. Muze me prosim nekdo odkazat na nejaky priklad hookovani sys callu funkcni i v novejsim kernelu? Pripadne aspon vyzkouset ten priklad na ktery jsem tu odkazoval, zda vam to jde prelozit? Budu vdecny za jakekoliv postrehy.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.