1.å¦ä½è°ç¨loginmodule
å¦ä½è°ç¨loginmodule
å¨ç¼ålinuxå æ ¸æ¨¡åçæ¶åï¼ææ¶åæ们éè¦è°ç¨ä¸åªå æ ¸æ¨¡åéé¢çå½æ°ï¼ç¶èå¦ææ¯å¨ä¸åç®å½ä¸é¢ç¼è¯çæçå æ ¸æ¨¡åï¼æ¤æ¶A模åå»è°ç¨B模åçå½æ°æ¶åä¼åºç°å½æ°æªå®ä¹ï¼æ æ³è°ç¨çæ åµãé£ä¹ä»¥åææ¯å¨åä¸ä¸ªç®å½ä¸é¢ï¼å åå两个makefileï¼ç¶åç¼è¯çæ两个ä¸åçå æ ¸æ¨¡åï¼è¿ç§æ¹å¼å¯ä»¥æ£å¸¸å®ç°A模åè°ç¨B模åéé¢çå½æ°ï¼ä¸è¿é常麻ç¦ãæ¬åæå°ä¼é对è¿ç§æ åµæåºä¸ç§å¯ä»¥åæ¶çæå¤ä¸ªå æ ¸æ¨¡åï¼ä¸è¦å次ç¼è¯çæ¹é¢ï¼ä¸é¢è´´åºæºç ï¼
å æ ¸æ¨¡åcal.ko:
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
int add(int a,源码原子综合例程源码 int b) {
return a+b;
}
int sub(int a, int b) {
return a-b;
}
static int sym_init() {
return 0;
}
static int sym_exit() {
return 0;
}
module_init(sym_init);
module_exit(sym_exit);
EXPORT_SYMBOL(add);
EXPORT_SYMBOL(sub);
å æ ¸æ¨¡åhello.ko
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("David Xie");
MODULE_DESCRIPTION("Hello World Module");
MODULE_ALIAS("a simplest module");
static int age = ;
module_param(age, int, S_IRUGO);//allow all user to use this param
int add(int a, int b);
int sub(int a, int b);
static int hello_init(void)
{
printk("<0>"" Hello World! age = %d\n", add(, ));//è°ç¨å æ ¸æ¨¡åcal.koéé¢çaddå½æ°
return 0;
}
static void hello_exit(void)
{
printk("<0>""hello exit %d\n", sub(,));//è°ç¨å æ ¸æ¨¡åcal.koéé¢çsubå½æ°
}
module_init(hello_init);
module_exit(hello_exit);
å¯ä»¥çæå¤ä¸ªå æ ¸æ¨¡åçmakefile
ifneq ($(KERNELRELEASE),)
obj-m := cal.o hello.o
cal-objs := operator.o
hello-objs := main.o
else
KDIR := /lib/modules/2.6.--generic/build
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order
endif
æ¤æ¶å¨å½åç®å½æ§è¡makeå°±ä¼äº§çcal.koåhello.ko两个å æ ¸æ¨¡å