LinuxSir.cn,穿越时空的Linuxsir!

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

令人无语的奇怪问题-添加同步机制

[复制链接]
发表于 2007-1-10 14:44:39 | 显示全部楼层 |阅读模式
我在include/linux文件夹中写了个evnt.h头文件,并包含了一切需要的include,声明了一个结构struct Event;

在kernel文件夹中写了一个event.c文件,,声明了一个结构静态常量static struct Event eventArray[MAX_EVENTS];    /*define MAX_EVENTS 32*/
并声明了一个void evnt_init()初始化函数将数组中的64个元素初始化;

然后在init文件夹的main.c文件中的asmlinkage void __init start_kernel(void)函数添加了对evnt_init()的调用。

编译内核并重新引导没问题。
我能肯定evnt_init在系统启动时被调用了,但是我在自己添加的系统调用asmlinkage int sys_evntopen(int eventNum)中调用eventArray数组时,发现当调用evntopen(0)时,老是返回-1,估计就是eventArray[MAX_EVENTS]的初始化不正确,改了很多都不知道原因。有那位大牛人能帮我解决这个问题吗?小弟在此不胜感激。

各源码部分如下:
event.c
static struct Event eventArray[MAX_EVENTS];    /* The event array */
void evnt_init(void) {
        int i;

        for(i = 0; i<MAX_EVENTS; i++) {
        eventArray.ownerPid = -1;
        eventArray.queue = NULL;
                eventArray.numBlocked = 0;
        eventArray.usageCount = 0;
        }
}
asmlinkage int sys_evntopen(int eventNum)
{
        int i;

    if(eventNum == 0) {
    /* Look for an available slot */
        for(i=0; i < MAX_EVENTS; i++) {
            if (eventArray.ownerPid == -1) {
                eventArray.ownerPid = current->pid;
                eventArray.usageCount = 1;
                return i;
            }
        }
        return -1;    /* No events available */
    }
    eventArray[eventNum].usageCount++;
    return eventNum;
}


event.h
#define    MAX_NAME_LEN    64
#define    MAX_EVENTS    32
struct Event {
        int ownerPid;
        struct wait_queue *queue;
        int numBlocked;
    int usageCount;
};
发表于 2007-3-14 00:53:57 | 显示全部楼层
不用初始化了,就当ownerPid==0为可用的吧,反正没有Pid为0的进程吧,试试?
回复 支持 反对

使用道具 举报

发表于 2007-6-7 14:14:06 | 显示全部楼层
你确定你的系统调用sys_evntopen进去了么??加个printk看看。
你贴出来的代码看起来没什么问题啊
回复 支持 反对

使用道具 举报

发表于 2007-6-9 12:22:55 | 显示全部楼层
还差点代码吧。都贴出来看看啊!~
回复 支持 反对

使用道具 举报

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

本版积分规则

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