天嵌 ARM开发社区

 找回密码
 注册
查看: 1943|回复: 0

linux驱动异步通知问题

[复制链接]
李华伟 发表于 2012-7-19 22:58:05 | 显示全部楼层 |阅读模式
我测试驱动中异步信号通知机制的时候出现如下问题,请问大家有谁知道是什么原因吗?
[root@EmbedSky /]# ./globalvar_fasync_test
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c3b04000
[00000000] *pgd=33b02031, *pte=00000000, *ppte=00000000
Internal error: Oops: 17 [#2]
Modules linked in: globalvar_fasync ov9650 zd1211rw rt73usb rt2x00usb rt2x00lib mac80211 input_polldev
CPU: 0    Tainted: G      D     (2.6.30.4-EmbedSky #1)
PC is at fasync_helper+0x30/0x130
LR is at fasync_helper+0x118/0x130
pc : [<c00b1350>]    lr : [<c00b1438>]    psr: a0000093
sp : c3afbf38  ip : c3aea020  fp : c3afbf54
r10: 00000000  r9 : c3afa000  r8 : c0045008
r7 : 00000003  r6 : 00000000  r5 : 00000001  r4 : c3abed80
r3 : a0000093  r2 : c3aea030  r1 : 000000d0  r0 : c3aea020
Flags: NzCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: c000717f  Table: 33b04000  DAC: 00000015
Process globalvar_fasyn (pid: 641, stack limit = 0xc3afa268)
Stack: (0xc3afbf38 to 0xc3afc000)
bf20:                                                       00000004 00002002
bf40: c3abed80 00000003 c3afbf64 c3afbf58 bf064014 c00b1330 c3afbf84 c3afbf68
bf60: c00b1b24 bf064010 00000004 00002002 c3abed80 00000003 c3afbfa4 c3afbf88
bf80: c00b1c3c c00b1888 00000003 00000004 00002002 000000dd 00000000 c3afbfa8
bfa0: c0044e60 c00b1c04 00000003 00000004 00000003 00000004 00002002 be86ab2c
bfc0: 00000003 00000004 00002002 000000dd 00000000 00000000 40025000 be86ab44
bfe0: 000108b4 be86ab00 00008604 400f0a0c 60000010 00000003 5fff7fdf de7bfe5e
Backtrace:
[<c00b1320>] (fasync_helper+0x0/0x130) from [<bf064014>] (globalvar_test_fasync+0x14/0x18 [globalvar_fasync])
r7:00000003 r6:c3abed80 r5:00002002 r4:00000004
[<bf064000>] (globalvar_test_fasync+0x0/0x18 [globalvar_fasync]) from [<c00b1b24>] (do_fcntl+0x2ac/0x37c)
[<c00b1878>] (do_fcntl+0x0/0x37c) from [<c00b1c3c>] (sys_fcntl64+0x48/0x90)
r7:00000003 r6:c3abed80 r5:00002002 r4:00000004
[<c00b1bf4>] (sys_fcntl64+0x0/0x90) from [<c0044e60>] (ret_fast_syscall+0x0/0x2c)
r7:000000dd r6:00002002 r5:00000004 r4:00000003
Code: 1a000038 e10f3000 e3833080 e121f003 (e5961000)
---[ end trace b173c69ea79ea5c9 ]---
Segmentation fault



测试程序为
#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<fcntl.h>
#include<signal.h>
#include<unistd.h>

void input_handler(int signum)
{
        printf("receive a signal from globalmem,signalnum:%d\n",signum);
}

int main()
{
        int fd,oflags;
        fd = open("/dev/globalvar",O_RDWR,S_IRUSR|S_IWUSR);
        if(fd != -1){
                signal(SIGIO,input_handler);
                fcntl(fd,F_SETOWN,getpid());
                oflags = fcntl(fd,F_GETFL);
                fcntl(fd,F_SETFL,oflags|FASYNC);
                while(1){
                        sleep(100);
                }
        }else{
                printf("device open failure\n");
        }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-5-18 06:31 , Processed in 1.046875 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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