在cmdline中增加initcall_debug后,内核启动过程中会增加如下形式的日志,在调用每一个init函数前有一句打印,结束后再有一句打印并且输出了该Init函数运行的时间,通过这个信息可以用来定位启动过程中哪个init函数运行失败以及哪些init函数运行时间较长。 calling init_workqueues+0x0/0x414 @ 1 initcall init_workqueues+0x...
calling xxxxxx.dma+ @ 6, parent: xxx.0 call xxxxxx.dma+ returned 0 after 2 usecs 2. 相关代码 ./init/main.c中声明变量的地方如下,通过core_param,可以通过/sys/module/kernel/parameters/initcall_debug在用户空间获取initcall_debug的状态,另外cmdline能起作用依赖的应该也是这行代码,关于core_param的实...
5.1 initcall_debug CMDLINE中增加initcall_debug选项 console=ttyS0,115200...initcall_debug 打开CMDLINE选项 结果: [root@rk3399:/]# dmesg | grep initcall[0.000000] Kernel command line: initcall_debug storagemedia=emmcandroidboot.storagemedia=emmc androidboot.mode=normal androidboot.slot_suffix= androidbo...
-boolinitcall_debug; +boolinitcall_debug =1; core_param(initcall_debug, initcall_debug,bool,0644);#ifdef CONFIG_KALLSYMS 2 kernel message Starting kernel ... [0.000000] Booting Linux on physicalCPU0x0[0.000000] Initializing cgroup subsys cpuset [0.000000] Initializing cgroup subsyscpu[0.000000] Ini...
5.1 initcall_debug CMDLINE中增加initcall_debug选项 console=ttyS0,115200...initcall_debug 打开CMDLINE选项 CMD选项 结果: [root@rk3399:/]#dmesg|grepinitcall[0.000000]Kernelcommandline:initcall_debugstoragemedia=emmcandroidboot.storagemedia=emmcandroidboot.mode=normalandroidboot.slot_suffix=androidboot.serial...
int__init_or_module do_one_initcall(initcall_t fn){intcount=preempt_count();intret;charmsgbuf[64];if(initcall_blacklisted(fn))return-EPERM;if(initcall_debug)ret=do_one_initcall_debug(fn);elseret=fn();msgbuf[0]=0;if(preempt_count()!=count){ ...
Usage cmdline添加”initcall_debug=1 loglevel=9”,会打印所有执行的initcall。 更多好文请关注公号:皮塞作坊编辑于 2024-10-23 17:07・IP 属地北京 Linux 内核 赞同3添加评论 分享喜欢收藏申请转载 写下你的评论... 还没有评论,发表第一个评论吧 推荐阅读 分布式系统以及CAP...
early_param("debug", debug_kernel); 或者 arch_initcall(init_pit_clocksource); 在我们分析这个机制在内核中是如何实现的之前,我们必须了解这个机制是什么,以及在 Linux 内核中是如何使用它的。像这样的定义表示一个回调函数,它们会在 Linux 内核启动中或启动后调用。实际上initcall机制的要点是确定内置模块和子系...
char msgbuf[40]; int result; if (initcall_debug) { printk("Calling initcall 0x%p", *call); print_fn_descriptor_symbol(": %s()", (unsigned long) *call); printk("\n"); t0 = ktime_get(); } result = (*call)(); ... }
if (initcall_debug) ret = do_one_initcall_debug(fn); else ret = fn(); msgbuf[0] = 0; if (ret && ret != -ENODEV && initcall_debug) ...