如何在Linux内核中用函数指针打印函数名?

时间:2018-03-18 12:04:27

标签: linux-kernel

我正在阅读Linux内核代码。某些函数由函数指针调用。我想知道所有这些函数的调用顺序,所以我试图打印该函数。但我还没弄清楚如何制作它。

这是我的代码:

for (fn = initcall_levels[level]; fn < initcall_levels[level+1]; fn++) {
    //printk("xhl -- %pF \n", fn);
    do_one_initcall(*fn);
}

1 个答案:

答案 0 :(得分:2)

内核printk()支持特殊的%p格式说明符:

  

符号/功能指针

    %pF     versatile_init+0x0/0x110
    %pf     versatile_init
    %pS     versatile_init+0x0/0x110
    %pSR    versatile_init+0x9/0x110
            (with __builtin_extract_return_addr() translation)
    %ps     versatile_init
    %pB     prev_fn_of_versatile_init+0x88/0x88

有关完整列表,请参阅https://www.kernel.org/doc/Documentation/printk-formats.txt

对于您的示例,设置initcall_debug=1内核cmdline选项可能比手动添加printk()更好。