## CentOS下搭建编译驱动的环境
S1、yum install kernel 和 yum install kernel-devel
S2、修改软连接
/lib/modules/$(uname -a)/build 指向的软连接
查看默认的ll build指向的软连接,如果不正确,编译会报错,如下:
make: *** /lib/modules/2.6.32-431.29.2.el6.x86_64/build: No such file or directory. Stop.
S3、执行S1步骤之后,在/usr/src/kernels目录之下将生成对应的安装包,然后让S2中build目录指向该目录,如下
ln -s /usr/src/kernels/2.6.32-573.8.1.el6.centos.plus.x86_64 /lib/modules/2.6.32-431.29.2.el6.x86_64/build
## hello_driver.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static int __init hello_init(void)
{
printk(KERN_ALERT "hello driver init!\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_ALERT "hello driver exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
## Makefile
ifneq ($(KERNELRELEASE),)
obj-m :=hello_driver.o
else
KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
rm -rf *.o *~ .depend .* .
## printk的权限定义(1-7输出信息到 /var/log/message,0输出信息到终端)
linux/kernel.h
#define KERN_EMERG "<0>"
#define KERN_ALERT "<1>"
#define KERN_CRIT "<2>"
#define KERN_ERR "<3>"
#define KERN_WARNING "<4>"
#define KERN_NOTICE "<5>"
#define KERN_INFO "<6>"
#define KERN_DEBUG "<7>"
## 驱动ko使用
insmod hello_driver.ko
rmmod hello_driver.ko
lsmod | grep hello_driver //检查
## 驱动测试