我在更新内核消息时遇到问题。我想我可能已经损坏了我的内核,因为 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”更新为“为什么现在不工作???”我已经重新编译了。如果有人有任何想法,如果您能与我分享,我将不胜感激。谢谢!
最佳答案
你已经让它工作了,所以你的代码不是问题,问题要么是你的内核安装,要么是你的版本控制。如果版本不是较新,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
选项,以便您可以查看有关模块被拒绝原因的错误。
如果内核已加载/缓存,系统可能还需要重新启动。
关于c - 系统调用教程 - Hello World,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28058267/