http://blogold.chinaunix.net/u1/38038/showart_1359825.html
linux设备驱动调试,我们在内核中看到内核使用dev_dbg来控制输出信息,这个函数的实质是调用printk(KERN_DEBUG )来输出打印信息。要打开这个开关需要下面两步。 1、打开调试开关:你调试的文件中必然包含了<linux/device.h>,或者《linux/paltforam_device.h》,后者包含了前者,在包含此头文件之前,使用#define DEBUG 1 来打开调试开关:例如 #include <linux/kernel.h> #include <linux/init.h> #include <linux/clk.h> #include <linux/module.h> #define DEBUG 1 #include <linux/platform_device.h>
在linux/device.h文件中: #define dev_printk(level, dev, format, arg...) / printk(level "%s %s: " format , dev_driver_string(dev) , (dev)->bus_id , ## arg)
#ifdef DEBUG #define dev_dbg(dev, format, arg...) / dev_printk(KERN_DEBUG , dev , format , ## arg) #else static inline int __attribute__ ((format (printf, 2, 3))) dev_dbg(struct device * dev, const char * fmt, ...) { return 0; } #endif 但是这个打开了之后,也不能顺利的输出信息,原因是printk有默认的信息级别。 linux/kernel文件中 #define KERN_EMERG "<0>" /* system is unusable */ #define KERN_ALERT "<1>" /* action must be taken immediately */ #define KERN_CRIT "<2>" /* critical conditions */ #define KERN_ERR "<3>" /* error conditions */ #define KERN_WARNING "<4>" /* warning conditions */ #define KERN_NOTICE "<5>" /* normal but significant condition */ #define KERN_INFO "<6>" /* informational */ #define KERN_DEBUG "<7>" /* debug-level messages */ 可以看到KERN_DEBUG是级别最低的。
2、修改文件kernel/printk文件 /* printk's without a loglevel use this.. */ #define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */
/* We show everything that is MORE important than this.. */ #define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */ #define DEFAULT_CONSOLE_LOGLEVEL 8 /* anything MORE serious than KERN_DEBUG */ 其中DEFAULT_CONSOLE_LOGLEVEL为终端console输出的最低级别,比这严重的都将输出。原来该值为7,则调试信息无法输出,修改为8则全部有输出。
|
|
|
分享到:
相关推荐
本书是linux设备驱动程序开发领域的权威著作。全书基于2.6内核,不仅透彻讲解了基本概念和技术,更深入探讨了其他书没有涵盖或浅尝辄止的许多重要主题和关键难点,如pcmcia、i2c和usb等外部总线以及视频、音频、...
64 4.2.3 设备实例:导航杆 65 4.2.4 softirq和tasklet 68 4.3 linux设备模型 71 4.3.1 udev 71 4.3.2 sysfs、kobject和设备类 73 4.3.3 热插拔和冷插拔 76 4.3.4 微码下载 76 4.3.5 模块自动加载 77 4.4 ...
Linux内核程序只能使用printk函数输出调试信息。 防止printk函数降低linux驱动性能 Linux驱动只在开发阶段使用printk函数输出消息。正式发布linux驱动是将可能影响性能的printk函数去掉。利用c语言中的编译...
简介 一个通讯测试工具,QSAK(Qt Swiss Army Knife)是一款基于Qt开源框架打造的多功能、跨平台调试工具。...添加原始数据输出选项,方便查看嵌入式设备启动信息 modbus页面tab选项卡添加持久化记录功能
本资源为Linux实验报告,共八次实验,分别为 1、Linux基本命令:远程连接Linux...8、Linux设备驱动:编写一个简单的字符设备驱动、查看设备号、编写测试程序 使用的虚拟机和镜像分别为:VMWare16.2.5、Ubuntu20.04.5
一个通讯测试工具,QSAK(Qt Swiss Army Knife)是一款基于Qt开源框架打造的多功能、跨平台调试工具。...添加原始数据输出选项,方便查看嵌入式设备启动信息 modbus页面tab选项卡添加持久化记录功能
学习编写驱动程序要构建安装自己的内核(标准主线内核)。最重要的原因之一是:内核开发者已经建立了多项用于...但是由于这些功能会造成额外的输出,并导致能下降,因此发行版厂商通常会禁止发行版内核中的调试功能。
其实安装了日志钩子以后,拿到了所有调试打印信息,你完全可以用来存储到数据库+html有颜色区分格式的文件+网络转发输出(尤其适用于嵌入式linux无界面程序,现场不方便外接调试打印的设备)。 做过的这么多项目中,...
第7章 Linux设备驱动程序开发 7.1 设备驱动概述 7.1.1 设备驱动和文件系统的关系 7.1.2 设备类型分类 7.1.3 内核空间和用户空间.. 7.2 设备驱动基础 7.2.1 设备驱动中关键数据结构 7.2.2 字符设备驱动开发 ...
Kgdb除了提供类似的printk函数的日志输出功能,还允许开发人员直接在pc上通过gdb链接目标设备。Kgdb包含了两部分:kgdb内核和一套连接接口。这些接口目前支持串口tty设备连接和以太网连接。其中串口连接需要通过内核...
在嵌入式Linux系统中,有时通过远程(telnet或者ssh)登录到现场设备,想看程序的实时打印的调试信息,需要将输出到串口的调试信息重定向到当前登录的终端界面上。 也可以将程序重新启动到当前终端界面,但是在程序...
dmesg |tail -20查看最后的内核调试信息输出。 2. 加载成功后,可在/dev目录下,看到加载的设备myramblock.使用 mkdosfs /dev/myramblock,初始化虚拟磁盘。 3. 把磁盘挂接到tmp目录下,mount /dev/myramblock /tmp ...
2.4.1 重定向输出 2.4.2 重定向输入 2.4.3 管道 2.5 作为程序设计语言的shell 2.5.1 交互式程序 2.5.2 创建脚本 2.5.3 把脚本设置为可执行 2.6 shell的语法 2.6.1 变量 2.6.2 条件 ...
/TD> Config-HOWTO (16KB) 如何更加快速简便地调试刚安装好的Linux系统。 DNS-HOWTO (22KB) 如何成为一个称职的小型 DNS 管理者. Firewall-HOWTO (20KB) 防火墙和代理伺服器. GCC-HOWTO (33KB) 如何...
本书全面系统地介绍了Red Hat Linux 6。全书共分为五个部分,包括35章和四个附录。第一部分为Red Hat Linux的介绍和安装;第二部分为服务配置;第三部分为系统管理;第四部分为Linux编程;第五部分为附录。本书内容...
2.4.1 重定向输出 2.4.2 重定向输入 2.4.3 管道 2.5 作为程序设计语言的shell 2.5.1 交互式程序 2.5.2 创建脚本 2.5.3 把脚本设置为可执行 2.6 shell的语法 2.6.1 变量 2.6.2...
10.4 进程信息和控制 311 10.4.1 kvm过程 312 10.4.2 ptrace和/proc文件系统 312 10.4.3 Linux下的进程控制 312 10.5 可移植条件编译 313 10.6 补充说明 314 附录 以字母顺序排列的系统调用 315 第四部分 Linux内核...
10.4 进程信息和控制 311 10.4.1 kvm过程 312 10.4.2 ptrace和/proc文件系统 312 10.4.3 Linux下的进程控制 312 10.5 可移植条件编译 313 10.6 补充说明 314 附录 以字母顺序排列的系统调用 315 第四部分 Linux内核...