当前位置: 技术问答>linux和unix
帮忙分析一个下面这内核函数
来源: 互联网 发布时间:2016-12-18
本文导语: guys,帮我解释一下下面这个内核函数,越详细越好。源码是map.c int kobj_map(struct kobj_map *domain, dev_t dev, unsigned long range, struct module *module, kobj_probe_t *probe, int (*lock)(dev_t, void *), void *data) { unsi...
guys,帮我解释一下下面这个内核函数,越详细越好。源码是map.c
int kobj_map(struct kobj_map *domain, dev_t dev, unsigned long range,
struct module *module, kobj_probe_t *probe,
int (*lock)(dev_t, void *), void *data)
{
unsigned n = MAJOR(dev + range - 1) - MAJOR(dev) + 1;
unsigned index = MAJOR(dev);
unsigned i;
struct probe *p;
if (n > 255)
n = 255;
p = kmalloc(sizeof(struct probe) * n, GFP_KERNEL);
if (p == NULL)
return -ENOMEM;
for (i = 0; i owner = module;
p->get = probe;
p->lock = lock;
p->dev = dev;
p->range = range;
p->data = data;
}
mutex_lock(domain->lock);
for (i = 0, p -= n; i probes[index % 255];
while (*s && (*s)->range next;
p->next = *s;
*s = p;
}
mutex_unlock(domain->lock);
return 0;
}
int kobj_map(struct kobj_map *domain, dev_t dev, unsigned long range,
struct module *module, kobj_probe_t *probe,
int (*lock)(dev_t, void *), void *data)
{
unsigned n = MAJOR(dev + range - 1) - MAJOR(dev) + 1;
unsigned index = MAJOR(dev);
unsigned i;
struct probe *p;
if (n > 255)
n = 255;
p = kmalloc(sizeof(struct probe) * n, GFP_KERNEL);
if (p == NULL)
return -ENOMEM;
for (i = 0; i owner = module;
p->get = probe;
p->lock = lock;
p->dev = dev;
p->range = range;
p->data = data;
}
mutex_lock(domain->lock);
for (i = 0, p -= n; i probes[index % 255];
while (*s && (*s)->range next;
p->next = *s;
*s = p;
}
mutex_unlock(domain->lock);
return 0;
}
|
貌似kobj_probe_t *probe这个变量是关键~~
我感觉是new了一个probe,然后把传进的参数赋给它,然后在map里进行遍历,将probe插入到map里的合适位置。大体应该是这样。应该不是一个重要的函数。
重要的函数我理解是体现处理流程和处理逻辑的函数。你这个只是功能函数。。。。。
又,在linux版提具体函数问题,有人答你那是运气好~~
至少我提这种问题从没人答。。。。
我感觉是new了一个probe,然后把传进的参数赋给它,然后在map里进行遍历,将probe插入到map里的合适位置。大体应该是这样。应该不是一个重要的函数。
重要的函数我理解是体现处理流程和处理逻辑的函数。你这个只是功能函数。。。。。
又,在linux版提具体函数问题,有人答你那是运气好~~
至少我提这种问题从没人答。。。。