Linux驱动开发学习-04.调试技术

04. 调试技术

4.1 printk

  • 打印优先级(<linux/kernel.h>):

    KERN_EMERG>KERN_ALERT>KERN_CRIT>KERN_ERR>KERN_WARNING>KERN_NOTICE>KERN_INFO>KERN_DEBUG

  • console_loglevel:其初始值为DEFAULT_CONSOLE_LOGLEVEL,可通过klogd -c指定,也可通过proc/sys/kernel/printk修改控制台记录级别

  • 调用时机:printk可以从任何地方调用,甚至中断中

  • 频率限制:过量printk消息会压倒控制台,拖慢系统;常常重复的消息,使用printk_ratelimit限制打印频率;可以通过修改/proc/sys/kern/printk_ratelimit(在重新使能消息前等待的秒数)和/proc/sys/kernel/printk_ratelimit_burst(限速前可接收的消息数)来定制

  • 基本原理:printk将消息写入环形缓存中(__LOG_BUF_LEN,长度值由配置内核时选择),若环形缓存填满,printk将绕回并覆盖开头的数据,因此可能丢失部分数据

  • 备注printk只有提供一个结尾的新行才会刷新

4.2 /proc文件系统

4.2.1 基本概念

  • 概念:/proc文件系统是一种内核和内核模块用来向进程(process) 发送信息的机制,是一个虚拟的文件系统,让用户可以和内核内部数据结构进行交互/proc存在于内存之中而不是硬盘上;proc文件系统以文件的形式向用户空间提供了访问接口,这些接口可以用于在运行时获取相关部件的信息或者修改部件的行为
  • 内容读取:cd /proc && ls可看到带数字的文件夹,每个数字对应一个进程的ID,每个数字文件夹基本有以下内容
cmdline - 启动进程时调用的命令
environ - 进程环境变量
status - 进程状态信息
exe - 运行的进程的可执行程序
fd - 指向进程使用的文件描述符的链接

除数字文件夹之外,还有其他重要的文件

/proc/cpuinfo - CPU 的信息(型号, 家族, 缓存大小等)
/proc/meminfo - 物理内存、交换空间等的信息
/proc/mounts - 已加载的文件系统的列表
/proc/devices - 可用设备的列表
/proc/filesystems - 被支持的文件系统
/proc/modules - 已加载的模块
/proc/version - 内核版本
/proc/cmdline - 系统启动时输入的内核命令行参数

4.2.2 相关源码

  • /proc下每个文件都绑定到一个内核函数上pstopuptime等都是从/proc下获取信息
  • read_proc<linux/proc_fs.h>)在文件被读时产生数据,当某个进程读文件时(使用 read 系统调用),这个请求通过该函数到达模块
int (*read_proc)(char *page, char **start, off_t offset, int count, int *eof, void *data);
  • creat_proc_read_entry(将read_proc连接到/proc的入口)
struct proc_dir_entry *create_proc_read_entry(const char *name,mode_t mode,struct proc_dir_entry *base, read_proc_t 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值