linux标准的打印函数是printk。

#define KERN_EMERG "<0>"
#define KERN_ALERT "<1>"
#define KERN_CRIT "<2>"
#define KERN_ERR "<3>"
#define KERN_WARNING "<4>"
#define KERN_NOTICE "<5>"
#define KERN_INFO "<6>"
#define KERN_DEBUG "<7>"

通过proc文件系统,可以动态调整printk的打印级别。

#cat /proc/sys/kernel/printk
4 4 1 7

分别是
current log level,当前打印级别,如果优先级高于此级别,就打印出去。通常设置为4.等于或者低于4级,不会被打印。
default log level,默认的printk的打印级别,如果调用printk时,没有指定消息前导字符串,那么就添加默认的等级前导字符串。通常设置为4.
min log level value,可以被设置的最小值,一般为1。
default console log level,默认的console log的打印级别,如果没有通过proc文件系统修改打印级别,那么默认的打印级别就从这个参数项中提取。通常设置为7。

#echo 8 > /proc/sys/kernel/printk

将使得current log level 被设置为8 ,即,高于8的消息都可以被打印,DEBUG是7,所以这时候可以被打印出来。

在驱动开发时,通常使用了封装了printk的宏。

#define dev_printk(level, dev, format, arg...) \printk(level "%s %s:" format, dev_driver_string(dev), (dev)->bus_id, ##arg)#define dev_dbg(dev, format, arg...) \dev_printk(KERN_DEBUG, dev, format, ##arg)
#define dev_err(dev, format, arg...) \dev_printk(KERN_ERR, dev, format, ##arg)
#define dev_info(dev, format, arg...) \dev_printk(KERN_INFO, dev, format, ##arg)
#define dev_warn(dev, format, arg...) \dev_printk(KERN_WARNING, dev, format, ##arg)
#define dev_notice(dev, format, arg...) \dev_printk(KERN_NOTICE, dev, format, ##arg)

printk不是直接向console发送数据,而是把数据先写入buffer。等到console被初始化之后,再发送给console。
所以,通常要选择earlyprintk。然后在bootargs中添加earlyprintk参数项。

oops消息,是确定错误的可能原因的重要依据。
oops消息,是机器指令,所以需要转换成更友好的形式。
ksymoops工具用来完成这个工作。

#ksysoops -m System.map < myoops.txt

这个命令将oops信息转换成人类语言格式,并将处理结果输出重定向到txt文件中。
当然,在开发阶段,也可以选择kallsyms选项,让内核可以追溯函数名称,不再打印机器码。但是代价是,符号表被编译到内核中,而且常驻内存。

strace是一个有效的跟踪工具,用来监控Process中调用的SYSCALL。
将strace绑定到一个PID上,就可以监控这个process的SYSCALL行为。
输出的结果,是一系列字符串行,
等式左边表示执行的语句,等式右边表示SYSCALL的返回值。

kernel hacking相关推荐

  1. linux 内核调试 booting the kernel.,Uncompressing Linux...done, booting the kernel解决办法

    u-boot是好的,是刚移植成功的,用其他的内核跑过没问题.所以皇莡-boot传参有问题,问题就是出在我移植的内核上面. 我用的是mini2440的配置,linux2.6.35的内核.网上找了很多资料 ...

  2. arm linux内核调试,kgdb在ARM开发板上调试kernel成功

    大概几个注意点: 1.公版的Linux需要打kgdb补丁的,kgdb官方那边可能不支持新版本的内核(我的是2.6.18),可以在下面的网址找到,但是ARM上调试需要打哪些补丁,不是很清楚,网上的几篇中 ...

  3. linux上的定时器上的jiffies,Linux kernel -- 定时器/jiffies

    0. 测试环境 Linux 2.6.39 AT91SAM9G45 1. 定时器简单的测试例子 #include #include MODULE_LICENSE("GPL"); st ...

  4. linux 4 内核 c,4. 使代码正确 — The Linux Kernel documentation

    4.2.代码检查工具¶ 至少目前,编写无错误代码仍然是我们中很少人能达到的理想状态.不过,我们希望做 的是,在代码进入主线内核之前,尽可能多地捕获并修复这些错误.为此,内核开发人 员已经组装了一系列令 ...

  5. pt-slot.php,Pwn In Kernel(一):基础知识

    Kernel Pwn In CTF 简单分析一下 CTF Kernel Pwn 题目的形式,以 2017 CISCN babydrive 为例. 先对文件包解压➜ example ls babydri ...

  6. Kernel space lock contention配置及其使用

    概述 本文涉及到的内容如下: kernel lock相关debug方式,比如lock耗时,拿不到lock,lock依赖等等 trace的使用 1.开启lock contenttion涉及到的confi ...

  7. uboot 引导linux内核 参数mem=size,Uncompressing Linux..... done, booting the kernel.

    内核启动卡在Uncompressing Linux..... done, booting the kernel.这好像是个老生常谈的问题了.成因在网上也罗列了很多种,可这次我碰到的,却没百度出解决方法 ...

  8. i.MX arm 3.12.28 Kernel Configuration

    #make menucofig画面 General setup  --->                                                 通用选项设置 │ │ ...

  9. 【kernel exploit】CVE-2022-2588 Double-free 漏洞 DirtyCred 利用

    影响版本:Linux v3.17 (commit) ~v5.19.1. v5.19.2已修补. 测试版本:Linux-5.19.1 exploit及测试环境下载地址-https://github.co ...

最新文章

  1. Aspose.Cells小实例
  2. dsst跟踪算法源码分析
  3. Mysql介绍与安装LinuxmacOS系统
  4. 任务平均分配的小算法
  5. JsonHelper Json转xml,Json转DataSet,DataSet转Json
  6. python的输出语句_python 中简单的输出语句
  7. IT研发测试类笔试(第一篇
  8. 附件在线预览控件实现的市场调研
  9. OpenBSD6.3系统安装记录
  10. 画PCB必备的3D元器件模型下载地址整理
  11. 1024这天,马蜂窝程序员选出的最好语言是…
  12. js实现扫雷-算法分析
  13. 学习二叉树必须知道的基本性质
  14. 一个适合初学者的Ant教程
  15. iOS 打开本地或下载excel文件
  16. 自动点击网页脚本---selenium库使用
  17. redis 删除数据,但是占用内存没有下降原因及解决办法
  18. Vmotion迁移要求
  19. 机器视觉光源选型攻略
  20. 已知四点经纬度位置计算球面面积

热门文章

  1. 5G 几年了,高铁信号怎么还是这么差?
  2. 机器学习实战 —— 决策树(完整代码)
  3. 持久化存储系统本版号
  4. 内存占用少的linux桌面,不同桌面环境占用内存/CPU对比
  5. css背景颜色和图片
  6. JavaEE进阶 - Spring Boot 日志文件 - 细节狂魔
  7. 团队管理的四大挑战——留人篇
  8. VS1005 HiRes 高清录音开发板(带显示屏)
  9. 电视红外/蓝牙遥控器键值定义和适配
  10. 构建高并发高可用的电商平台架构实践(一)