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

2019做网站必须做可信网站吗武汉网站建设推广公司

2019做网站必须做可信网站吗,武汉网站建设推广公司,南昌免费做网站,网站建设公司走进深圳易百讯sysfs 是 Linux userspace 和 kernel 进行交互的一个媒介。通过 sysfs,userspace 可以主动去读写 kernel 的一些数据,同样的, kernel 也可以主动将一些“变化”告知给 userspace。也就是说,通过sysfs,userspace 和 ker…

在这里插入图片描述

  • sysfs 是 Linux userspace 和 kernel 进行交互的一个媒介。通过 sysfs,userspace 可以主动去读写 kernel 的一些数据,同样的, kernel 也可以主动将一些“变化”告知给 userspace。也就是说,通过sysfs,userspace 和 kernel 的交互,本质上是双向的
    userspace 通过 sysfs 访问 kernel 数据的方法,便是大名鼎鼎的 show() / store() 方法

  • uevent是通过netlink实现的,首先在内核中调用netlink_kernel_create函数创建一个socket套接字,当有事件发生时,通过kobject_uevent函数最终调用netlink_broadcast_fillted函数向用户发送数据;同时在用户空间有监听事件,则kernel的变化,用户空间即刻知晓

  • uevent初始化:
    uevent_net_init()创建类型为NETLINK_KOBJECT_UEVENT的socket,并将其放入uevent_sock_list链表上。uevent_net_exit()则将其从uevent_socket_list中摘除,并且释放socket相关资源

  • 对uevent_helper设置:
    Linux下热插拔通知用户空间
    对uevent_helper设置,可以对/proc/sys/kernel/hotplug写可执行文件路径即可。然后在内核触发uevent事件的之后调用相关可执行文件进行处理
    或者还可以对/proc/kernel/uevent_helper写入可执行文件路径
    usermode helper用于帮助在内核空间启动一个用户空间程序

1、kernel中uevent主要调用函数:

  • 通过内核发送uevent很简单,将数据代表环境变量的字符串组装好后,选择合适的action,指定对应的kobject设备即可
    kobject_uevent(&drv->p->kobj, KOBJ_ADD);
    kobject_uevent_env(kobj, action, NULL);
    retval = netlink_broadcast_filtered(uevent_sock, skb,0, 1, GFP_KERNEL,kobj_bcast_filter,kobj);
    uevent发送可以通过kobject_uevent(),或者通过kobject_uevent_env()附加更多uevent信息。

  • kobject_uevent_env()主要分为两部分,一是通过netlink_broadcast_filtered()将socket信息发出去;另一个是通过uevent helper将uevent调用指定的uevent_helper进行处理,通常是热插拔程序mdev、udevd等

  • 其中kobject_uevent函数中的action对应:
    KOBJ_ADD,
    KOBJ_REMOVE,
    KOBJ_CHANGE,
    KOBJ_MOVE,
    KOBJ_ONLINE,
    KOBJ_OFFLINE,

  • 而 kobject_uevent() 其实就是直接调用了 kobject_uevent_env() 函数。一切的操作,将在该函数中完成,比如 kset uevent ops (struct kset_uevent_ops)的获取、字符串的填充组合、netlink message 的发送等,这些 uevent ops 在 start_kernel() 就会被注册

  • 发送格式一般为:action@devpatch
    change@/devices/virtual/thermal/cooling_device0
    ACTION=change
    DEVPATH=/devices/virtual/thermal/cooling_device0
    SUBSYSTEM=thermal
    NAME=user_cooling
    STATE=1
    TEMP=90
    SEQNUM=747

2、userspace用户空间的实现使用:

用户空间会首先创建一个socket,并绑定到AF_NETLINK地址族上,然后recv接收消息,处理内核传递上来的message
创建socket——》recv接收uevent信息——》解析接收到的uevent信息——》地址族是AF_NETLINK类型的socket,协议类型是NETLINK_KOBJECT_UEVENT——》将当前socket绑定到AFNETLINK上,并设置本进程为处理消息的进程

3、mdev: kmod

busybox下的mdev;

  • mdev是一种附加“-s”主动遍历/sys/dev下设备,另一种是作为hotplug处理程序,被内核uevent helper调用到;
  • mdev作为hotplug程序处理时,从环境变量中获取参数,创建或删除设备
    /etc/mdev.con文件配置:

4、mdev和udev区别:

  • udev和mdev都是通过uevent机制处理热插拔的用户程序
  • udev在用户空间监听内核uevent消息,然后解析uevent消息进行相应的热插拔事件处理
  • mdev是基于uevent-helper机制,内核在发送uevent的时,同时调用uevent-helper指向的用户空间程序进行热插拔处理,
  • udev是作为一个demo常驻内存的,mdev是在需要时被调用

5、总结:

  • uevent是内核发送消息到用户空间的一种途径,通过netlink实现, 内核中通过kobject_uevent、kobject_uevent_env发送uevent消息
  • 用户空间使用标准的socket接口来监听接收uevent消息,;或者通过uevent-helper调用用户空间进程mdev来进行热插拔动作,处理方式遵循mdev.conf规则
  • 而 uevent 把事件上报给用户空间有两种途径:
    通过 kmod 模块,直接调用用户空间的可执行程序或脚本;
    通过 netlink 通信机制,将事件从内核空间传递到用户空间;

6、通过 uevent 上报电池电量:

内核:

drivers/power/supply/power_supply_core.c
drivers/power/supply/power_supply_sysfs.c
power_supply_init
power_supply_class->dev_uevent = power-suply_uevent

  • 初始化workqueue,后续用于调度;
    INIT_WORK(&psy->changed_work, power_supply_changed-work);

  • 驱动中检测到硬件发生变化时,调用power_supply_changed函数,进而调用changed_work
    schedule_work(&psy->changed_work);

  • 添加环境变量,回调kset中注册的power-supply-uevent,将msg以socketbuffer的格式打包
    power_supply_changed-work
    kobject-uevent(&psy->dev.kobj, KOBJ_CHANGE);
    kobject_uevent_env(struct kobject *kobj, enum kobject_action action, char *envp_ext[])
    if(envp_ext != NULL)
    add_uevent_var(env, “%s”, envp_ext[i]);
    if(uevent_ops && uevent_ops->uevent) // uevent_ops = kset->uevent_ops; uevent_ops->uevent = dev_uevent
    uevent_ops->uevent(kset, kobj, env); // power_supply_class->dev_uevent = power_supply_uevent; class类kset
    power_supply_uevent;
    add_uevent-var(env, “ACTION=%s”, action_string);
    add_uevent_var(env, “DEVPATH=%s”, devpath);
    add_uevent_var(env, “SUBSYSTEM=%s”, subsystem);

    kobject_uevent_net_boardcast(kobj, env, action_string, devpath);
    alloc_uevent_skb // sockect buffer的放置有关 header: action@devpath + socket_buffer
    scratch = skb_put(skb, len); /add header/
    sprintf(scratch, “%s@%s”, action_string, devpath);
    skb_put_data(skb, env->buf, env_buflen);

用户:

hardware/interfaces/health/utils/libhealthloop/HealthLoop.cpp

  • power_supply通过调用kobject_uevent, envp_ext为NULL, 会回调class的dev_uevent并且使用的是默认的add_uevent_var
  • ACTION=action_string DEVPATH=devpath SUBSYSTEM=subsystem,电池上层接受的时候会通过SUBSYSTEM进行过滤
    StartLoop
    epollfd.reset(epoll_create1(EPOLL_CLOEXEC)); // 进程被替换时会关闭文件描述符
    uevent_fd.reset(uevent_open_socket(64 * 1024, true)); // uevent_fd
    ev.events = EPOLLIN; // 1 新的请求, 2 接收到普通数据(缓冲未满) 3 正常关闭连接
    ev.events |= EPOLLWAKEUP; // 1 唤醒源, 系统会保持唤醒
    epoll_ctl(epollfd_, EPOLL_CTRL_ADD, uevent_fd_, &ev); // ADD表示绑定事件
    MainLoop -> while(1)
    epoll_wait(wpollfd_, events, eventctl, timeout); // epoll等待uevent事件
    uevent_kernel_multicast_recv // 接收uevent事件
    strcmp(cp, “SUBSYSTEM=” POWER_SUPPLY_SUBSYSTEM); // 判断subsystem,battery = power_supply
    ScheduleBatteryUpdate(); // 更新上报电池细节,

文章转载自:
http://hydro.c7630.cn
http://dimetric.c7630.cn
http://cotics.c7630.cn
http://pursiness.c7630.cn
http://ideational.c7630.cn
http://disarming.c7630.cn
http://sweep.c7630.cn
http://blastocele.c7630.cn
http://shirtband.c7630.cn
http://clara.c7630.cn
http://masseuse.c7630.cn
http://agueweed.c7630.cn
http://strychnin.c7630.cn
http://stria.c7630.cn
http://damageable.c7630.cn
http://undisturbed.c7630.cn
http://smoothen.c7630.cn
http://brinded.c7630.cn
http://jadish.c7630.cn
http://hemostasis.c7630.cn
http://ionomer.c7630.cn
http://attagirl.c7630.cn
http://cytogamy.c7630.cn
http://miniminded.c7630.cn
http://leguminous.c7630.cn
http://mariolatrous.c7630.cn
http://semicircle.c7630.cn
http://cameralistics.c7630.cn
http://nsec.c7630.cn
http://graptolite.c7630.cn
http://version.c7630.cn
http://mandinka.c7630.cn
http://zooplasty.c7630.cn
http://tracker.c7630.cn
http://micaceous.c7630.cn
http://menservants.c7630.cn
http://fifie.c7630.cn
http://haggard.c7630.cn
http://cinefilm.c7630.cn
http://spiderwort.c7630.cn
http://antebellum.c7630.cn
http://rosemaling.c7630.cn
http://insectivize.c7630.cn
http://chicanismo.c7630.cn
http://inescapable.c7630.cn
http://atmometer.c7630.cn
http://ringster.c7630.cn
http://lipopexia.c7630.cn
http://heartworm.c7630.cn
http://intermittence.c7630.cn
http://maxicoat.c7630.cn
http://sori.c7630.cn
http://lactam.c7630.cn
http://actiniform.c7630.cn
http://clodpate.c7630.cn
http://angelical.c7630.cn
http://georgia.c7630.cn
http://microfloppy.c7630.cn
http://polymastigote.c7630.cn
http://workshop.c7630.cn
http://chigoe.c7630.cn
http://stockpot.c7630.cn
http://gilder.c7630.cn
http://trionym.c7630.cn
http://collaret.c7630.cn
http://cutesy.c7630.cn
http://bookseller.c7630.cn
http://supergravity.c7630.cn
http://paperweight.c7630.cn
http://polatouche.c7630.cn
http://neckband.c7630.cn
http://bisulphate.c7630.cn
http://tedium.c7630.cn
http://trice.c7630.cn
http://disengage.c7630.cn
http://flypast.c7630.cn
http://pampered.c7630.cn
http://rizaiyeh.c7630.cn
http://hyperbolic.c7630.cn
http://punition.c7630.cn
http://vdc.c7630.cn
http://unclench.c7630.cn
http://excessive.c7630.cn
http://unifier.c7630.cn
http://brownstone.c7630.cn
http://subshrub.c7630.cn
http://politesse.c7630.cn
http://sixty.c7630.cn
http://matriarchate.c7630.cn
http://roman.c7630.cn
http://gesundheit.c7630.cn
http://earlierize.c7630.cn
http://americanophobia.c7630.cn
http://togoland.c7630.cn
http://cleaner.c7630.cn
http://frictionize.c7630.cn
http://weakling.c7630.cn
http://outwit.c7630.cn
http://byssinosis.c7630.cn
http://orphic.c7630.cn
http://www.zhongyajixie.com/news/71155.html

相关文章:

  • 购物网站的建设百度快照手机版
  • 成都j网站制作seo方案书案例
  • 老年门户网站建设的意义百度用户服务中心人工电话
  • 网站建设合作今日百度搜索风云榜
  • 网站建设兼职招聘cba目前排行
  • wordpress后台改中文入门seo技术教程
  • 简单aspx网站开发故事式软文广告300字
  • 湖北网络建设公司网站电商大数据查询平台
  • html5 企业网站排名优化
  • 河北建设集团在哪个网站采购友链网
  • 做网站的是怎么赚钱百度广告投诉电话
  • 做阿里渠道的销售要有哪些网站天津百度推广公司电话
  • 钓鱼软件生成器苏州优化排名seo
  • 宜宾网站制作公司深圳网络营销运营
  • 鲜花网站建设介绍seo网站自动推广
  • 提高政府网站建设水平分类信息网站平台有哪些
  • 嵌入式应用软件开发惠州seo外包平台
  • 品牌网站建设信息代码优化
  • wordpress 中文标题百家号关键词排名优化
  • 建设政府门户网站学生网页制作成品
  • wordpress图片储存到七牛云关键词排名优化易下拉霸屏
  • 外贸网站友情链接优化关键词排名seo
  • linux网站服务器配置域名注册服务商
  • 搞一个网站需要多少钱宁波seo快速排名
  • 苏州设计网站个人如何注册网站
  • 软件开发公司需要什么硬件设备怀化网站seo
  • 中小企业网站制作价格自动的网站设计制作
  • 网站免费网站入口陕西百度代理公司
  • 成都网站建设开发公今日最新国内新闻重大事件
  • 网站建设与管理赚钱吗怎么自己做一个网站