加载驱动后/dev目录下的设备文件为什么打不开

qingu 2010-09-13 05:22:35
# insmod second.ko
# cat /proc/devices
Character devices:
1 mem
4 /dev/vc/0
4 tty
4 ttyS
5 /dev/tty
5 /dev/console
5 /dev/ptmx
6 lp
7 vcs
10 misc
13 input
14 sound
21 sg
29 fb
116 alsa
128 ptm
136 pts
162 raw
180 usb
189 usb_device
216 rfcomm
251 second
...
# mknod /dev/second c 251 0
# ./second_test
Device open failure
试着打开/dev目录下的普通文件是没问题的,但打开设备文件就是打不开,
我记得上次还是没问题的,为什么现在打不开设备文件呢?



...全文
1825 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
hubeijiaozi 2012-04-04
  • 打赏
  • 举报
回复
看你的设备里面存不存在这被驱动的固件哦,另外可能存在权限问题,如果设备文件不让读写也肯定是打不开的!
jxj141 2010-09-20
  • 打赏
  • 举报
回复
是否是权限问题?
yel617 2010-09-20
  • 打赏
  • 举报
回复
碰到同样的问题
期待答案
T-Quake 2010-09-20
  • 打赏
  • 举报
回复
一般现在的/dev/下节点都是由udev去自动创建,他在/sys/class下也有对应的设备节点 你可以去那看看能否open
T-Quake 2010-09-20
  • 打赏
  • 举报
回复
刚进入open的时候 printk下 下面动态定时器 加个printk下 最后快结束的时候 再加个prinrk
然后在上层试图open 如果不行的话,你demesg下看看 哪句话有打印,哪句没打印.如果一句没有说明出在你的设备节点创建的问题上.
T-Quake 2010-09-20
  • 打赏
  • 举报
回复
你有在open函数中加打印吗?看到哪步会出错,个人感觉 象是在init创建设备节点时候的问题
帅得不敢出门 2010-09-19
  • 打赏
  • 举报
回复
看下/dev/second在不在
驱动的open接口有没有问题?
qingu 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jianmin09 的回复:]

是不是根文件系统中权限的问题, 根文件系统设计过于简单?
[/Quote]
应该不是这个问题吧,根文件系统用的是安装系统时的那个文件系统啊
jianmin09 2010-09-19
  • 打赏
  • 举报
回复
是不是根文件系统中权限的问题, 根文件系统设计过于简单?
daishaoqiang 2010-09-19
  • 打赏
  • 举报
回复
好复杂啊
qingu 2010-09-19
  • 打赏
  • 举报
回复

/*======================================================================
A "seond" device driver as an example of kernel timer

The initial developer of the original code is Baohua Song
<author@linuxdriver.cn>. All Rights Reserved.
======================================================================*/
#include <linux/module.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/cdev.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/uaccess.h>
#include <linux/timer.h> /*包括timer.h头文件*/
#include <asm/atomic.h>

#define SECOND_MAJOR 252 /*预设的second的主设备号*/

static int second_major = SECOND_MAJOR;

/*second设备结构体*/
struct second_dev
{
struct cdev cdev; /*cdev结构体*/
atomic_t counter;/* 一共经历了多少秒?*/
struct timer_list s_timer; /*设备要使用的定时器*/
};

struct second_dev *second_devp; /*设备结构体指针*/

/*定时器处理函数*/
static void second_timer_handle(unsigned long arg)
{
mod_timer(&second_devp->s_timer,jiffies + HZ);
atomic_inc(&second_devp->counter);

printk(KERN_NOTICE "current jiffies is %ld\n", jiffies);
}

/*文件打开函数*/
int second_open(struct inode *inode, struct file *filp)
{
/*初始化定时器*/
init_timer(&second_devp->s_timer);
second_devp->s_timer.function = &second_timer_handle;
second_devp->s_timer.expires = jiffies + HZ;

add_timer(&second_devp->s_timer); /*添加(注册)定时器*/

atomic_set(&second_devp->counter,0); //计数清0

return 0;
}
...
qingu 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 helldevil 的回复:]

在驱动层有无实现该文件节点的open file_operation 函数按照经验来看 现在的/dev/都是通过udev自动创建的,你上层虽然open了函数,但是底层驱动如果没有对应的open动作的支持依然是打不开
[/Quote]
我的驱动里有open函数,况且驱动如果没有open、close不是会使用系统默认的接口吗
T-Quake 2010-09-19
  • 打赏
  • 举报
回复
在驱动层有无实现该文件节点的open file_operation 函数按照经验来看 现在的/dev/都是通过udev自动创建的,你上层虽然open了函数,但是底层驱动如果没有对应的open动作的支持依然是打不开
qingu 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zmlovelx 的回复:]

看下/dev/second在不在
驱动的open接口有没有问题?
[/Quote]
# mknod /dev/second c 251 0 创建了,查看了/dev下的文件也是存在的。
qingu 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zmlovelx 的回复:]

看下/dev/second在不在
驱动的open接口有没有问题?
[/Quote]
没有,我用open打开/dev目录下的普通文件是没问题的。
qingu 2010-09-18
  • 打赏
  • 举报
回复
网上找了一些资料说:发生这个问题一般是因为系统找不到与设备号254相匹配的驱动程序.
系统找驱动的方法是在/lib/modules/2.xx.xx、modules.dep目录下的驱动数据表中查找的,你试试把你的驱动程序添加进去,不要手工insmod

试着添加进去、还是一样的错误。

??
lkncjy 2010-09-15
  • 打赏
  • 举报
回复
看应用程序里的主设备号是不是写错了
qingu 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lkncjy 的回复:]

看应用程序里的主设备号是不是写错了
[/Quote]
应用程序里设备号不是跟设备文件关联在一起么,打开设备文件就是打开设备号了啊
qingu 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 deep_pro 的回复:]

顺带在应用程序里把open的错误原因也打出来
用perror
[/Quote]
Device open failure
/dev/second: No such device or address
前不久明明还可以运行的...
那代码应该是没问题的。
李迟 2010-09-13
  • 打赏
  • 举报
回复
对头,单凭Device open failure很难判断是哪里出现问题。
加载更多回复(1)

4,469

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧