天嵌 ARM开发社区

 找回密码
 注册
查看: 7005|回复: 20

驱动初始化成功,但是打开设备失败是什么原因

[复制链接]
DonyChen 发表于 2012-3-29 23:53:36 | 显示全部楼层 |阅读模式
做LED驱动的实验时,把应用程序和驱动都下载到板子上,重启
TQ2440/SKY2440 EmbedSky_leds initialized  ------- 说明LED驱动已经初始化成功
但是到了后面,却出现 open device leds: No such file or directory, LED也不能流水动作了
命令行输入ls \dev 也显示有EmbedSky_leds

本来已经实现了流水灯的,后来想通过改变LED的流动方向,就修改了驱动程序里面的led_table和led_cfg_table结果就出现了这样的问题,再修改回原来的样子,结果还是出错,
这是什么问题呢,请高手指点
鱼籽 发表于 2012-3-30 00:29:59 | 显示全部楼层
具体的就不知道了,但猜想可能是  你测试程序那里open的设备名称没有与你建立的设备节点名称一致?
 楼主| DonyChen 发表于 2012-3-30 10:12:57 | 显示全部楼层
鱼籽 发表于 2012-3-30 00:29
具体的就不知道了,但猜想可能是  你测试程序那里open的设备名称没有与你建立的设备节点名称一致?

应该是,好象运行的leds不是预想中的那个,然后open的LED驱动就不是预计的那个,结果就错了

具体原因还没找到,不过应该离真相不远了
 楼主| DonyChen 发表于 2012-3-30 21:59:04 | 显示全部楼层
Unable to handle kernel paging request at virtual address 5b0a9004
pgd = c3aa0000
[5b0a9004] *pgd=00000000
Internal error: Oops: 5 [#1]
Modules linked in: ov9650 input_polldev
CPU: 0    Not tainted  (2.6.30.4-EmbedSky #17)
PC is at s3c2410_gpio_setpin+0x24/0x44
LR is at EmbedSky_leds_ioctl+0x3c/0x68
pc : [<c002da7c>]    lr : [<c01519d0>]    psr: 60000093
sp : c3a73ebc  ip : 5b0a9000  fp : c3a73ecc
r10: 00000000  r9 : c3a72000  r8 : c0024008
r7 : 00000004  r6 : 00000000  r5 : 00000004  r4 : 60000013
r3 : 60000093  r2 : 00000000  r1 : 00000001  r0 : c0152010
Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: c000717f  Table: 33aa0000  DAC: 00000015
Process led-player (pid: 464, stack limit = 0xc3a72268)
Stack: (0xc3a73ebc to 0xc3a74000)
3ea0:                                                                00000000
3ec0: c3a73ee4 c3a73ed0 c01519d0 c002da68 c382e900 00000004 c3a73f04 c3a73ee8
3ee0: c0090f3c c01519a4 00000003 c382e900 00000003 00000004 c3a73f7c c3a73f08
3f00: c0091210 c0090ed4 00000008 00099e9e 00000d7e c03b9108 c3a73f44 c3a73f28
3f20: c004e83c c3a72000 bea9bd08 00000000 00000000 bea9bd08 00000008 00000000
3f40: 00000000 c0093198 c3a73f70 00000000 ffffffff 00000003 00000004 00000000
3f60: c382e900 c0024008 c3a72000 00000000 c3a73fa4 c3a73f80 c00914f0 c0090f7c
3f80: ffffffff 00000000 00000000 00000000 412e8480 00000036 00000000 c3a73fa8
3fa0: c0023e60 c00914c0 00000000 00000000 00000003 00000000 00000004 00000000
3fc0: 00000000 00000000 412e8480 00000036 00000000 00000000 40025000 bea9bc6c
3fe0: 00000000 bea9bc58 000087bc 400f76ec 80000010 00000003 6d726966 65726177
Backtrace:
[<c002da58>] (s3c2410_gpio_setpin+0x0/0x44) from [<c01519d0>] (EmbedSky_leds_ioctl+0x3c/0x68)
r4:00000000
[<c0151994>] (EmbedSky_leds_ioctl+0x0/0x68) from [<c0090f3c>] (vfs_ioctl+0x78/0x80)
r5:00000004 r4:c382e900
[<c0090ec4>] (vfs_ioctl+0x0/0x80) from [<c0091210>] (do_vfs_ioctl+0x2a4/0x544)
r7:00000004 r6:00000003 r5:c382e900 r4:00000003
[<c0090f6c>] (do_vfs_ioctl+0x0/0x544) from [<c00914f0>] (sys_ioctl+0x40/0x68)
[<c00914b0>] (sys_ioctl+0x0/0x68) from [<c0023e60>] (ret_fast_syscall+0x0/0x2c)
r7:00000036 r6:412e8480 r5:00000000 r4:00000000
Code: e121f003 e3c0c01f e1a0c0ac e28cc4fb (e59c3004)
---[ end trace 6420de1ec0397260 ]---

把led-player.c里面led_fd = open("/dev/GPIO_Control", 0);改成了led_fd = open("/dev/EmbedSky_leds", 0);
就出来上面的信息了,LED全灭了
是什么原因呢?
 楼主| DonyChen 发表于 2012-3-30 22:19:44 | 显示全部楼层
运行\sbin\leds 是可以正常控制LED的亮灭的,说明驱动没有问题

应该还是在led_player上面
 楼主| DonyChen 发表于 2012-3-30 22:25:13 | 显示全部楼层
弱弱地问一句:其实leds和led_player其实是两个分别独立没有什么关联的应用程序,一般情况下看到的LED流水灯只需要调用led_player就可以实现了,是这样吗?
 楼主| DonyChen 发表于 2012-4-2 00:04:01 | 显示全部楼层
led-player.c里面static void push_leds(void)实际对IO口控制的部分超处理驱动处理的范围
        for (i = 0; i < 8; i++) {/*ioctl的函数原型里面只能控制4个LED,驱动虽然对>4作了异常处理
                但是==4的输入还是会出错,这里改成<4就OK了*/
                ioctl(led_fd, led_bitmap & 1, i); /*实际控制LED亮灭*/
                led_bitmap >>= 1;
        }
但是为什么使用EmbedSky_gpio.c编译的驱动没有这个问题呢?ioctl函数是一样的,IO口定义的table也是一样的,不同的在于EmbedSky_gpio.c定义了一个miscdevice非常规字符设备,是这个原因吗?
高手出来指点一下。谢谢
 楼主| DonyChen 发表于 2012-4-2 00:04:50 | 显示全部楼层
DonyChen 发表于 2012-3-30 22:25
弱弱地问一句:其实leds和led_player其实是两个分别独立没有什么关联的应用程序,一般情况下看到的LED流水灯 ...

确实是这样的,他们两没什么关系
亚瑟王 发表于 2012-4-9 13:05:39 | 显示全部楼层
亲,出现open device leds: No such file or directory这句话肯定是设备名不对引起的。我就不清楚你那边实际的设备名和应用程序里的设备名各是什么了。
 楼主| DonyChen 发表于 2012-4-10 00:33:10 | 显示全部楼层
本帖最后由 DonyChen 于 2012-4-10 00:35 编辑
亚瑟王 发表于 2012-4-9 13:05
亲,出现open device leds: No such file or directory这句话肯定是设备名不对引起的。我就不清楚你那边实际 ...

open device leds: No such file or directory这里确实是设备名不对引起,但是这个问题排除后,还是出来上面一串信息。如果使用教程的驱动(EmbedSky_leds),就只有led-player的push_led在for循环里面<8改成<4才解决。如果用镜像文件带的(GPO_control)就不需要这样改,
请问斑竹,这是怎么回事?
谢谢
亚瑟王 发表于 2012-4-10 18:38:24 | 显示全部楼层
DonyChen 发表于 2012-4-10 00:33
open device leds: No such file or directory这里确实是设备名不对引起,但是这个问题排除后,还是出来上 ...

亲,我不知道你的驱动是怎么写的,所以。。。
 楼主| DonyChen 发表于 2012-4-10 22:42:34 | 显示全部楼层
驱动EmbedSky_led.c是照抄教程的,与EmbedSky_gpio.c是有一些区别,主要是注册的设备稍微有点不同,也都是字符设备。但是ioctrl是完全一样的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
亚瑟王 发表于 2012-4-18 16:36:59 | 显示全部楼层
DonyChen 发表于 2012-4-10 22:42
驱动EmbedSky_led.c是照抄教程的,与EmbedSky_gpio.c是有一些区别,主要是注册的设备稍微有点不同,也都是字 ...

亲,你发的那个附件想说明什么事情吗?还是说是你已经调试好的?
 楼主| DonyChen 发表于 2012-4-20 17:15:42 | 显示全部楼层
亚瑟王 发表于 2012-4-18 16:36
亲,你发的那个附件想说明什么事情吗?还是说是你已经调试好的?

同样的应用程序(光盘的led_player),稍有不同的驱动程序(光盘的EmbedSky_gpio.c和教程的EmbedSky_led.c),却有不同的结果,具体请看7#。一个出错,一个可以得到预想的结果
亚瑟王 发表于 2012-4-21 13:31:27 | 显示全部楼层
DonyChen 发表于 2012-4-20 17:15
同样的应用程序(光盘的led_player),稍有不同的驱动程序(光盘的EmbedSky_gpio.c和教程的EmbedSky_led.c), ...

亲,光盘里面的2.6.25.8的内核和2.6.30.4的内核中的LED灯的驱动没有实质的区别。最大的不同是注册设备是的方法不一样,这个是不会影响到它的使用的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-16 16:34 , Processed in 1.031250 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表