3

是否有基于内核检测的方法来测量内核在启动期间转移到用户空间的时间?我可以将 printk 与计时信息一起使用,但我只是不确定该 printk 的确切放置位置,以便观察内核何时转移到用户空间。

4

2 回答 2

5

start_kernel()体系结构特定代码(arch/architecture_type)调用。内核加载后,它会调用第一个用户空间进程,即 /sbin/init(或更新版本上的 systemd)。init_post()这两个函数都在init/main.c中定义。

您可能想阅读此博客以获取有关启动过程的详细说明。

于 2012-10-02T07:20:17.280 回答
0

/dev/kmsg创建您自己的 init 并立即记录到

使用 a 破解内核代码的更简单的替代方法printk是使用以下 init:

#include <stdio.h>
#include <unistd.h>

int main(void) {
    FILE *fp;
    fp = fopen("/dev/kmsg", "w");
    fputs("hello init\n", fp);
    fclose(fp);
    while (1)
        sleep(0xFFFFFFFF);
}

并使用内核命令行参数:

init=/path/to/myinit printk.devkmsg=on printk.time=y

现在就在引导结束和 init 启动之后,我们看到一条消息:

[<timestamp>] hello init

这不是 100% 精确的,因为您将失去一些 CPU 周期fopen,但我认为这并不重要。

最小的可重复设置来测试它:

于 2017-10-01T21:20:53.077 回答