1. linux-2.6.12目录为Linux的源代码目录
2. driver目录下新建raulshao
3. driver目录下面的Makefile最后一行添加
obj-m += raulshao/
4. raulshao目录下新建hello.c, Makefile
// hello.c
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
#include <linux/delay.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/list.h>
#include <linux/interrupt.h>
#include <linux/spinlock.h>
#include <linux/timer.h>
#include <linux/device.h>
#include <linux/slab.h>
#include <linux/sched.h>
#include <asm/atomic.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("RAUL.SIU<[email protected]>");
MODULE_DESCRIPTION("Hello Driver.");
//////////////////////////////////////////////////////////////////////////
// 指定接口
static struct file_operations dev_ops =
{
owner: THIS_MODULE,
write: FUN_WRITE,
read: FUN_READ,
open: FUN_OPEN,
release:FUN_CLOSE,
};
int hello_init(void)
{
register_chrdev(MAJOR_VER, DEV_NAME, &dev_ops);
devfs_mk_cdev(MKDEV(MAJOR_VER, 0), S_IFCHR|S_IRUSR|S_IWUSR|S_IRGRP, DEV_NAME);
printk(KERN_ALERT"hello_init!/n");
return 0;
}
void hello_exit(void)
{
printk(KERN_ALERT"hello_exit!/n");
devfs_remove(DEV_NAME);
unregister_chrdev(MAJOR_VER, DEV_NAME);
}
module_init(hello_init);
module_exit(hello_exit);
// Makefile
obj-m += hello.o
5. 在源代码目录下执行make
6. 测试
insmode hello.ko // 安装驱动
lsmod // 检查驱动
rmmod hello // 卸载驱动