Linux Kernel Module Programming
8 отговора
622 прегледа
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
изобщо как този модул да бъде компилиран??????????????????????????????????????????????????
#include <linux/module.h>
int init_module(void)
{
return 0;
}
void cleanup_module(void)
{
}
в различните книги(понеже подобен пример има на много места) се подават различни параметри към gcc. примерно:
gcc -c -O3 module.c
gcc -c module.c
изобщо как този модул да бъде компилиран??????????????????????????????????????????????????
Re: Linux Kernel Module Programming
s -D__MODULE__ ili neshto takova. между 2.2 и 2.4 кернели има доста разлика, трябва ти и функция която да връща лиценза.
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...
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...
Re: Linux Kernel Module Programming
днес криво-ляво компилацията стана:) обаче излезе , че за всяко ядро има особенности. ще взема да кажа какво мисля за Linux-a като цяло , ама ще стана втори guru:)
Re: Linux Kernel Module Programming
Абе и аз бих казал какво мисля за индивиди, които не знаят какво прави -О3, но са седнали да пишат kernel modules, ама Lupi ще ме цензурира...
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.
Ако искаш да ти е гадно в живота по принцип като гледаш грозотии от сорта на
gcc -O -DMODULE -D__KERNEL__ -o mydriver.obj -c mydriver.c
ld -r -o mydriver.o mydriver.obj
може също по друг начин - направи си вибратор със шипове - забий си го на стола и стой на него. Горе долу еквивалентно - дали ще си мъчиш гъза или мозъка все тая.
--
Increasing performance by lowering expectations.
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}
По този въпрос съществуват две мнения. Едното е неправилно, а другото е моето.
И наи добре момъка да хване да пропрочете 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}
По този въпрос съществуват две мнения. Едното е неправилно, а другото е моето.
Re: Linux Kernel Module Programming
А бре пич оти не прочетеш LKMDP, ако не знаеш какво е пояснявам: Linux Kernel Module Programming Guide.
отиваш на tldp.org и четеш .... без четене не стаа пробвал съм
По този въпрос съществуват две мнения. Едното е неправилно, а другото е моето.
отиваш на tldp.org и четеш .... без четене не стаа пробвал съм
По този въпрос съществуват две мнения. Едното е неправилно, а другото е моето.
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.
Az inache si gi prawia standartno .o, ama nali sam tragnal da poiasniawam, gledam da e maksimalno iasno.