当前位置: 首页 > news >正文

网站标题空格做网站模板的网页名称是m开头

网站标题空格,做网站模板的网页名称是m开头,短链接在线生成,百度信息流推广技巧文章目录 1.sysfs#xff08;属性#xff09;文件的创建、读、写1.1 创建流程1.2 open流程1.3 read流程 2.补充2.1 sysfs下常见目录介绍2.2 属性相关2.2.1 简介2.2.2 attribute文件的创建 2.3 sysfs目录如何创建的 1.sysfs#xff08;属性#xff09;文件的创建、读、写 1… 文章目录 1.sysfs属性文件的创建、读、写1.1 创建流程1.2 open流程1.3 read流程 2.补充2.1 sysfs下常见目录介绍2.2 属性相关2.2.1 简介2.2.2 attribute文件的创建 2.3 sysfs目录如何创建的 1.sysfs属性文件的创建、读、写 1.1 创建流程 device_add -》 error device_create_file(dev, dev_attr_dev); 先来看看 dev_attr_dev 的定义 static DEVICE_ATTR_RO(dev); 637 #define DEVICE_ATTR_RO(_name) \638 struct device_attribute dev_attr_##_name __ATTR_RO(_name)定义了一个 device_attribute 实例变量名为 dev_attr_dev __ATTR_RO 定义为 624 ./include/linux/sysfs.h625 #define __ATTR_RO(_name) { \626 .attr { .name __stringify(_name), .mode 0444 }, \627 .show _name##_show, \628 }上面的 .attr 是 struct attribute 类型 继续看 device_create_file(dev, dev_attr_dev); device_create_file - sysfs_create_file(dev-kobj, attr-attr); 参数1是kobject实例参数2是device_attribute下面的attribute实例 526 // sysfs中创建文件接口在kobj对应的目录下创建属性文件 527 static inline int __must_check sysfs_create_file(struct kobject *kobj, 528 const struct attribute *attr) 529 { 530 return sysfs_create_file_ns(kobj, attr, NULL); 531 }sysfs_create_file_ns - sysfs_add_file_mode_ns (主体函数) 在 sysfs_add_file_mode_ns 函数中 假设获取到的 sysfs_ops 为 dev_sysfs_ops 那么struct kernfs_ops ops 为 sysfs_file_kfops_rw 以这个ops 作为参数调用 __kernfs_create_file __kernfs_create_file 创建一个新的 kernfs_node 实例 kn其 parent 为 device.kobj.sd 并设置 kn-attr.ops ops; 就是 sysfs_file_kfops_rw如此在sysfs创立属性对应的文件 bus_create_file和device_create_file类似 1.2 open流程 kernfs_file_fops 这个 file_operation 实例是在哪里赋值的 kernfs_iop_lookup kernfs_dir_iops.lookup kernfs_get_inode kernfs_init_inode 先看open: SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode) do_sys_open(dfd, filename, flags, mode); do_filp_open path_openat do_last do_last 函数中有两个关键调用lookup_open、vfs_open 先看 lookup_open 调用dir_inode-i_op-lookup 对于kernfsdir_inode-i_op 为 kernfs_dir_iops目录ops其 lookup hook 为kernfs_iop_lookup。kernfs_iop_lookup -》 kernfs_get_inode -》 kernfs_init_inode在 kernfs_init_inode 中inode-i_fop kernfs_file_fops;,得到文件操作集。 继续看vfs_open vfs_open -》 do_dentry_open do_dentry_open函数中会执行f-f_op fops_get(inode-i_fop); 将上面inode的fops赋值给file就是 kernfs_file_fops do_dentry_open 下面会执行 806 if (!open) // open 作为入参是NULL807 open f-f_op-open;808 if (open) {809 error open(inode, f);810 if (error)811 goto cleanup_all;812 }会执行到底层 open hook即 kernfs_file_fops的open hookkernfs_fop_open 接下来看 kernfs_fop_open 首先从当前操作文件对应的kernfs_node 实例获取kernfs_ops实例ops kernfs_ops(kn); 就是kn-attr.ops。 在上面创建属性文件的流程中__kernfs_create_file 函数会设置这个ops为 sysfs_file_kfops_rw 回到 kernfs_fop_open会执行如下代码段 703 if (ops-seq_show) 704 error seq_open(file, kernfs_seq_ops); // 设置seq_file的ops在seq_open函数中会从slab缓存控制器里面分配一个 seq_file实例并设置其ops为kernfs_seq_ops并将这个seq_file作为其所属file实例的私有数据 private_data成员。 打开流程就大概分析上面这些主要是为了搞明白file的操作集是怎么来的接下来read和write会调用到什么底层hook 1.3 read流程 接下来看看读流程是怎么调用到最底层的show hook的: SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count) ksys_read(fd, buf, count); vfs_read __vfs_read file-f_op-read由上面的open流程可知f_op为 kernfs_file_fopsread hook 为 kernfs_fop_read kernfs_fop_read seq_read主要是调用 m-op-show在上面的open流程中m-op为kernfs_seq_opsshow hook为 kernfs_seq_show kernfs_seq_show of-kn-attr.ops-seq_show在创建流程中可知为of-kn-attr.ops 为 sysfs_file_kfops_rwseq_show hook为 sysfs_kf_seq_show sysfs_kf_seq_show:先获取当前kernfs_node对应的kobj获取kobj-ktype-sysfs_ops在创建流程中可知为 dev_sysfs_ops再调用其 show hook为 dev_attr_show dev_attr_show由 attribute实例 找到 device_attribute 实例再调用其show hook dev_attr-show 上面 dev_attr-show 这个hook可以通过 DEVICE_ATTR_RO 来定义通过 device_create_file 来注册具体看创建流程 2.补充 2.1 sysfs下常见目录介绍 sysfs是一个基于内存的虚拟的文件系统 目录简介/sys/block存放块设备提供一设备名(如sda)到/sys/devices的符号链接/sys/bus按总线类型分类在某个总线目录之下可以找到链接该总线的设备的符号链接指向/sys/devices. 某个总线目录之下的drivers目录包含了该总线所需的所有驱动的符号链接。对应kernel中的struct bus_type/sys/calss按设备功能分类如输入设备在/sys/class/input之下图形设备在/sys/class/graphics之下是指向/sys/devices的符号链接。 对应kernel中的struct class/sys/dev按设备驱动程序分层(字符设备 块设备)提供以major:minor为名到/sys/devices的符号链接。 对应Kernel中的struct device_driver/sys/devices包含所有被发现的注册在各种总线上的各种物理设备。 所有物理设备都按其在总线上的拓扑结构来显示除了platform devices和system devices。 platform devices 一般是挂载在芯片内部高速或者低速总线上的各种控制器和外设能被CPU直接寻址。 system devices不是外设而是芯片内部的核心结构比如CPUtimer等。对应kernel中的strcut device/sys/firmware提供对固件的查询和操作接口(关于固件有专用于固件加载的一套api)/sys/fs描述当前加载的文件系统提供文件系统和文件系统已挂载的设备信息/sys/kernel提供kernel所有可调整参数但大多数可调整参数依然存放在sysctl(/proc/sys/kernel)/sys/module所有加载模块(包括内联、编译进kernel、外部的模块)信息按模块类型分类/sys/power电源选项可用于控制整个机器的电源状态如写入控制命令进行关机、重启等 2.2 属性相关 2.2.1 简介 所谓的attibute就是内核空间和用户空间进行信息交互的一种方法。例如某个driver定义了一个变量却希望用户空间程序可以修改该变量以控制driver的运行行为那么就可以将该变量以attribute的形式开放出来。 attribute分为普通的attribute和二进制attribute如下 30 struct attribute {31 const char *name;32 umode_t mode;33 #ifdef CONFIG_DEBUG_LOCK_ALLOC34 bool ignore_lockdep:1;35 struct lock_class_key *key;36 struct lock_class_key skey;37 #endif38 };161 struct bin_attribute { 162 struct attribute attr; 163 size_t size; 164 void *private; 165 ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, 166 char *, loff_t, size_t); 167 ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, 168 char *, loff_t, size_t); 169 int (*mmap)(struct file *, struct kobject *, struct bin_attribute *attr, 170 struct vm_area_struct *vma); 171 };struct attribute为普通的attribute使用该attribute生成的sysfs文件只能用字符串的形式读写。而struct bin_attribute在struct attribute的基础上增加了read、write等函数因此它所生成的sysfs文件可以用任何方式读写。 2.2.2 attribute文件的创建 dev_attr_dev属性文件的创建详见 1 bus_register - bus_create_file 也是类似的流程 2.3 sysfs目录如何创建的 设备注册device_add -》 kobject_add -》 kobject_add_varg -》 kobject_add_internal 总线注册bus_register -》 kset_register -》 kobject_add_internal kobject_add_internal create_dir调用sysfs_create_dir_ns在sysfs中创建目录并把kobject所属ktype指示的默认属性都填充到当前kobj所指示的目录下
http://www.hkea.cn/news/14531948/

相关文章:

  • 免费主页空间的网站创建一个网站要多少钱
  • 网站管理强化阵地建设王烨当兵
  • 公司简介模板免费图片seo技术分类
  • 如何创建网站的第一步培训机构线上引流推广方法
  • 设计网站页面出现问题安徽省铜陵市建设局网站
  • php网站开发实施方案网站用户 分析
  • 网站建设与管理题目做营销网站
  • 外贸公司英文网站建设代理网页游戏需要什么条件啊
  • 广州网站营销seo费用做网站专题怎样添加微博
  • 公司网站建设企业网站深圳做网站排名哪家专业
  • 网站流量怎么挣钱阿里巴巴做网站的
  • 网站更换名称需要重新备案吗武功做网站
  • 中国大型网站灰蓝 网站模板
  • 第一次和别人女友做网站安全邮箱注册网站
  • 网站在百度无法验证码怎么办啊如何自创游戏
  • 地方网站怎么做推广erp系统页面
  • 网站建设公司 枫子伽叩罗伯特清崎说的网络营销是什么
  • 设计网站定制公司江门特色
  • 网站建设的总结100字网站开发设计概述
  • 建设工程网站新专家入库wordpress数据库清理sql
  • 艺术创意设计烟台seo推广优化
  • 怎么自助建站价格合理的网站建设
  • 设计师招聘网站有哪些江苏环泰建设有限公司网站
  • 广州做大型网站建设网页编辑器哪个好
  • 用腾讯云做淘宝客购物网站视频东阳网站制作
  • 怎么开网站深圳网站建设公司联
  • 电子商务网站建设教程东莞市seo网络推广企业
  • 延安市建设工程交易中心网站北京的建设网站公司
  • 建设部勘察设计网站网站模板价格
  • 昆山周市建设局网站网络营销推广的手段