【GEC6818开发板】Linux驱动中printk无法在终端输出显示

简介: 【GEC6818开发板】Linux驱动中printk无法在终端输出显示

一、开始效果

示例代码

#include <linux/module.h>
#include <linux/printk.h>

static int __init gec6818led_init(void)
{
  printk("gec6818led_init\n");
  return 0;
}

static void __exit gec6818led_exit(void)
{
  printk("gec6818led_exit\n");
}

module_init(gec6818led_init);
module_exit(gec6818led_exit);

MODULE_AUTHOR("gec.xsc");
MODULE_DESCRIPTION("GEC6818 Led Driver");
MODULE_LICENSE("GPL");

将此代码make后,生成的.ko文件下载到开发板中,执行insmod命令后无法输出显示调试效果。


二、原因

为了保证开发板程序在运行时,能够正常打印输出的信息,那么,要保证程序中设置输入的等级在高于控制台输出信息的等级。

当前开发板控制台输出信息的等级如下:

[root@GEC6818 /proc/sys/kernel]#cat printk

7 7 1 7

内核源码中的等级如下:

1 #define KERN_EMERG "<0>" /* system is unusable */
2 #define KERN_ALERT "<1>" /* action must be taken immediately */
3 #define KERN_CRIT "<2>" /* critical conditions */
4 #define KERN_ERR "<3>" /* error conditions */
5 #define KERN_WARNING "<4>" /* warning conditions */
6 #define KERN_NOTICE "<5>" /* normal but significant condition */
7 #define KERN_INFO "<6>" /* informational */
8 #define KERN_DEBUG "<7>" /* debug‐level messages */

数字越大,等级越低

目前内核源码中的等级设置如下

int console_printk[4] = {
DEFAULT_CONSOLE_LOGLEVEL, /* console_loglevel */ ‐‐‐>7
DEFAULT_MESSAGE_LOGLEVEL, /* default_message_loglevel */‐‐> 7
MINIMUM_CONSOLE_LOGLEVEL, /* minimum_console_loglevel */ ‐‐‐>1
DEFAULT_CONSOLE_LOGLEVEL, /* default_console_loglevel */‐‐‐>7
};
#define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */
/* printk's without a loglevel use this.. */‐‐‐>如果printk函数没有设置日志等级,
则使用该等级
#define DEFAULT_MESSAGE_LOGLEVEL CONFIG_DEFAULT_MESSAGE_LOGLEVEL
CONFIG_DEFAULT_MESSAGE_LOGLEVEL‐‐‐‐>他们是内核进行配置时,可以进行重新配置


三、解决方法

方法一

在写程序时,给printk函数设置一个日志等级,具体使用如下:

printk(KERN_WARNING "%s: Open Error,retrying at different ringspeed\n", dev‐>name);

方法二:(不推荐)

重写进行内核配置默认的日志等级

CONFIG_DEFAULT_

方法三

还可以直接在开发板上,重新设置printk等级,将它写入到配置文件(/etc/profile)中

echo 7 4 1 7 > /proc/sys/kernel/printk

最后重启开发板生效


四、最终效果

相关文章
|
23天前
|
Shell Linux API
C语言在linux环境下执行终端命令
本文介绍了在Linux环境下使用C语言执行终端命令的方法。首先,文章描述了`system()`函数,其可以直接执行shell命令并返回结果。接着介绍了更强大的`popen()`函数,它允许程序与命令行命令交互,并详细说明了如何使用此函数及其配套的`pclose()`函数。此外,还讲解了`fork()`和`exec`系列函数,前者创建新进程,后者替换当前进程执行文件。最后,对比了`system()`与`exec`系列函数的区别,并针对不同场景推荐了合适的函数选择。
|
1月前
|
Java Linux API
Linux设备驱动开发详解2
Linux设备驱动开发详解
26 6
|
1月前
|
消息中间件 算法 Unix
Linux设备驱动开发详解1
Linux设备驱动开发详解
28 5
|
1月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
1月前
|
Ubuntu NoSQL Linux
Linux内核和驱动
Linux内核和驱动
17 2
|
1月前
|
存储 安全 Linux
|
1月前
|
数据采集 Linux
Linux源码阅读笔记20-PCI设备驱动详解
Linux源码阅读笔记20-PCI设备驱动详解
|
2月前
|
存储 JSON Linux
|
1月前
|
NoSQL Linux 开发工具
Linux终端革命:掌握这些命令,让工作速度飞跃提升!
本文介绍了Linux命令行操作效率提升的关键技巧,包括光标移动快捷键、Vim编辑器的高效使用、快速切换目录、跨服务器文件拷贝等。通过掌握`Ctrl + a`、`Ctrl + e`等快捷键可加快命令编辑;Vim的`:set nu`、`:20`等命令能提升文本编辑速度;`cd -`命令可在最近访问过的目录间快速切换;利用`nc`或`python -m SimpleHTTPServer`可实现在无密码权限时的文件传输。这些技巧帮助用户提高工作效率,简化日常工作流程。
64 1
|
24天前
|
Linux API
Linux里的高精度时间计时器(HPET)驱动 【ChatGPT】
Linux里的高精度时间计时器(HPET)驱动 【ChatGPT】