do_one_initcall在哪定义的?
时间: 2023-08-16 14:06:31 浏览: 50
`do_one_initcall` 是 Linux 内核中的一个函数,用于调用一个初始化函数。它定义在 `<linux/init.h>` 头文件中,其定义如下:
```
int do_one_initcall(initcall_t fn)
{
int ret = 0;
if (fn && fn() < 0)
ret = -1;
return ret;
}
```
`do_one_initcall` 函数接受一个类型为 `initcall_t` 的函数指针作为参数,调用该函数进行初始化。`initcall_t` 是一个函数指针类型,它定义在 `<linux/init.h>` 头文件中,其定义如下:
```
typedef int (*initcall_t)(void);
```
`initcall_t` 类型的函数必须返回一个整数值,表示初始化的结果,其中负数表示初始化失败。在内核初始化时,内核会按照函数指针的顺序依次调用所有初始化函数,其中 `do_one_initcall` 函数用于调用单个初始化函数。
相关问题
trace_initcall_level 的定义在哪?
`trace_initcall_level` 函数是 Linux 内核中的一个跟踪点,其定义位于 `kernel/trace/trace_init.c` 文件中。该函数的定义如下:
```c
void trace_initcall_level(const char *name)
{
tracing_record_cmdline(name);
}
```
这个函数的实现非常简单,只是调用了 `tracing_record_cmdline` 函数,将当前初始化函数的级别名称记录在内核的命令行中。这样在系统启动时,就可以通过查看内核命令行来了解内核初始化函数的调用情况。
register_trace_initcall_start 的定义
`register_trace_initcall_start` 是 Linux 内核中用于注册一个在内核初始化时执行的跟踪事件的函数。它的定义位于 `include/linux/trace_events.h` 中。
该函数的原型如下:
```
int register_trace_initcall_start(void (*probe)(void));
```
该函数的参数是一个函数指针 `probe`,指向一个无返回值、无参数的函数,该函数将在内核初始化时被调用。
`register_trace_initcall_start` 的作用是注册一个跟踪事件,用于记录内核初始化过程中每个 `initcall` 函数的开始执行时间。这些 `initcall` 函数是内核模块或驱动程序在初始化时注册的函数,用于完成一些初始化工作。
当内核初始化时,跟踪事件将被触发,记录每个 `initcall` 函数的开始执行时间。这些跟踪事件可以被跟踪工具(如 ftrace)用于分析内核初始化过程中的性能问题。