是否有基于内核检测的方法来测量内核在启动期间转移到用户空间的时间?我可以使用printk的定时信息,但我只是不确定,放置这个printk的确切位置,以便观察内核何时转移到用户空间。
答案 0 :(得分:5)
start_kernel()
由体系结构特定代码(arch / architecture_type)调用。内核加载后,它调用第一个用户空间进程,即。来自init_post()
的/ sbin / init(或更新的分布式系统)这两个函数都在 init / main.c 中定义。
您可能需要阅读此blog以获取有关启动过程的详细说明。
答案 1 :(得分:0)
创建自己的init,立即登录/dev/kmsg
使用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%精确,因为你将失去fopen
的一些CPU周期,但我认为这不会太重要。
最小的可重复设置以测试它: