Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 系统调用教程-Hello World_C_Linux_Linux Kernel_Operating System_Kernel - Fatal编程技术网

C 系统调用教程-Hello World

C 系统调用教程-Hello World,c,linux,linux-kernel,operating-system,kernel,C,Linux,Linux Kernel,Operating System,Kernel,我无法更新我的内核消息。我想我可能损坏了我的内核,因为内核警报消息似乎没有更新 我调用了“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) { pr

我无法更新我的内核消息。我想我可能损坏了我的内核,因为内核警报消息似乎没有更新

我调用了“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;
}
#包括
#包括
asmlong sys_helloworld(void)
{
printk(KERN_ALERT“为什么现在不工作?”);
返回0;
}
它仍然打印: 1月20日18:35:25 cu cs虚拟机内核:[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;
}
#包括
#包括
int main(){
int-id;
id=系统调用(318);
printf(“应打印出零:%d\n”,id);
返回0;
}

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

您已经让它工作了,所以您的代码不是问题所在,问题在于您的内核安装或版本控制
insmod
如果版本不更新,则不会覆盖它。在安装新安装(
insmod
)或升级版本之前,请完全删除旧安装(
rmmod

甚至手册页也建议使用
modprobe
。也许你应该试一试,这很容易

当然,使用
modprobe
您可以简单地给它一个
——强制它忽略大量的版本检查。但是,您需要的是
-v
选项,以便查看有关模块被拒绝原因的错误


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

是否使用modprobe重新加载了模块?我对modprobe不是很熟悉,但我的问题是我不知道是哪个模块导致了问题。不确定要重新加载哪个模块。请确保已使用
rmmod
卸载先前加载的模块,然后使用
insmod
插入最近编译的模块。您是如何编译和安装
helloworld.c
modprobe
(如果您提供了.ko文件的路径,请使用
insmod/rmod
)在开发内核模块时,这是必须的。您编写一个模块,编译它,然后使用
modprobe/insmod
注册它,当重新加载时,必须调用
modprobe-r
(或rmmode)。