LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 813|回复: 1

请问内核中poll后返回的mask是不是直接就提交给用户空间的select或poll函数了?

[复制链接]
发表于 2005-10-24 11:03:31 | 显示全部楼层 |阅读模式
我的程序在执行select后就死掉了(重启系统),但是poll函数中又没有出错!是不是poll后系统还会做一些别的事情。
我在驱动的poll里打印信息
  1. printk("after poll!\n");
  2.         return imask;
复制代码

在应用程序中也打印信息
  1. pagesize = getpagesize();
  2.         printf("page size is %d\n",pagesize);

  3.         pic_buf = (char *)malloc(PIC_SIZE);
  4.         buf_record = pic_buf;
  5.         if(NULL == pic_buf){
  6.                 printf("fail to alloc memory!\n");
  7.                 return -1;
  8.         }
  9.         printf("after malloc!\n");


  10.         tv.tv_sec = 5;
  11.         tv.tv_usec = 0;


  12.         FD_ZERO(&read_set);
  13.         FD_SET(pic_fd, &read_set);
  14.        
  15.         pid = vfork();
  16.         if(0 == pid){
  17.                 ioctl(pic_fd, EN_START_JPEG, 0);
  18.                 _exit(0);
  19.         }
  20.         waitpid(pid,0,0);
  21.         printf("after start jpeg!\n");
  22.         ret = select(pic_fd+1, &read_set, NULL, NULL, &tv);
  23.         printf("after select!\n");
  24.         if (FD_ISSET(pic_fd, &read_set)){
  25.                 jpeg_len = read(pic_fd,pic_buf,PIC_SIZE);
  26.                 printf("jpeg len is %d\n",jpeg_len);
  27.         }       
复制代码

但结果往往打印完“after poll!”后就死掉了,但也不是每次都死,要么连续死,死后重启还是死,要么连续不死,如果开始不是,程序重复执行也不死,但中间过一段时间不执行,再执行的话就有可能死。而且打印信息的次序也会错掉,搞不懂为什么!
  1. video_test
  2. page size is 4096
  3. after after poll!
  4. malloc!
  5. after start jpeg!
  6. Data access misaligned address violation
  7. - Attempted misaligned data memory or data cache access.
  8. DCPLB_FAULT_ADDR=000087c4
复制代码
 楼主| 发表于 2005-10-25 10:49:06 | 显示全部楼层
唉!应用程序肯定没错,驱动应该也没什么问题!不会又是内核bug吧!只有下决心看一下内核了,对我这种接触编程才几个月的人来说,有点头痛!呜呜
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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