为什么要为内核模块开发中声明的每个变量指定权限属性?

bit*_*ter 3 kernel kernel-module linux-kernel

虽然我们在全局命名空间中定义了这些变量,但为什么我们需要为声明的每个变量显式指定权限.或者我的思维方式完全错了?

int number = 100; module_param(number, int , 0); // module_param(variable_name, variable_type , permissions);

权限属性中的"0"实际上是什么意思?

Roo*_*nix 8

此权限标记值控制谁可以访问sysfs中模块参数的表示形式.如果perm设置为0,则根本没有sysfs条目; 否则,它出现在具有给定权限集的/ sys/module下.

S_IRUGO用于可由世界读取但无法更改的参数;

S_IRUGO | S_IWUSR允许root更改参数.请注意,如果sysfs更改了参数,则模块看到的该参数的值会更改,但不会以任何其他方式通知您的模块.您可能不应该使模块参数可写,除非您准备检测更改并做出相应的反应.

perm = 0的参数的唯一用途是你可以在模块加载时设置它,就是这样.

如果要覆盖默认权限0,我需要显式指定每个变量的权限.