Linux内核中的格式化打印

内核中的格式化打印 | DD'Notes背景最近在调试个异常卡死的问题时,需要打印某个pcie link的,故学习了下内核里的打印,特此记录。 printk(“acpi_pci_link_set–>%pfwf, irq: %d\n”, &link->device->fwnode, irq); 内核中的格式化打印主要分为整型和指针。 整型signed char%d or %hhx unsigned chaicon-default.png?t=N7T8https://notes.z-dd.online/2024/04/07/%E5%86%85%E6%A0%B8%E4%B8%AD%E7%9A%84%E6%A0%BC%E5%BC%8F%E5%8C%96%E6%89%93%E5%8D%B0/

背景

最近在调试个异常卡死的问题时,需要打印某个pcie link的,故学习了下内核里的打印,特此记录。

printk(“acpi_pci_link_set–>%pfwf, irq: %d\n”, &link->device->fwnode, irq);

内核中的格式化打印主要分为整型和指针。

整型

signed char		%d or %hhx
unsigned char		%u or %x
char			%u or %x
short int		%d or %hx
unsigned short int	%u or %x
int			%d or %x
unsigned int		%u or %x
long			%ld or %lx
unsigned long		%lu or %lx
long long		%lld or %llx
unsigned long long	%llu or %llx
size_t			%zu or %zx
ssize_t			%zd or %zx
s8			%d or %hhx
u8			%u or %x
s16			%d or %hx
u16			%u or %x
s32			%d or %x
u32			%u or %x
s64			%lld or %llx
u64			%llu or %llx

内核的printf不支持%n,浮点型(%e, %f, %g, %a)等。
有些类型的大小依赖配置选项如(如sector_t, blkcnt_t)或架构(如 tcflag_t),这时使用其可能的最大类型的格式占位符并显式强制转换为它。

指针类型

内核支持扩展占位符来打印不同类型的指针,有些不止能够打印指针地址,还能打印给定地址上的数据,名称或者相关提示等。

目前支持的指针类型如下:

  • 普通指针
  • 错误指针
  • 符号/函数指针
  • 来自BPF / tracing追踪的探查指针
  • 内核指针
  • 未修改的地址
  • 指针差异
  • 结构体资源
  • 物理地址类型phys_addr_t
  • DMA地址类型dma_addr_t
  • 原始缓冲区为转义字符串
  • 原始缓冲区为hex字符串
  • MAC/FDDI 地址
  • IPv4 地址
  • IPv6 地址
  • IPv4/IPv6 地址 (generic, with port, flowinfo, scope)
  • UUID/GUID 地址
  • 目录项(dentry)的名称
  • 块设备(block_device)名称
  • va_format结构体
  • 设备树节点
  • Fwnode handles
  • 时间和日期
  • clk结构体
  • 位图及其扩展,如cpumask和nodemask
  • 标志位字段,如页标志、gfp_flags
  • 网络设备特性
  • V4L2和DRM FourCC代码(像素格式)
  • Rust

下面展开几个可能比较常用的

符号/函数指针

.........

%pS	versatile_init+0x0/0x110
  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值