我在尝试运行非常简单的代码时遇到了一些麻烦,找不到可能是什么原因。
我得到
操作不允许
尝试从.ko
文件(KO_NAME)安装Linux内核模块。
这是代码的摘录:
if (strcmp(argv[1], "-init")==0) {
fd=open(KO_NAME, O_RDONLY|O_CLOEXEC);
if (fd<0) {
perror("Error");
printf("Error number: %dn", errno);
} else {
printf("fd: %dn", fd);
}
uid=getuid();
if (uid!=ROOT_UID) {
printf("Error: not rootn");
return -1;
}
if (access(KO_NAME, F_OK)==-1) {
printf("Error: File "%s" doesn't existn", argv[2]);
return -1;
}
rc=syscall(__NR_finit_module, fd, "", 0);
close(fd);
if (rc!=0) {
perror("Error");
printf("rc=%dn", rc);
printf("Error number: %dn", errno);
}
这是运行时的结果:
fd: 3
rc=-1
Error number: 1
为什么我会遇到错误 number 1
?
操作不允许
我也没有"允许操作"安装Linux内核的错误。我正在运行Sophos Anti-Virus,其中有一个已知的错误。"创建文件延迟的30延迟和"操作不允许"使用Fanotify和CIFS - 这是一个内核问题,Sophos正在与Linux社区合作解决此问题"
要解决这个问题,我以前禁用Sophos-av,并在每个Linux内核安装后启用它。我只在Linux内核安装期间而不是在常见更新中遇到了这个问题。
sudo /opt/sophos-av/bin/savdctl disable
运行更新管理器并安装Linux内核。
sudo /opt/sophos-av/bin/savdctl enable
内核模块只能由默认用户访问。因此,在insmod
之后,您必须使用root用户打开设备文件。
因此,您必须使用sudo
打开文件。