模块中printk信息打印到指定文件 终端 网络

转载 2015年07月10日 10:55:49
有的时候调试内核程序,经常要将信息打印到其他地方如指定文件或终端还有网络,  网络的话dreanice版主写过个netconsole我这里就不说了...

1、打印到文件:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/syscalls.h>
#include <asm/unistd.h>
#include <asm/uaccess.h>

#define MY_FILE "/root/LogFile"

char buf[128];
struct file *file = NULL;



static int __init init(void)
{
        mm_segment_t old_fs;
        printk("Hello, I'm the module that intends to write messages to file.\n");


        if(file == NULL)
                file = filp_open(MY_FILE, O_RDWR | O_APPEND | O_CREAT, 0644);
        if (IS_ERR(file)) {
                printk("error occured while opening file %s, exiting...\n", MY_FILE);
                return 0;
        }

        sprintf(buf,"%s", "The Messages.");

        old_fs = get_fs();
        set_fs(KERNEL_DS);
        file->f_op->write(file, (char *)buf, sizeof(buf), &file->f_pos);
        set_fs(old_fs);


        return 0;
}

static void __exit fini(void)
{
        if(file != NULL)
                filp_close(file, NULL);
}

module_init(init);
module_exit(fini);
MODULE_LICENSE("GPL");
 

2、打印到终端:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/tty.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("mq110");
static void print_string(char *str)
{
    struct tty_struct *my_tty;
    my_tty = current->signal->tty;
    if (my_tty != NULL)
    {
        my_tty->driver->write(my_tty,str,strlen(str));
        my_tty->driver->write(my_tty,"\015\013",2);
    }
}
static int __init print_string_init(void)
{
    print_string("Hello world!");
    return 0;
}
static void __exit print_string_exit(void)
{
    print_string("Goodbye world!");
}
module_init(print_string_init);
module_exit(print_string_exit);
 


3.修改一下/etc/syslog.conf 文件
#kern.*       /dev/console

你打印的东西可能是某个级别的信息。比如说debug,这用printk 可以控制 。
那么就写程
kern.debug /var/log/kern_debug.log

-------------------------
printk(KERN_ALERT "Hello, world\n");
对应
/etc/syslog.conf 中的
kern.alert                      /kernel.txt

实验成功,修改后要执行
server syslogd restart 重启日志服务。
此方法等于用日志服务帮你做这个事情。该信息用
dmesg 命令也可以看到。

代码在Centos5.3   2.6.18上测试过了

printk信息打印到指定文件 终端 网络

有的时候调试内核程序,经常要将信息打印到其他地方如指定文件或终端还有网络,  网络的话dreanice版主写过个netconsole我这里就不说了... 打印到文件:     ...
  • yyp872
  • yyp872
  • 2013年06月06日 20:59
  • 1242

printk打印不能显示到终端的解决方法

printk与printf有个不同的地方,就是printk有打印级别 使用printk时,Linux内核根据日志级别,可能把消息打印到当前控制台上,这个控制台是一个字符设备。这些消息从终端输出的前提是...
  • qustDrJHJ
  • qustDrJHJ
  • 2016年05月12日 10:54
  • 3344

如何将内核数据打印到文件

1:内核里 将一段DMA内存里的数据打印到/tmp/LogFile中,用hexdump打开这个文件就可以看到这段内存里的数据了。 DMA操作的是物理地址,往文件里写数据,需要的是数据的虚拟地址。还...
  • u012769691
  • u012769691
  • 2015年07月02日 17:40
  • 842

linux 驱动 Printk 在终端没有输出

写LINUX 驱动的时候 在初始化和退出的时候加了printk 但是在终端没有输出  这个有输出 这个没有 原因是要加上一个输出等级 0~3的等级可以再终端输出 ...
  • WuDingKun
  • WuDingKun
  • 2013年06月10日 09:09
  • 1801

linux内核打印的各种设置-----printk

make menuconfig ---> Kernel hacking --> show timing information on printks
  • sno_guo
  • sno_guo
  • 2013年12月13日 19:19
  • 936

如何在Linux内核中将输出打印到终端

#include #include #include #include #include MODULE_LICENSE("GPL");MODULE_AUTHOR("mq110");static voi...
  • coofive
  • coofive
  • 2006年05月07日 21:47
  • 3473

UNIX下实现终端打印的几种方法

目前,国内银行业大部分计算机应用系统都在UNIX操作系统平台上采用终端业务数据录入、业务数据打印方式进行前端业务处理。笔者将UNIX下实现终端打印的几种方法介绍如下:一、概述UNIX环境下终端打印是在...
  • yanzhidong
  • yanzhidong
  • 2005年03月20日 02:19
  • 790

printk打印到LCD

command_line="initrd=0x30800000,0x440000 root=/dev/ram init=/linuxrc console=tty0"; 这样就可以改变系统的控制台了....
  • Tommy_wxie
  • Tommy_wxie
  • 2013年11月27日 18:46
  • 2394

将运行信息打印日志到文件中

开发程序经常要从控制台当中获取程序运行的情况,最近在开发在服务器端,导师要求要记录好运行信息,包括异常信息,客户连接情况等信息,但控制台观看有种种限制,如窗口过小阅读不方便,或者在服务器上通过命令行运...
  • xu_Melon
  • xu_Melon
  • 2017年09月18日 13:19
  • 424

【Linux内核】Ubuntu下printk函数无法在终端显示

在Ubuntu下使用insmod安装模块的时候,发现预设的调试信息并没有输出,但是使用dmesg命令可以看到在日志中确实有调试信息,下面分析一下可能的情况。 printk信息的输出去向这是在内核的命令...
  • wr132
  • wr132
  • 2017年06月28日 09:16
  • 445
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模块中printk信息打印到指定文件 终端 网络
举报原因:
原因补充:

(最多只允许输入30个字)