2015-01-21 48 views
0

我在更新内核消息时遇到了问题。我想我可能已经损坏了我的内核,因为KERN ALERT消息似乎没有更新。系统调用教程 - Hello World

我所谓的 “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铜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”更新为“为什么现在不工作?”我已重新编译。如果有人有任何想法,我会很感激,如果你可以与我分享。谢谢!

+0

您是否使用modprobe重新加载了模块? – 2015-01-21 02:43:16

+0

我对modprobe不是很熟悉,但是我的问题是我不知道哪个模块导致了问题。不确定要重新加载哪一个。 – user2998285 2015-01-21 03:06:47

+1

确保已经使用'rmmod'卸载了以前加载的模块,然后使用'insmod'插入最近编译的模块。 – 2015-01-21 04:44:26

回答

0

你有它的工作,所以你的代码不是问题,问题是你的内核安装或你的版本。如果版本不是较新的,那么insmod将不会覆盖它。在安装新版本(insmod)之前,完全删除旧版本(rmmod)或对版本进行冲击。

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选项,因此您可以查看有关模块被拒绝原因的错误。

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