initcall_from_entry函数详解
时间: 2023-08-02 13:08:50 浏览: 235
initcall_from_entry函数是Linux内核初始化过程中的一部分,其作用是将定义为__initcall的函数指针添加到初始化调用链表中。这个函数被定义在init/main.c中。
具体来说,当内核启动时,会执行一系列的初始化函数,例如设备驱动初始化、内存管理初始化等。这些初始化函数被定义为__initcall,表示它们只在内核启动时被调用一次,并且在初始化完成后会被释放掉。这些函数指针被存储在一个初始化调用链表中。initcall_from_entry函数就是将这些函数指针添加到初始化调用链表中的。
initcall_from_entry函数的参数是一个函数指针,指向一个定义为__initcall的初始化函数。函数的实现比较简单,它会将传入的函数指针添加到初始化调用链表中。具体的实现过程可以参考以下代码:
```c
static void __init initcall_from_entry(initcall_entry_t *entry)
{
initcall_t fn = (initcall_t) entry->function;
int level = initcall_level(entry);
if (level != -1) {
list_add_tail(&entry->list, &initcall_levels[level]);
printk(KERN_DEBUG "Registered initcall %s with priority %d\n",
entry->name, level);
}
}
```
在函数中,首先将传入的函数指针转换成initcall_t类型,并通过initcall_level函数获取该函数的优先级level。如果level不等于-1,表示该函数是一个有效的初始化函数,将其添加到对应优先级的初始化调用链表中。最后打印一条日志信息,表示该函数已经被注册。
总的来说,initcall_from_entry函数是Linux内核初始化过程中的一部分,负责将定义为__initcall的初始化函数添加到初始化调用链表中。
阅读全文