您的位置:首页 > 运维架构 > Linux

我的第一个简单的linux打印输出驱动(文件自动注册有问题)

2012-07-01 20:39 453 查看
平台:linux 2.6.28.7

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/fs.h>

#include <linux/init.h>

#include <linux/device.h>

#include <linux/miscdevice.h>

#include <linux/delay.h>

#include <asm/irq.h>

/*

#include <asm/arch/regs-gpio.h>

#include <asm/hardware.h>

#include <linux/config.h>

#include <linux/devfs_fs_kernel.h>

*/

static struct class *firstdrv_class;

static struct class_device *firstdrv_class_dev;

int major;

static int first_driver_open(struct inode *inode,struct file *file)//打开文件

{

printk("This is my first driver test!!!\n");

return 0;

}

static ssize_t first_driver_write(struct file *file,const __user *buf,size_t count,loff_t *ppos)//打印输出

{

printk("My first driver is writing....\n");

return 0;

}

//入口结构体

static struct file_operations first_driver_fops = {

.owner
= THIS_MODULE,

.open =first_driver_open,

.write
= first_driver_write,

};

//注册入内核

int first_driver_init(void)

{

register_chrdev(0,"first_drv",&first_driver_fops);

firstdrv_class = class_create(THIS_MODULE, "first_drv");

if(IS_ERR(firstdrv_class))

printk("firstdrv_class creates error! \n");

firstdrv_class_dev = device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz"); /* /dev/xyz */

if(unlikely(IS_ERR(firstdrv_class)))

printk("/dev/xyz creates error! \n");

return 0;

}

void first_driver_exit(void)

{

unregister_chrdev(0,"first_drv");

device_unregister(firstdrv_class_dev);

class_destroy(firstdrv_class);

}

module_init(first_driver_init);

module_exit(first_driver_exit);

MODULE_LICENSE("GPL"); // 遵循的协议

注意:在firstdrv_class_dev = device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz"); 出不起作用,注册驱动后不能自动生成文件,还得手动加入。

查资料修改/etc/init.d/rcS(要在超级终端下VI修改,否则启动打不开此文件了)。其中添加echo /sbin/mdev > /proc/sys/kernel/hotplug还是不行,求大家帮忙解决??
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐