Linux内核中的initcall机制与数据结构解析
1. initcall机制简介
在Linux内核中,initcall机制是一个十分重要的概念。像early_param("debug", debug_kernel);和arch_initcall(init_pit_clocksource);这样的定义,代表着在Linux内核初始化期间或之后会被调用的回调函数。initcall机制的主要作用是确定内置模块和子系统初始化的正确顺序。
例如,在arch/x86/kernel/nmi.c源文件中有如下函数:
static int __init nmi_warning_debugfs(void) { debugfs_create_u64("nmi_longest_ns", 0644, arch_debugfs_dir, &nmi_longest_ns); return 0; }该函数的作用是在arch_debugfs_dir目录下创建nmi_longest_nsdebugfs文件。但这个文件只能在arch_debugfs_dir目录创建之后才能创建,而该目录的创建是在Linux内核特定架构初始化期间完成的,具体是在arch/x86/kernel/kdebugfs.c源文件的arc