红联Linux门户
Linux帮助

新手 写hello驱动时 出现问题 求解

发布时间:2011-11-04 16:00:19来源:红联作者:mw4927
小弟 刚开始学linux简单驱动 驱动可以insmod 但是在执行一个应用程序去调用这个驱动时 没有反应 本意是当我执行这个应用程序时 open()函数时 打印
这个是驱动源码
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

static int hello_drv_open()
{
printk("hello beautiful world!! \n");
return 0;
}
static int hello_drv_write()
{
printk("crul world! \n");
return 0;

}
static struct file_operations hello_drv_fops()=
{
.owner = THIS_MODULE,
.open = hello_drv_open,
.write = hello_drv_write,
}
static int hello_drv_init(void)
{
register_chrdev(260,"hello",&hello_drv_fops);
return 0;
}
void hello_drv_exit()
{
unregister_chrdev(260,"hello");
}
module_init(hello_drv_init);
module_exit(hello_drv_exit);
下面是 测试程序
#include
#include
#include
#include
int main(int argc,char ** argv)
{
int fd;
int val=1;
fd=open("/dev/hello",O_RDWR);
if(fd<0)
printf("your directory can not open \n");
write(fd,&val,4);
return 0;
}
求解
文章评论

共有 5 条评论

  1. lcdstrongman 于 2011-12-01 22:41:50发表:

    看不到打印信息是因为设定的打印级别不够 不能在控制台输出。可以看下Linux驱动资料。另外也可以在insmod 加载后用dmesg -c来查看信息

  2. LeoK12 于 2011-11-12 20:29:43发表:

    你确定你的驱动加载成功了吗?
    Linux的最大主设备号为255.
    static int hello_drv_init(void)
    {
    register_chrdev(260,"hello",&hello_drv_fops);
    return 0;
    }

  3. heimanba 于 2011-11-08 17:53:24发表:

    printk("hello beautiful world!! \n");
    因为printk没有在终端打印。它跟printf不一样。。想了解清楚去看下printk的介绍。。

  4. mw4927 于 2011-11-04 21:19:20发表:

    怎么木有人 啊 大侠们 来个啊 我刚才 输入了 dmesg时 就可以显示打印信息了 这是为什么啊

  5. mw4927 于 2011-11-04 16:25:17发表:

    现在 发现加载驱动 虽然在/proc/devices 里有hello这个驱动模块了 但貌似不执行 我在入口函数里static int hello_drv_init(void)
    {
    register_chrdev(260,"hello",&hello_drv_fops);
    printk(“hello world \n”);//新添加的
    return 0;
    }
    加载模块时 也不打印信息 怎么回事啊