#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也确实被正确赋值 但是就是不能显示到终端上
甚至死机 求高手帮忙解答到底是什么原因啊