【问题标题】:changing kernel of Linux改变Linux内核
【发布时间】:2012-04-28 09:16:20
【问题描述】:

大家,我正在尝试学习如何使用 Linux Red Hat 的内核,我试图从内核中更改一些功能:

/*
 * sys_execve() executes a new program.
 */
asmlinkage int sys_execve(struct pt_regs regs)
{
    int error;
    char * filename;



    filename = getname((char *) regs.ebx);
    error = PTR_ERR(filename);
    if (IS_ERR(filename))
        goto out;

    printk("Hello World!"); // I added this function

    error = do_execve(filename, (char **) regs.ecx, (char **) regs.edx, &regs);
    if (error == 0)
        current->ptrace &= ~PT_DTRACE;
    putname(filename);
out:
    return error;
}

此系统调用执行程序,我的问题是为什么当我在终端中并编写一些函数(例如“日期”)时,我没有收到我的 hello world,提前感谢您的帮助

【问题讨论】:

    标签: linux linux-kernel


    【解决方案1】:

    printk() 应该记录到/proc/kmsg,而syslog(8) 又会读取和记录它。

    【讨论】:

    • 一般内核不会直接写入终端,除了控制台(Ctrl+Alt+F1),甚至只有在系统启动期间。您包括一个日志级别,它是一个包含在字符串开头的<> 中的数字,并让syslogd 决定将其发送到哪里(请参阅syslog.conf(5);这将取决于您的发行版中使用的syslog 包)。不要试图改变这一点或强迫问题;除了令人讨厌之外,还涉及一些有趣的锁定和计时问题(考虑一下如果在写入日志消息的过程中按Ctrl+s 会发生什么)。
    • 我注意到,当我插入或移除 USB 驱动器时,内核或某些守护进程都会写入我的控制台。
    • @Tom:一般是udevd;如上所述,内核将一些信息记录到syslogd,但我认为syslogd 通常不会将这些信息记录到控制台。
    猜你喜欢
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2012-11-18
    • 2016-04-23
    相关资源
    最近更新 更多