//gpio驱动模板//
static int major = 0;
static void gpio_setup_cdev(struct cdev *dev, int minor, struct file_operations *fops)
{
int err, devno = MKDEV(major, minor);
cdev_init(dev, fops);
dev->owner = THIS_MODULE;
dev->ops = fops;
err = cdev_add(dev, devno, 1);
if( err )
{
printk(KERN_NOTICE "Error %d adding gpio %d\n", err, minor);
}
}
static struct file_operations gpio_fops =
{
.owner = THIS_MODULE,
.open = gpio_open, /*进行初始化设置*/
.release = gpio_release, /*释放设备*/
.read = gpio_read,
.write = gpio_write,
.ioctl = gpio_ioctl, /*实现主要控制功能*/
};
static struct cdev gpio_devs;
static int gpio_init(void)
{
int result;
dev_t dev = MKDEV(major, 0);
if( major )
{/*设备号注册*/
result = register_chrdev_region(dev, 1, GPIO_DEVICE_NAME);
}else
{/*设备号动态分配*/
result = alloc_chrdev_region(&dev, 0, 1, GPIO_DEVICE_NAME);
major = MAJOR(dev);
}
gpio_setup_cdev(&gpio_devs, 0, &gpio_fops);
printk("The major of the gpio device is %d\n", major);
return 0;
}
static void gpio_cleanup(void)
{
cdev_del(&gpio_devs);/*字符设备的注销*/
unregister_chrdev_region(MKDEV(major, 0), 1);/*设备号的注销*/
printk("gpio device uninstalled\n");
}
module_init(gpio_init);
module_exit(gpio_cleanup);
MODULE_AUTHOR("transistor<transistor@yeah.net>");
MODULE_LICENSE("GPL");
///end gpio驱动模板//
insmod *.ko #加载驱动
rmmod *.ko #卸载驱动
阅读(1685) | 评论(3) | 转发(0) |
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
static int major = 0;
static void gpio_setup_cdev(struct cdev *dev, int minor, struct file_operations *fops)
{
int err, devno = MKDEV(major, minor);
cdev_init(dev, fops);
dev->owner = THIS_MODULE;
dev->ops = fops;
err = cdev_add(dev, devno, 1);
if( err )
{
printk(KERN_NOTICE "Error %d adding gpio %d\n", err, minor);
}
}
static struct file_operations gpio_fops =
{
.owner = THIS_MODULE,
.open = gpio_open, /*进行初始化设置*/
.release = gpio_release, /*释放设备*/
.read = gpio_read,
.write = gpio_write,
.ioctl = gpio_ioctl, /*实现主要控制功能*/
};
static struct cdev gpio_devs;
static int gpio_init(void)
{
int result;
dev_t dev = MKDEV(major, 0);
if( major )
{/*设备号注册*/
result = register_chrdev_region(dev, 1, GPIO_DEVICE_NAME);
}else
{/*设备号动态分配*/
result = alloc_chrdev_region(&dev, 0, 1, GPIO_DEVICE_NAME);
major = MAJOR(dev);
}
gpio_setup_cdev(&gpio_devs, 0, &gpio_fops);
printk("The major of the gpio device is %d\n", major);
return 0;
}
static void gpio_cleanup(void)
{
cdev_del(&gpio_devs);/*字符设备的注销*/
unregister_chrdev_region(MKDEV(major, 0), 1);/*设备号的注销*/
printk("gpio device uninstalled\n");
}
module_init(gpio_init);
module_exit(gpio_cleanup);
MODULE_AUTHOR("transistor<transistor@yeah.net>");
MODULE_LICENSE("GPL");
///end gpio驱动模板//
insmod *.ko #加载驱动
rmmod *.ko #卸载驱动
相关热门文章
给主人留下些什么吧!~~
transistor02011-02-14 23:03:32
diytvgy: 恕我新手,看不出新在哪,请博主解释一下.....
diytvgy如果还记得函数register_chrdev和unregister_chrdev的话。
评论热议