当前位置: 技术问答>linux和unix
编写驱动后 open 一直返回 -1
来源: 互联网 发布时间:2016-10-10
本文导语: 写了一个简单的字符设备驱动程序,类似于ldd3中的scull,在测试程序 fd = open("/dev/newdevname", O_RDONLY ), fd 一直返回-1。 在insmod后,在/proc/devices中可以看到newdevname和分配到major 250, 然后mknode /dev/newdevname c 250 0后,在/dev/...
写了一个简单的字符设备驱动程序,类似于ldd3中的scull,在测试程序 fd = open("/dev/newdevname", O_RDONLY ),
fd 一直返回-1。
在insmod后,在/proc/devices中可以看到newdevname和分配到major 250,
然后mknode /dev/newdevname c 250 0后,在/dev/也生成newdevname,以上都是OK,但是在写测试程序fd = open("/dev/newdevname", O_RDONLY ),fd 一直返回 -1,而且从printk来看open("/dev/newdevname", O_RDONLY )没有调用我编写open驱动函数。
猜测是调用system_call由于其他原因可能就返回-1,而没有调用我编写的open驱动函数,希望大虾帮我解决下!
|
1. 检查有没有/dev/SimpleCharDevice这个设备文件;如果没有,用mknod命令手工创建此设备文件;
2. ko文件是否insmod成功,lsmod看看;
3. 应用程序open失败,用perror打印出失败信息和errno错误码。
2. ko文件是否insmod成功,lsmod看看;
3. 应用程序open失败,用perror打印出失败信息和errno错误码。
|
首先确认驱动加载是否成功,其次确认在驱动中,你的这个设备是动态分配设备号的,还是静态分配的,看你mknod的设备号,跟你在驱动中分配的是否一致。不一致肯定会不成功。
|
试试下面的命令返回什么.
dd if=/dev/zero of=/dev/newdevname bs=1 count=1
dd if=/dev/newdevname of=/dev/null bs=1 count=1
dd if=/dev/zero of=/dev/newdevname bs=1 count=1
dd if=/dev/newdevname of=/dev/null bs=1 count=1
|
lz的代码风格看起来是也是vc程序员啊,连设备节点都是这样的/dev/SimpleCharDevice.