浅谈调试内核 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

浅谈调试内核

发表时间:2020-10-19

发布人:葵宇科技

浏览次数:41


调试内核感到很麻烦,在网上搜到的帖子倒是多,大年夜多半都是复制粘贴过来,一搜一大年夜堆,浪费大年夜把的时光,的确就是在坑害人。其实我本身在这方面也不是很懂的。然则解决本身的┞封个问题,照样有点收成的。
在这之前要先谈一下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_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
  #define KERN_ALERT 1/*申报消息,表示必须急速采取办法*/
  膳绫擎显示的4个数据分别对应控制台日记级别、默认的消息日记级别、最低的┞菲握台日记级别和默认的┞菲握台日记级别。
  可用下面的敕令设置当前日记级别:
-c
  # echo 8 > /proc/sys/kernel/printk
然则当我们 insmod XXX.ko 的时刻并没有什么现象产生:
接下来再学一个Linux敕令:dmesg
  dmesg用来显示开机信息,将kernel里的信息显示到控制台上,同理,我改变Linux里kernel内容,添加调试语句,那么调试语句也会打印到控制台 上。
dmesg用法:
当完成打印显示后清除环缓冲内的内容。
如许理论什么都是可以打印到控制台膳绫擎去了。
-s 缓冲区大年夜小
定义一个大年夜小为"缓冲区大年夜小"的缓冲区用于萌芽内核环缓冲区。默认大年夜小为 8196(此大年夜小与 2.0.33 和 2.1.103 内核的默认syslog 缓冲区大年夜小一致),如不雅你设置了一个大年夜于默认值的环缓冲区,那你就可以用这个选项定义一个相当的缓冲区来查看完全的环缓冲区内容。
设置级别为记录控制台启动信息的级别。比如,-n 1指的就是将此级别设为最初级,除了内罕愫信息之外不会向控制台显示信息。所有级其余启动信息还将记录到/proc/kmsg,文件中,是以,syslogd(8)同样可以用来对信息的输出进行控制。当应用-n选项时,dmesg将不会 清除内核环缓冲区中的内容。当同时应用以上两个选项时,只有最后一个选项才会产生效不雅
-n级别
所以,在模块履行的时刻,我们在终妒攀里敲下敕令dmesg,就可以看到调试语句了。

相关案例查看更多