- 论坛徽章:
- 0
|
本帖最后由 tqyou85 于 2014-06-16 15:49 编辑
内核定义一个全局的g_wait_queue,并初始化:- DECLARE_WAIT_QUEUE_HEAD(g_wait_queue);
复制代码 注册一个file_operations,定义poll函数如下:- poll_wait(filep, &g_wait_queue, wait);
- smp_mb();
- if(condition)
- return POLLPRI;
复制代码 内核wakeup如下:- wake_up_interruptible(&g_wait_queue);
复制代码 用户空间代码如下:- struct pollfd pfd;
- /*初始化如下*/
- int fd = open("/dev/sample", O_RDWR);
- pfd.fd = fd;
- pfd.events = POLLPRI;
- /*poll代码*/
- poll(&pfd, 1, -1);
复制代码 用户空间一调用poll,系统马上崩溃了,终端打印:
BUG: unable to handle kernel paging request at 9fb00004
*pde = 00000000
请教下是什么原因?
单步调试用户空间程序,open之后fd为7 |
|