You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2中/proc/kallsyms无printk却有_printk的原因及解决问询

WSL2内核模块开发中printk符号缺失问题排查与疑问

环境详情

  • WSL2版本:最新预发布版(已执行wsl --update --pre-release)
  • 测试发行版:WSL2下的Ubuntu、Arch Linux
  • 当前运行内核:6.6.87.2-microsoft-standard-WSL2(来自uname -r)
  • 可用内核模块目录:执行ls /lib/modules输出:
5.15.153.1-microsoft-standard-WSL2  6.6.87.1-microsoft-standard-WSL2  6.6.87.2-microsoft-standard-WSL2   6.8.0-85-generic
5.15.167.4-microsoft-standard-WSL2  6.6.87.2-g427645e3db3a-dirty      6.6.87.2-microsoft-standard-WSL2+

其中包含标准Ubuntu内核6.8.0-85-generic的模块,但无法引导进入该内核,WSL2始终加载微软定制内核。

问题:/proc/kallsyms中缺失printk符号

查看内核符号表/proc/kallsyms时,未找到标准printk函数,仅能看到printk_timed_ratelimit等相关辅助函数;但在当前内核的模块符号文件Module.symvers中存在_printk符号,却无printk。

执行cat /proc/kallsyms | grep "T printk"的输出:

0000000000000000 T printk_timed_ratelimit
0000000000000000 T printk_percpu_data_ready
0000000000000000 T printk_parse_prefix
0000000000000000 T printk_trigger_flush
0000000000000000 T printk_sysctl_init
0000000000000000 T printk_all_partitions

查看当前内核模块符号(cat /lib/modules/$(uname -r)+/build/Module.symvers | grep "printk")的输出:

0x56470118      __warn_printk   vmlinux EXPORT_SYMBOL
0x2592fc6c      console_printk  vmlinux EXPORT_SYMBOL_GPL
0xee8c02e9      vprintk_emit    vmlinux EXPORT_SYMBOL
0xf2fb61bd      vprintk_default vmlinux EXPORT_SYMBOL_GPL
0x122c3a7e      _printk vmlinux EXPORT_SYMBOL
0x6128b5fc      __printk_ratelimit      vmlinux EXPORT_SYMBOL
0x07cc4a5d      printk_timed_ratelimit  vmlinux EXPORT_SYMBOL
0x371e1953      __printk_cpu_sync_wait  vmlinux EXPORT_SYMBOL
0xa64c7249      __printk_cpu_sync_try_get       vmlinux EXPORT_SYMBOL
0xc0fe9137      __printk_cpu_sync_put   vmlinux EXPORT_SYMBOL
0x715a5ed0      vprintk vmlinux EXPORT_SYMBOL
0xa2e1b3ef      trace_printk_init_buffers       vmlinux EXPORT_SYMBOL_GPL
0x3cd1b510      trace_vbprintk  vmlinux EXPORT_SYMBOL_GPL
0x2fa8463c      trace_array_printk      vmlinux EXPORT_SYMBOL_GPL
0x1ee083a3      trace_array_init_printk vmlinux EXPORT_SYMBOL_GPL
0xc3708747      trace_vprintk   vmlinux EXPORT_SYMBOL_GPL
0xa20d01ba      __trace_bprintk vmlinux EXPORT_SYMBOL_GPL
0x31019477      __ftrace_vbprintk       vmlinux EXPORT_SYMBOL_GPL
0x133969d7      __trace_printk  vmlinux EXPORT_SYMBOL_GPL
0x7e3bdecd      __ftrace_vprintk        vmlinux EXPORT_SYMBOL_GPL
0xd8df08ac      acpi_handle_printk      vmlinux EXPORT_SYMBOL
0x40812fa2      drm_dev_printk  vmlinux EXPORT_SYMBOL
0xeb717212      dev_vprintk_emit        vmlinux EXPORT_SYMBOL
0xf0ca01cd      dev_printk_emit vmlinux EXPORT_SYMBOL
0x88d3028f      _dev_printk     vmlinux EXPORT_SYMBOL
0x3311b831      sdev_prefix_printk      vmlinux EXPORT_SYMBOL
0x6abc4da1      scmd_printk     vmlinux EXPORT_SYMBOL
0x3230c2b1      netdev_printk   vmlinux EXPORT_SYMBOL
0x3ece0a5b      seq_buf_do_printk       vmlinux EXPORT_SYMBOL_GPL
0xbc5671dc      v4l_printk_ioctl        drivers/media/v4l2-core/videodev        EXPORT_SYMBOL
0xeffa09b2      ibdev_printk    drivers/infiniband/core/ib_core EXPORT_SYMBOL

另外,查看6.8.0-85-generic内核的Module.symvers时,同样无printk但存在_printk:

0xd0f284b8      mmiotrace_printk        vmlinux EXPORT_SYMBOL
0x56470118      __warn_printk   vmlinux EXPORT_SYMBOL
0x2592fc6c      console_printk  vmlinux EXPORT_SYMBOL_GPL
0xee8c02e9      vprintk_emit    vmlinux EXPORT_SYMBOL
0xf2fb61bd      vprintk_default vmlinux EXPORT_SYMBOL_GPL
0x122c3a7e      _printk vmlinux EXPORT_SYMBOL
0x6128b5fc      __printk_ratelimit      vmlinux EXPORT_SYMBOL
0x07cc4a5d      printk_timed_ratelimit  vmlinux EXPORT_SYMBOL
0x371e1953      __printk_cpu_sync_wait  vmlinux EXPORT_SYMBOL
0xa64c7249      __printk_cpu_sync_try_get       vmlinux EXPORT_SYMBOL
0xc0fe9137      __printk_cpu_sync_put   vmlinux EXPORT_SYMBOL
0x715a5ed0      vprintk vmlinux EXPORT_SYMBOL
0xa2e1b3ef      trace_printk_init_buffers       vmlinux EXPORT_SYMBOL_GPL
0x3cd1b510      trace_vbprintk  vmlinux EXPORT_SYMBOL_GPL
0x920b2622      trace_array_printk      vmlinux EXPORT_SYMBOL_GPL
0x078afbc0      trace_array_init_printk vmlinux EXPORT_SYMBOL_GPL
0xc3708747      trace_vprintk   vmlinux EXPORT_SYMBOL_GPL
0xa20d01ba      __trace_bprintk vmlinux EXPORT_SYMBOL_GPL
0x31019477      __ftrace_vbprintk       vmlinux EXPORT_SYMBOL_GPL
0x133969d7      __trace_printk  vmlinux EXPORT_SYMBOL_GPL
0x7e3bdecd      __ftrace_vprintk        vmlinux EXPORT_SYMBOL_GPL
0x17a6587c      _RNvXs9x_NtCs7HWDDni9asp_8bindings12bindings_rawNtB6_15dev_printk_infoNtNtCsish51TdtVMS_4core7default7Default7default   vmlinux EXPORT_SYMBOL_GPL
0xee5c4d70      _RNvNtCsdyVPidz6NUH_6kernel5print11call_printk  vmlinux EXPORT_SYMBOL_GPL
0x672cbb2c      _RNvNtCsdyVPidz6NUH_6kernel5print16call_printk_cont     vmlinux EXPORT_SYMBOL_GPL
0xd8df08ac      acpi_handle_printk      vmlinux EXPORT_SYMBOL
0xdfe60478      dev_vprintk_emit        vmlinux EXPORT_SYMBOL
0x0f7eae61      dev_printk_emit vmlinux EXPORT_SYMBOL
0x7ed41778      _dev_printk     vmlinux EXPORT_SYMBOL
0x7ec52cf4      sdev_prefix_printk      vmlinux EXPORT_SYMBOL
0x22e60a8e      scmd_printk     vmlinux EXPORT_SYMBOL
0xff3925f0      drm_dev_printk  vmlinux EXPORT_SYMBOL
0x194736e5      netdev_printk   vmlinux EXPORT_SYMBOL
0x3ece0a5b      seq_buf_do_printk       vmlinux EXPORT_SYMBOL_GPL
0x6a0c3847      __mlog_printk   fs/ocfs2/cluster/ocfs2_nodemanager      EXPORT_SYMBOL_GPL
0xb881b1a9      ath6kl_printk   drivers/net/wireless/ath/ath6kl/ath6kl_core     EXPORT_SYMBOL
0x2081266f      ath_printk      drivers/net/wireless/ath/ath    EXPORT_SYMBOL
0xbc5671dc      v4l_printk_ioctl        drivers/media/v4l2-core/videodev        EXPORT_SYMBOL
0x9deccbd5      ibdev_printk    drivers/infiniband/core/ib_core EXPORT_SYMBOL

已尝试操作

  • 更新WSL:执行wsl --update --pre-release获取最新版本,内核仍为微软定制版
  • 手动指定内核头文件路径:编译模块时需手动指定/lib/modules/6.8.0-85-generic/build,默认路径文件不完整
  • 尝试切换内核:无法引导进入6.8.0-85-generic,WSL2始终加载微软定制内核
  • 检查其他内核:6.8.0-85-generic同样无printk符号,怀疑是现代Linux内核的普遍变更(如printk被内联或重命名为_printk)

疑问

  1. 为何/proc/kallsyms中缺失printk但模块符号中存在_printk?这是WSL2定制特性还是现代内核的普遍行为?
  2. 如何在WSL2中切换至6.8.0-85-generic这类标准内核?微软定制内核是否因虚拟化需求做了精简?
  3. 若此为预期行为,WSL2下内核模块开发中正确使用printk的方式是什么?能否直接引用_printk?

内容的提问来源于stack exchange,提问作者Tayler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 04:05:55