我写了一个简单的内核模块来学习内核模块的 module_param 特性。但是,如果我为 perm
字段授予 S_IWUGO、S_IRWXUGO
或 S_IALLUGO
权限,我会得到以下编译错误:
[root@localhost param]# make -C $KDIR M=$PWD modules
make: Entering directory `/usr/src/kernels/3.11.10-301.fc20.i686+PAE'
CC [M] /root/ldd/misc/param/param/hello.o
/root/ldd/misc/param/param/hello.c:6:168: error: negative width in bit-field ‘<anonymous>’
module_param(a, int, S_IWUGO);
^
make[1]: *** [/root/ldd/misc/param/param/hello.o] Error 1
make: *** [_module_/root/ldd/misc/param/param] Error 2
make: Leaving directory `/usr/src/kernels/3.11.10-301.fc20.i686+PAE'
S_IRUGO 或 S_IXUGO
编译成功(权限不包含写入权限)。我想我一定做错了什么,因为据我所知,wrtie 许可是合法的。我在这里做错了什么?
程序:
#include<linux/module.h>
#include<linux/stat.h>
int a = 2;
module_param(a, int, S_IXUGO);
int f1(void){
return 0;
}
void f2(void){
}
module_init(f1);
module_exit(f2);
MODULE_AUTHOR("lavya");
MODULE_LICENSE("GPL v2");
MODULE_DESCRIPTION("experiment with parameters");
我是一名优秀的程序员,十分优秀!