有一个人写的很好借来用一下
printk无输出
Q:
int init_module()
{
printk("Hello\n");
}
编译成功后,也用insmod命令成功地载入。但并没有任何输出..
A:
1.同时在另一个窗口,用命令tail -f /var/log/messages察看日志文件,会看到log
2.用dmesg命令。
它的输出是在内核log中,不是控制台
-----------------------------------------------------
printk()函数的总结
我们在使用printk()函数中使用日志级别为的是使编程人员在编程过程中自定义地进行信息的输出,更加容易地掌握系统当前的状况。
对程序的调试起到了很重要的作用。
(下文中的日志级别和控制台日志控制级别是一个意思)
printk(日志级别 "消息文本");这里的日志级别通俗的说指的是对文本信息的一种输出范围上的指定。
日志级别一共有8个级别,printk的日志级别定义如下(在linux26/includelinux/kernel.h中):
#defineKERN_EMERG"<0>"/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/
#defineKERN_ALERT"<1>"/*报告消息,表示必须立即采取措施*/
#defineKERN_CRIT"<2>"/*临界条件,通常涉及严重的硬件或软件操作失败*/
#defineKERN_ERR"<3>"/*错误条件,驱动程序常用KERN_ERR来报告硬件的错误*/
#defineKERN_WARNING"<4>"/*警告条件,对可能出现问题的情况进行警告*/
#defineKERN_NOTICE"<5>"/*正常但又重要的条件,用于提醒。常用于与安全相关的消息*/
#defineKERN_INFO"<6>"/*提示信息,如驱动程序启动时,打印硬件信息*/
#defineKERN_DEBUG"<7>"/*调试级别的消息*/
没有指定日志级别的printk语句默认采用的级别是 DEFAULT_ MESSAGE_LOGLEVEL(这个默认级别一般为<4>,即与KERN_WARNING在一个级别上),其定义在linux26/kernel/printk.c中可以找到。 0~3的等级可以再终端输出
下面是一个比较简单的使用
printk(KERN_INFO "INFO\n"); //这里可以使用数字代替 KERN_INFO,即可以写成printk(<6> "INFO\n");
在这个格式的定义中,日志级别和信息文本之间不能够使用逗号隔开,因为系统在进行编译的时候,将日志级别转换成字符串于后面的文本信息进行连接。
在对系统输出进行控制时,主要是讨论控制台和伪终端的输情况,以及系统日志等
相关推荐
printk是Linux内核中的一种日志记录机制,用于记录内核消息,而console指的是内核通过哪个输出设备将这些消息显示出来。8250串口驱动是Linux内核中用于处理早期ISA设备(如PC的串行端口)的标准串口驱动。 首先,...
### 串口驱动分析与Linux终端控制台体系详解 #### 数据通信基础 数据通信主要分为两种形式:**并行通信**与**串行通信**。 - **并行通信**:利用多条数据线同时传输数据的每一位。其优点在于传输速度较快,但由于...
该指南由正点原子编著,旨在帮助开发者深入理解Linux驱动程序的原理与实践,提高在嵌入式Linux平台上的硬件驱动开发能力。I.MX6U是NXP(恩智浦)公司推出的一款高性能、低功耗的处理器,广泛应用于各种嵌入式设备,...
Linux终端tty设备驱动编程涉及Linux操作系统中终端设备的驱动开发,这些设备包括控制台、串行端口终端和伪终端。终端设备在Linux中是字符型设备,主要承担用户与系统交互的作用。Linux系统中终端设备的种类较多,...
在Linux驱动开发中,`printk`函数是内核日志功能的一部分,常用来输出调试信息。`hello_printk`文件中的主要任务可能是注册和注销驱动,以及在注册时向系统日志打印一条消息。例如,驱动程序可能会包含以下关键函数...
`printk`是内核中的打印函数,用于在控制台输出信息。它可以用来调试模块或记录日志。 **2.3 模块传参——module_param** `module_param`允许向内核模块传递参数。这使得用户可以在加载模块时提供配置选项,增加了...
1. **日志记录**:利用 printk() 函数输出调试信息到内核日志。 2. **性能分析**:使用工具如 perf 和 ftrace 对驱动程序的性能进行分析。 3. **代码审查**:定期进行代码审查,确保代码质量并提高可维护性。 4. **...
通过以上内容的学习,我们不仅了解了嵌入式Linux驱动开发的基本概念,而且还通过一个具体的GPIO驱动实例深入地理解了驱动开发的过程和技术细节。这为后续更复杂的驱动开发打下了坚实的基础。在实际项目中,开发者还...
字符设备驱动是Linux设备驱动的一种类型,用于处理类似串行端口、终端等字符流设备。字符设备驱动通常包括以下组件: - **文件操作接口**:提供一组标准文件操作函数,如`read`、`write`、`open`、`close`等。 - **...
### Linux驱动开发庖丁解牛知识点总结 #### 1. Linux驱动开发庖丁解牛之一——开发环境的建立 **核心知识点:** - **Linux内核架构:** 理解Linux内核的整体架构非常重要,这有助于开发者了解驱动程序在整个系统...
对于初学者而言,理解这些基础知识是深入学习Linux驱动开发的前提。通过上述内容的学习,开发者可以更好地掌握如何编写高效的驱动程序,并且能够更加熟练地使用Linux内核提供的各种API。此外,还介绍了模块的初始化...
### Linux下PCI设备驱动程序开发相关知识点 ...通过以上介绍,可以了解到PCI总线的基本概念、Linux驱动程序框架以及如何编写和编译PCI驱动程序。这些知识对于从事Linux底层开发的工程师来说至关重要。
根据提供的文件信息,我们...综上所述,《Linux设备驱动程序(中文第三版)》这本书详细介绍了Linux设备驱动程序的基础理论、开发实践及调试技巧等内容,对于想要深入学习Linux驱动开发的人来说是一本不可多得的好书。
在Linux设备驱动的设计中,“机制与策略”的区分是非常重要的。机制关注于硬件的操作和实现细节,而策略则侧重于如何使用这些硬件功能。一个好的驱动程序应该明确地区分这两者,使得驱动本身更加灵活,能够适应不同...
对于开发者而言,掌握Linux驱动开发是深入理解操作系统工作原理、提升软件开发能力的重要途径之一。本文将详细介绍Linux程序设计中的驱动程序部分,特别是字符驱动与块设备驱动的相关概念和技术要点。 #### 字符...
字符设备文件主要用于处理没有固定长度的数据,如终端、串口等;而块设备文件用于处理固定大小的数据块,如硬盘、光盘等。 - **使用**:通过 `open()` 函数打开设备文件,然后使用 `read()` 和 `write()` 进行数据的...
下面是一个简单的字符设备驱动程序示例,该程序虽然没有实现具体的功能,但可以帮助理解Linux设备驱动程序的基本框架和工作原理。 ```c #define __NO_VERSION__ #include <linux/modules.h> #include <linux/...