LDD3 D05 补

  • 10:01-11:30  p75-p99

    第四章 调试技术

    内核中的调试支持

    通常在内核配置的 kernel hacking 菜单中。

     

    通过打印调试

     

    printk

    消息有优先级。类似 KERN_ALERT 的宏会被展开成尖括号中的整数。 <linux/kernel.h> 定义了8种这样的宏。数字越小严重程度越高。

     

    klogd, syslogd

    echo 8 > /proc/sys/kernel/printk

     

    Q为什么在我的虚拟机上不起作用

     

    重定向控制台消息

    内核可以将消息发送到一个指定的虚拟控制台。通过调用 ioctl(TIOCLINUX)来指定接收消息的其他虚拟终端。

     

    消息如何被记录

    printk 将消息写到长度为 _ _LOG_BUF_LEN 字节的循环缓冲。该函数会唤醒那些睡眠在syslog系统调用上的进程,或者正在读取 /proc/kmsg 的进程。

    请注意,直接读/proc/kmsg ,消息读后不会保留, 而syslog 读完数据,数据不会被消费掉。

     

    开启及关闭消息

    【编程技巧】 可个别或全局的开关printk语句

     

    速度限制

    不应该在正常情况下打印消息,只打印异常信息。

     

    愚蠢的进程才会,遇到失败,不停尝试,同时无休止的打印出错信息。

    应该设置一个标志位,确保出错信息只打印一次。应该使用  printk_ratelimit() 函数

     

    打印设备编号

    注意,只有遇到行结束符,printk 才会输出信息到控制台。

     

    通过查询调试

    因处理调试信息而引起系统变慢是不希望的,可以在 /etc/syslogd.conf 日志文件中对应项加上减号‘-’来解决。

    为什么?

     

    使用/proc文件系统

    /proc下面的每个文件都绑定一个内核函数。用户读取这个文件时,该函数动态的生成文件的内容。

     

    我们不建议在/proc下增加文件,而是应该通过sysfs来向外界导出信息。

    为什么?

     

    在/proc中实现文件

    为创建一个/proc文件,驱动程序必须实现下面这个函数

    int (*read_proc)()

     

    【理解对 read_proc 的介绍 p87 】

     

    不应该再使用 int (*get_info)() 因为已过时,且很可能在未来被取消。

     

    创建自己的/proc文件

    一旦定义好了一个read_proc 函数,就需要通过下面这个函数把它与一个/proc入口项连接起来。

    create_proc_read_entry

     

    卸载模块时,调用

    remove_proc_entry

     

    【理解 /proc 文件的不足, p89】

     

    seq_file 接口

    【没读懂 p90-93】

     

    ioctl 方法

    作为替代/proc文件的方法,我们可以转为调试涉及若干iotcl 命令。

    使用 ioctl 的缺点是,必须另写一个程序来调用这个函数。

    优点是,速度比读/proc快。同时就算调试被禁止之后,ioctl 命令还可以工作,唯一的代价是模块会大一些。

     

    通过监视调试

    strace命令是个功能非常强大的工具,它可以显示由用户空间所发出的所有系统调用。

    【学会】

     

    调试系统故障

    如果看到说明系统故障的消息时,最好的办法是重启。

     

    oops消息

    【学会分析】

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值