fedora模块创建实例教程



fedora模块创建实例教程。

步骤:
(1)make
(2)insmod hello.ko 创建模块,hello与makefile中**.o对应
(3)lsmod 查看已有模块
(4)rmmod hello 删除模块
(5)make clean 清楚文件

1,一个文件
hello.c
#include <linux/init.h>
#include <linux/module.h>
static int hello_init(void)
{
printk(KERN_WARNING”Hello,world !\n”);
return 0;
}
static void hello_exit(void)
{
printk(KERN_INFO “Goodbye,world\n”);
}
modules_init(hello_init);
modules_exit(hello_exit);
Makefile文件
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KDIR := /lib/modules/3.4.10/build
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
2,多个文件
main.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE(“GPL”);
MODULE_AUTHOR(“XC”);
MODULE_DESCRIPTION(“Hello World Module”);
MODULE_ALIAS(“a simplest modules”);
extern int add(int a, int b);
static int __init hello_init()
{
printk(“Hello World!!! \n”);
add(1,2);
return 0;
}
static void __exit hello_exit()
{
printk(“<7>hello <0>exit\n”);
}
module_init(hello_init);
module_exit(hello_exit);
add.c
int add(int a, int b)
{
return a+b;
}
Makefile文件
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
hello-objs := main.o add.o
else
KDIR := /lib/modules/3.4.10/build
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
3,可以输入数据
param.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE(“GPL”);
static char *name = “xcxc”;
static int age = 30;
module_param(name, charp, S_IRUGO);
module_param(age, int, S_IRUGO);
static int hello_init(void)
{
//print(“hello print\n”);
//printf(“hello printf\n”);
printk(“hello printk\n”);
printk(KERN_EMERG” Name\n”);
printk(KERN_EMERG” Name:%s\n”,name);
printk(KERN_EMERG” Age:%d\n”,age);
printk(KERN_WARNING” Age:%d\n”,age);
printk(KERN_DEBUG” Age:%d\n”,age);
return 0;
}
static void hello_exit(void)
{
printk(KERN_INFO”Module Exit \n”);
}
module_init(hello_init);
module_exit(hello_exit);
Makefile
ifneq ($(KERNELRELEASE),)
obj-m := param.o
else
KDIR := /lib/modules/3.4.10/build
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif

********************************注意***********************************
Makefile文件中内核源码路径问题2种办法
1,编译安装系统时的相同内核版本
2,用自己编译的内核