内核文件权限值 S_IRUGO=S_IRUSR | S_IRGRP | S_IROTH


创建一个 proc 文件
根据对 proc 文件的不同使用,内核提供了多种包装函数来创建一个 proc 文件。

方法一:
struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, struct proc_dir_entry *parent)
这是最直接,包装最少的创建方法。
参数 name 是要创建的 proc 文件名。 mode 是该文件权限值,例如 S_IRUGO ,可传入0表示采用系统默认值。parent 指定该文件的上层 proc 目录项,如果为 NULL,表示创建在 /proc 根目录下。
create_proc_entry() 完成的任务主要包括:检测 mode 值,分配 proc_dir_entry 结构,注册 proc_dir_entry。

mode_t 是文件权限值。定义在 src/include/stat.h中。
  1. #define S_IFMT 00170000
  2.   13#define S_IFSOCK 0140000
  3.   14#define S_IFLNK 0120000
  4.   15#define S_IFREG 0100000
  5.   16#define S_IFBLK 0060000
  6.   17#define S_IFDIR 0040000
  7.   18#define S_IFCHR 0020000
  8.   19#define S_IFIFO 0010000
  9.   20#define S_ISUID 0004000
  10.   21#define S_ISGID 0002000
  11.   22#define S_ISVTX 0001000
  12.   23
  13.   24#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
  14.   25#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
  15.   26#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
  16.   27#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
  17.   28#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
  18.   29#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
  19.   30#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
  20.   31
  21.   32#define S_IRWXU 00700
  22.   33#define S_IRUSR 00400
  23.   34#define S_IWUSR 00200
  24.   35#define S_IXUSR 00100
  25.   36
  26.   37#define S_IRWXG 00070
  27.   38#define S_IRGRP 00040
  28.   39#define S_IWGRP 00020
  29.   40#define S_IXGRP 00010
  30.   41
  31.   42#define S_IRWXO 00007
  32.   43#define S_IROTH 00004
  33.   44#define S_IWOTH 00002
  34.   45#define S_IXOTH 00001
  35.   46
  36.   47#endif
  37.   48
  38.   49#ifdef __KERNEL__
  39.   50#define S_IRWXUGO (S_IRWXU|S_IRWXG|S_IRWXO)
  40.   51#define S_IALLUGO (S_ISUID|S_ISGID|S_ISVTX|S_IRWXUGO)
  41.   52#define S_IRUGO (S_IRUSR|S_IRGRP|S_IROTH)
  42.   53#define S_IWUGO (S_IWUSR|S_IWGRP|S_IWOTH)
  43.   54#define S_IXUGO (S_IXUSR|S_IXGRP|S_IXOTH)
这里的 S_IRUGO=(S_IRUSR|S_IRGRP|S_IROTH)
S_IRUSR:用户读  00400
S_IRGRP:用户组读 00040
S_IROTH: 其他读 00004
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux设备驱动程序学习(0)-Hello, world!模块 Linux设备驱动程序学习(0) -Hello, world!模块 一个学习Linux设备驱动程序都会碰到的第一个例程: #include #include MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "Hello, Tekkaman Ninja !\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Goodbye, Tekkaman Ninja !\n Love Linux !Love ARM ! Love KeKe !\n"); } module_init(hello_init); module_exit(hello_exit); 我将其复制到我的工作目录,并编写了一个简单的Makefile文件: KERNELDIR = /home/tekkaman/working/SBC2440/linux-2.6.22.2 # The current directory is passed to sub-makes as argument PWD := $(shell pwd) INSTALLDIR = /home/tekkaman/working/rootfs/lib/modules CROSS_COMPILE =/home/tekkaman/working/crosstool-gcc410-k26222/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu- CC = $(CROSS_COMPILE)gcc obj-m := hello.o modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules modules_install: cp hello.ko $(INSTALLDIR) clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions .PHONY: modules modules_install clean 说实话,以上是我参考了《Linux设备驱动程序(第3版)》的Makefile源码修改得来的。我对Makefile不是很了解,是该好好学习学习了! 然后就是make modules 、 make modules_install 。 [root@Tekkaman-Ninja Helloworld]# make modules make -C /home/tekkaman/working/SBC2440/linux-2.6.22.2 M=/home/tekkaman/working/Linuxdriver/Helloworld modules make[1]: Entering directory `/home/tekkaman/working/SBC2440/linux-2.6.22.2' CC [M] /home/tekkaman/working/Linuxdriver/Helloworld/hello.o Building modules, stage 2. MODPOST 1 modules CC /home/tekkaman/working/Linuxdriver/Helloworld/hello.mod.o LD [M] /home/tekkaman/working/Linuxdriver/Helloworld/hello.ko make[1]: Leaving directory `/home/tekkaman/working/SBC2440/linux-2.6.22.2' [root@Tekkaman-Ninja Helloworld]# make modules_install cp hello.ko /home/tekkaman/working/rootfs/lib/modules [root@Tekkaman-Ninja Helloworld]# 在我的开发板上的操作: [Tekkaman2440@SBC2440V4]#cd /lib/modules/ [Tekkaman2440@SBC2440V4]#ls cs89x0.ko hello.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值