Linux Kernel Module Programming

8 отговора 622 прегледа
#1

Linux Kernel Module Programming

започнах от вероятно най-простия пример за модул. а той е:

#include <linux/module.h>
int init_module(void)
{
return 0;
}
void cleanup_module(void)
{
}

в различните книги(понеже подобен пример има на много места) се подават различни параметри към gcc. примерно:

gcc -c -O3 module.c
gcc -c module.c

изобщо как този модул да бъде компилиран??????????????????????????????????????????????????

Отговор
в отговор на bugicha #2

Re: Linux Kernel Module Programming

s -D__MODULE__ ili neshto takova. между 2.2 и 2.4 кернели има доста разлика, трябва ти и функция която да връща лиценза.

Отговор
в отговор на purist #3

Re: Linux Kernel Module Programming

gcc -O -DMODULE -D__KERNEL__ -o mydriver.obj -c mydriver.c
ld -r -o mydriver.o mydriver.obj

Znachi, ako "mydriver.c" ti e source-a na driver-a, "mydriver.obj" ti e obj, faila, a "mydriver.o" ti e gotowia modul.


Znachi kakto prawilno obeliazaha po-gore, triabwa da wmaknesh i licensa. Naj-dobre otwori niakoi modul ot kernela i tarsi nesto ot roda "MODULE_AUTHOR". Biaha tri reda za licenza, wzimash gi i trite, kompilirash i si gotow...

Отговор
в отговор на bugicha #4

Re: Linux Kernel Module Programming

днес криво-ляво компилацията стана:) обаче излезе , че за всяко ядро има особенности. ще взема да кажа какво мисля за Linux-a като цяло , ама ще стана втори guru:)

Отговор
в отговор на bugicha #5

Re: Linux Kernel Module Programming

Абе и аз бих казал какво мисля за индивиди, които не знаят какво прави -О3, но са седнали да пишат kernel modules, ама Lupi ще ме цензурира...

Отговор
в отговор на bugicha #6

Re: Linux Kernel Module Programming

А сега ако успееш и да обясниш ЗАЩО искаш да пишеш модули за Линукс... хоби нещо? Има и по-яки хобита - гледай си папагал примерно. Или пингвин във ваната - като рекламата на Discovery. Това е удобоно ако имаш хладилник LG с ледогенератор.

Ако искаш да ти е гадно в живота по принцип като гледаш грозотии от сорта на

gcc -O -DMODULE -D__KERNEL__ -o mydriver.obj -c mydriver.c
ld -r -o mydriver.o mydriver.obj

може също по друг начин - направи си вибратор със шипове - забий си го на стола и стой на него. Горе долу еквивалентно - дали ще си мъчиш гъза или мозъка все тая.

--
Increasing performance by lowering expectations.
Отговор
в отговор на lDispatch #7

Re: Linux Kernel Module Programming

Всичко е 6, само не разбрах защо ti е.obj ???

И наи добре момъка да хване да пропрочете LKMPG, преди да задава тъпи вапроси .... там има готов макефаил, дадени са няколко макроса за определяне на версията на ядрото и вкарването и в модула, така че да се знае за кое ядро е компилиран, както макросите за лиценза и още куп неща .... по принцип това за лиценза не е необходимо ... при зарейдане на модула ще ти изкарва един варнинг и толкоз ... MODULE_LICENSE("GPL"); ето това е макроса за лиценза ако тези за автор и име на дривер ги няма пак работи без уарнинг ... а аз по принцип компилирам с:

WARN := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
INCLUDE := -isystem /lib/modules/`uname -r`/build/include
CFLAGS := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE}

По този въпрос съществуват две мнения. Едното е неправилно, а другото е моето.
Отговор
в отговор на bugicha #8

Re: Linux Kernel Module Programming

А бре пич оти не прочетеш LKMDP, ако не знаеш какво е пояснявам: Linux Kernel Module Programming Guide.

отиваш на tldp.org и четеш .... без четене не стаа пробвал съм

По този въпрос съществуват две мнения. Едното е неправилно, а другото е моето.
Отговор
в отговор на avenger #9

Re: Linux Kernel Module Programming

.obj e za da se orientira che towa e imeto na object faila :), da ne wzeme da se obarka.
Az inache si gi prawia standartno .o, ama nali sam tragnal da poiasniawam, gledam da e maksimalno iasno.

Отговор