LinuxSir.cn,穿越时空的Linuxsir!

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

请教问题!!!!!!!!!!!急急急

[复制链接]
发表于 2005-5-7 13:38:28 | 显示全部楼层 |阅读模式
我想请教一下 2.2内核中的等待队列 struct wait_queue 和 2.6.9里面的定义是一样的么?
如果不一样, 那2.6里的应该怎么定义和用
我这里有份代码, 是可以在2.2下编译通过, 那如果加在2.6.9的内核中,应该怎么去改??? 急, 真的很急!!

  1. #include <linux/kernel.h>
  2. #include <linux/wait.h>
  3. #include <linux/sched.h>
  4. #include <linux/unistd.h>
  5. #include <linux/slab.h>
  6. #include <asm/system.h>


  7. #define TRUE 1

  8. #define FALSE 0



  9. #define        MAX_NAME_LEN        64

  10. #define        MAX_EVENTS        32



  11. struct Event {

  12.         int ownerPid;

  13.         struct wait_queue *queue;

  14.         int numBlocked;

  15.         int usageCount;

  16. };



  17. static struct Event eventArray[MAX_EVENTS];        /* The event array */

  18. asmlinkage int sys_getevntnum(char *name) {
  19. /* dummy */
  20.         return 0;
  21. }

  22. /* Initialize the event array */
  23. void __init evnt_init(void) {
  24.         int i;

  25.         for(i = 0; i<MAX_EVENTS; i++) {
  26.                 eventArray[i].ownerPid = -1;
  27.                 eventArray[i].queue = NULL;
  28.                 eventArray[i].numBlocked = 0;
  29.                 eventArray[i].usageCount = 0;
  30.         }
  31. }


  32. /* Open an event for shared use */
  33. asmlinkage int sys_evntopen(int eventNum)
  34. {
  35.         int i;

  36.         if(eventNum == 0) {
  37.         /* Look for an available slot */
  38.                 for(i=0; i < MAX_EVENTS; i++) {
  39.                         if (eventArray[i].ownerPid == -1) {
  40.                                 eventArray[i].ownerPid = current->pid;
  41.                                 eventArray[i].usageCount = 1;
  42.                                 return i;
  43.                         }
  44.                 }
  45.                 return -1;        /* No events available */
  46.         }
  47.         eventArray[eventNum].usageCount++;
  48.         return eventNum;
  49. }


  50. /* Deallocate this event */
  51. asmlinkage int sys_evntclose(int eventNum) {
  52.         struct wait_queue *qEntry;

  53. /* Could validate owner(s), but this version does not do so */
  54. /* Release blocked processes */
  55.         qEntry = eventArray[eventNum].queue;
  56.         while(eventArray[eventNum].numBlocked > 0) {
  57.                 qEntry->task->state = TASK_RUNNING;
  58.                 remove_wait_queue(
  59.                         &(eventArray[eventNum].queue), qEntry);
  60.                 qEntry = qEntry->next;
  61.                        eventArray[eventNum].numBlocked--;
  62.         }
  63.         eventArray[eventNum].ownerPid = -1;
  64.         eventArray[eventNum].queue = NULL;
  65.         eventArray[eventNum].usageCount = 0;
  66.         return 0;
  67. }


  68. asmlinkage int sys_evntwait(int eventNum) {
  69.         struct wait_queue **queue;[CODE]


  70. /* Add current task to the blocked process list */
  71.         queue = &(eventArray[eventNum].queue);
  72.         sleep_on(queue);
  73.         return 0;
  74. }

  75. asmlinkage int sys_evntsig(int eventNum) {
  76.         struct wait_queue **queue;



  77.         queue = &(eventArray[eventNum].queue);
  78.         wake_up(queue);
  79.         return 0;
  80. }
复制代码


我修改一些实现系统调用的必要东西之后, 用这几个空函数可以实现这些新的系统调用(这些代码是一个event.c文件 放在linux-2.6.9/arch/i386/kernel 中编译)  
应该怎么样该这些代码才能在2.6.9中编译通过???(编译内核到这个文件的时候, 显示remove_wait_queue , sleep_on, wake_up 的参数错误, 我应该怎么改????????
谢谢先
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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