起Linux虚拟机时发现kernel日志random: crng init done之前等了很久。通过debug kernel代码对这个问题稍微有了一点理解,记录一下。
当前使用的kernel 代码是5.19.2.
drivers/char/random.c
static void __cold _credit_init_bits(size_t bits)
{
...
pr_notice("crng init done\n");
...
}
dump stack找出caller function
[ 3.731810] CPU: 0 PID: 1 Comm: systemd Tainted: G W 5.19.2 #7
[ 3.732393] Hardware name: linux,dummy-virt (DT)
[ 3.732780] Call trace:
[ 3.733016] dump_backtrace.part.6+0xec/0xf8
[ 3.733409] show_stack+0x14/0x28
[ 3.733722] dump_stack_lvl+0x78/0x98
[ 3.734062] dump_stack+0x14/0x30
[ 3.734374] _credit_init_bits+0x1c/0x1ec
[ 3.734740] entropy_timer+0x50/0x60
[ 3.735072] call_timer_fn.isra.26+0x20/0x78
[ 3.735463] run_timer_softirq+0x4e4/0x578
[ 3.735841] _stext+0x11c/0x284
[ 3.736138] irq_exit_rcu+0x10c/0x138
...
本机上大部分的调用都是entropy_timer, 即大部分的熵的来源是时钟中断。注

最低0.47元/天 解锁文章
1036

被折叠的 条评论
为什么被折叠?



