系统调用教程 - Hello World

时间:2015-01-21 01:45:47

标签: c linux linux-kernel operating-system kernel

我无法更新内核消息。我想我可能已经破坏了我的内核,因为KERN ALERT消息似乎没有更新。

我调用了“dmesg”命令,这就是显示的内容:

Jan 20 18:18:59 cu-cs-vm kernel: [29194.126766] hello world

但在更新helloworld.c后:

#include <linux/kernel.h>
#include <linux/linkage.h>

asmlinkage long sys_helloworld(void)
{
 printk(KERN_ALERT "Why isn't this working now???");
 return 0;
}

它仍会打印: 1月20日18:35:25 cu-cs-vm内核:[30178.146268]你好世界

这是我测试它的脚本:

#include <unistd.h>
#include <stdio.h>

int main(){
    int id;
    id = syscall(318);
    printf("should print out zero: %d\n", id);
    return 0;
}

printf打印0而不是-1,这很好,但为什么内核消息不会从“hello world”更新为“为什么现在不能正常工作???”我已经重新编译了。如果有人有任何想法,如果你能与我分享,我将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

你有它工作,所以你的代码不是问题,问题是你的内核安装或版本控制。如果版本不是新版本,insmod将不会覆盖它。在安装新安装(rmmod)之前完全删除旧安装(insmod)或颠倒版本。

http://linux.die.net/man/8/rmmod

http://linux.die.net/man/8/insmod

即使是手册页也建议使用modprobe。也许你应该尝试一下,它很容易。

http://linux.die.net/man/8/modprobe

当然使用modprobe,你可以简单地给它一个--force来忽略很多版本检查。但是,您需要的是-v选项,以便您可以查看有关模块被拒绝的错误。

如果内核已加载/缓存,系统可能还需要重启。