浅谈调试内核

调试内核感觉很麻烦,在网上搜到的帖子倒是多,大多数都是复制粘贴过来,一搜一大堆,浪费大把的时间,简直就是在坑害人。其实我自己在这方面也不是很懂的。但是解决自己的这个问题,还是有点收获的。

在这之前要先谈一下printf和printk之间的区别:

printf 很容易理解,用户层函数,将字符打印到控制台上。

  printk,内核层函数,内核会根据日志级别,可能把消息打印到当前控制台上,这个控制台通常是一个字符模式的终端、一个串口打印机或是一个并口打印机。这些消息正常输出的前提是──日志输出级别小于console_loglevel(在内核中数字越小优先级越高)。

  没有指定日志级别的printk语句默认采用的级别是 DEFAULT_ MESSAGE_LOGLEVEL(这个默认级别一般为<4>,即与KERN_WARNING在一个级别上),其定义在linux26/kernel/printk.c中可以找到

  日志级别一共有8个级别,printk的日志级别定义如下(在include/linux/kernel.h中):

  #define KERN_EMERG 0/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/

  #define KERN_ALERT 1/*报告消息,表示必须立即采取措施*/

  #define KERN_CRIT 2/*临界条件,通常涉及严重的硬件或软件操作失败*/

  #define KERN_ERR 3/*错误条件,驱动程序常用KERN_ERR来报告硬件的错误*/

  #define KERN_WARNING 4/*警告条件,对可能出现问题的情况进行警告*/

  #define KERN_NOTICE 5/*正常但又重要的条件,用于提醒*/

  #define KERN_INFO 6/*提示信息,如驱动程序启动时,打印硬件信息*/

  #define KERN_DEBUG 7/*调试级别的消息*/

在程序中可以添加调试语句(终端打印调试)

printk(KERN_NOTICE "DevilBios hahahhahahahhahahahahahahah\n");

先改一下控制台级别:

 通过读写/proc/sys/kernel/printk文件可读取和修改控制台的日志级别。查看这个文件的方法如下:

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

  上面显示的4个数据分别对应控制台日志级别、默认的消息日志级别、最低的控制台日志级别和默认的控制台日志级别。

  可用下面的命令设置当前日志级别:

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

这样理论什么都是可以打印到控制台上面去了。

但是当我们 insmod XXX.ko 的时候并没有什么现象产生:

接下来再学一个Linux命令:dmesg

dmesg用来显示开机信息,将kernel里的信息显示到控制台上,同理,我改变Linux里kernel内容,添加调试语句,那么调试语句也会打印到控制台 上。

dmesg用法:

-c

当完成打印显示后清除环缓冲内的内容。

-s 缓冲区大小

定义一个大小为"缓冲区大小"的缓冲区用于查询内核环缓冲区。默认大小为 8196(此大小与 2.0.33 和 2.1.103 内核的默认syslog 缓冲区大小一致),如果你设置了一个大于默认值的环缓冲区,那你就可以用这个选项定义一个相当的缓冲区来查看完整的环缓冲区内容。

-n级别

设置级别为记录控制台启动信息的级别。比如,-n 1指的就是将此级别设为最低级,除了内核恐慌信息之外不会向控制台显示信息。所有级别的启动信息还将记录到/proc/kmsg,文件中,因此,syslogd(8)同样可以用来对信息的输出进行控制。当使用-n选项时,dmesg将不会 清除内核环缓冲区中的内容。当同时使用以上两个选项时,只有最后一个选项才会产生效果

所以,在模块执行的时候,我们在终端里敲下命令dmesg,就可以看到调试语句了。

时间: 2025-01-02 13:53:14

浅谈调试内核的相关文章

(转)浅谈 Linux 内核无线子系统

前言 Linux 内核是如何实现无线网络接口呢?数据包是通过怎样的方式被发送和接收呢? 刚开始工作接触 Linux 无线网络时,我曾迷失在浩瀚的基础代码中,寻找具有介绍性的材料来回答如上面提到的那些高层次的问题. 跟踪探索了一段时间的源代码后,我写下了这篇总结,希望在 Linux 无线网络的工作原理上,读者能从这篇文章获得一个具有帮助性的概览. 1.全局概览 在开始探索 Linux 无线具体细节之前,让我们先来把握一下 Linux 无线子系统整体结构.如图1,展示了 Linux 无线子系统各个模

浅谈 Linux 内核开发之网络设备驱动

网络设备介绍 网络设备是计算机体系结构中必不可少的一部分,处理器如果想与外界通信,通常都会选择网络设备作为通信接口.众所周知,在 OSI(Open Systems Interconnection,开放网际互连)中,网络被划分为七个层次,从下到上分别是物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.我们所讲的网络设备也包括两个层次,一层叫做 MAC(Media Access Control)层,对应于 OSI 的数据链路层:另一层叫做 PHY(Physical Layer)层,对应于物

浅谈移动前端的最佳实践(转)

前言 这几天,第三轮全站优化结束,测试项目在2G首屏载入速度取得了一些优化成绩,对比下来有10s左右的差距: 这次优化工作结束后,已经是第三次大规模折腾公司框架了,这里将一些自己知道的移动端的建议提出来分享下,希望对各位有用 文中有误请您提出,以免误人自误 技术选型 单页or多页 spa(single page application)也就是我们常常说的web应用程序webapp,被认为是业内的发展趋势,主要有两个优点: ① 用户体验好 ② 可以更好的降低服务器压力 但是单页有几个致命的缺点:

浅谈nginx(一)

此文主要介绍nginx的基础知识及其基本配置,一为巩固,二为记录 知识点: nginx的作用 nginx的基本配置框架 nginx一些常用模块介绍 1.什么是nginx     nginx是一款免费的,开源的,高性能的HTTP服务软件,它不仅能     够支持反向代理服务器,而且也能当作IMPA/POP3代理服务.它稳     定, 配置丰富,设置简单,而且占用系统硬件资源少!这些特性     使得它深受广大用户喜欢. 1.1 Nginx的程序架构 Nginx架构: master/worker

浅谈用ModelSim+Synplify+Quartus来实现Altera FPGA的仿真

浅谈用ModelSim+Synplify+Quartus来实现Altera FPGA的仿真 工作内容: Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器.它采用直接优化的编译技术.Tcl/Tk技术.和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件. Synplify.S

[nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体温计.耳温枪.皮肤水分计等), 再到智能家居等领域均占有一席之地. 而蓝牙低功耗(BLE)是在蓝牙4.0协议上修改以适用低功耗应用场景的一种蓝牙协议. 随着上一股智能消费类电子大潮的到来,BLE的各种应用也像雨后春笋般在市场上铺开. 如果想 紧跟蓝牙协议的最新动态 ,可以在https://www.b

【转】浅谈Nginx负载均衡与F5的区别

前言 笔者最近在负责某集团网站时,同时用到了Nginx与F5,如图所示,负载均衡器F5作为处理外界请求的第一道"墙",将请求分发到web服务器后,web服务器上的Nginx再进行处理,静态内容直接访问本地门户,动态数据则通过反向代理指向内网服务. 其实Nginx和F5这两者均可用作网站负载均衡,那二者有什么区别呢?笔者在此浅谈下Nginx与F5的一些区别. 目前很多网站或应用在设计之初都会为高并发的数据请求做负载均衡,不差钱的土豪用户一般会直接买F5硬件设备作为其负载均衡器,原因不用多

浅谈mysql主从复制的高可用解决方案

1.熟悉几个组件(部分摘自网络)1.1.drbd     —— DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID",开源软件,由 LINBIT 公司开发.DRBD 实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中.他是有内核 模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能.也就是说当你将数据写入本地的DRBD设备上的文件系统 时, 数据会同时被发送到网

浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 全Socket层(SSL)等等,目前互联网主要使用它做静态资源服务器,也可以做代理服务器转发请求(如:图片链等),结合tomcat等 servlet容器处理jsp.1.2.ngnix     —— 俄罗斯人开发的一个高性能的 HTTP和反向代理服务器.由于Nginx 超越 Apache 的高性能和稳