红联Linux门户
Linux帮助

关于linux设备模型 device 的问题 求高人解答啊

发布时间:2012-06-17 02:19:42来源:红联作者:a285889663
#include
#include
#include
#include
#include


MODULE_LICENSE("GPL");

static void my_dev_release(struct device *dev)
{

}

struct device my_dev = {
.init_name= "my_dev",
.release = my_dev_release,
};


static ssize_t mydev_show(struct device *dev, char *buf)
{
int ret;
printk("<0> call the my_dev_show() !!!");
ret=sprintf(buf,"%s\n","this is my_dev");
printk("<0> the buf is : %s \n",buf);
return ret;

}


static DEVICE_ATTR(dev,S_IRUGO,mydev_show,NULL);

static int my_dev_init(void)
{
int ret;

ret=device_register(&my_dev); //设备注册
ret=device_create_file(&my_dev,&dev_attr_dev); //创建my_dev下的属性文件
return ret;
}

static void my_dev_exit(void)
{
device_unregister(&my_dev); //注销 设备
}

module_init(my_dev_init);
module_exit(my_dev_exit);



这是一段比较短的代码 是创建device的一个例子
我的linux系统是 3.1.0版本的 将内核模块安装后, 在/sys/devices/ 目录下生成my_dev 目录 在my_dev/目录下
生成了 dev文件。
用cat 打开这个dev文件 正确的现象是 读出this is my_dev 显示到终端上
但是我实际执行的时候 cat /sys/devices/my_dev/dev 后什么都没有显示, 过几秒钟后就死机了

printk("<0> call the my_dev_show() !!!");
printk("<0> the buf is : %s \n",buf);
这两句是我加的 在实际cat 后 屏幕上出现
call the my_dev_show() !!!
the buf is :this is my_dev

证明正确的调用到了show 函数, buf也确实被正确赋值 但是就是不能显示到终端上
甚至死机 求高手帮忙解答到底是什么原因啊
文章评论

共有 0 条评论