一个内核模块的例子:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int hello_init(void)
{
printk(KERN_ALERT"hello,world!/n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT"Goodbye,cruel world!/n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile文件
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KERNELDIR ?= /usr/src/kernels/$(shell uname -r)
PWD := $(shell pwd)
INSTALLDIR = /opt/rootfs/lib/modules
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
cp hello.ko $(INSTALLDIR)
clean:
rm -rf *.o *~core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY:modules modules_install clean
endif
在shell下
[root@localhost hello_driver]#标签:opt,10,fedora,modules,driver,Linux,root,hello,localhost From: https://blog.51cto.com/u_15911341/5934949
make
make -C /usr/src/kernels/2.6.27.5-117.fc10.i686 M=/opt/hello_driver modules
make[1]: Entering directory `/usr/src/kernels/2.6.27.5-117.fc10.i686'
CC [M] /opt/hello_driver/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /opt/hello_driver/hello.mod.o
LD [M] /opt/hello_driver/hello.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.27.5-117.fc10.i686'
[root@localhost hello_driver]#
ls
hello.c hello.mod.c hello.o Makefile~ modules.order
hello.ko hello.mod.o Makefile Module.markers Module.symvers
[root@localhost hello_driver]#
insmod hello.ko
[root@localhost hello_driver]#
lsmod | grep hello
hello 5248 0
[root@localhost hello_driver]#
rmmod hello
[root@localhost hello_driver]#
tail -n 2 /var/log/messages
Jun 23 19:33:39 localhost kernel: hello,world!
Jun 23 19:33:55 localhost kernel: Goodbye,cruel world!
[root@localhost hello_driver]#
dmesg | tail