【发布时间】:2015-03-19 10:39:30
【问题描述】:
我无法更新内核消息。我想我的内核可能已经损坏,因为 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] hello world
这是我的测试脚本:
#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”更新为“为什么现在这不起作用???”我已经重新编译了。如果有人有任何想法,如果你能与我分享,我将不胜感激。谢谢!
【问题讨论】:
-
您是否使用 modprobe 重新加载了模块?
-
我对 modprobe 不是很熟悉,但我的问题是我不知道是哪个模块导致了问题。不确定要重新加载哪一个。
-
确保你已经使用
rmmod卸载了之前加载的模块,然后使用insmod插入了最近编译的模块 -
你是如何编译并安装你的
helloworld.c的? -
modprobe(如insmod/rmod,如果您提供.ko 文件的路径)是开发内核模块时的必须。你编写一个模块,编译它,然后使用modprobe/insmod注册它,重新加载时,必须调用modprobe -r(或rmmode)。
标签: c linux linux-kernel operating-system kernel