网站服务器送一年怎么做网站的营销

张小明 2026/1/19 20:41:29
网站服务器送一年,怎么做网站的营销,比较好的装修公司,如何建设平台型的网站最近在工作中遇到了gpio解析失败的问题#xff0c;跟踪发现设备树配置的字符串不匹配#xff0c;在这里再次学习并记录下。 of_get_named_gpio 以前在工作中更多使用的是of_get_named_gpio这个标准函数#xff0c;用以直接获取gpio。只要指定其具体的属性名#xff0c;一般…最近在工作中遇到了gpio解析失败的问题跟踪发现设备树配置的字符串不匹配在这里再次学习并记录下。of_get_named_gpio以前在工作中更多使用的是of_get_named_gpio这个标准函数用以直接获取gpio。只要指定其具体的属性名一般就能正常获取其gpio号而本次使用另外一个接口获取的是gpio描述符结构体。就碰到问题了devm_gpiod_get源码物位置kernel/driver/gpio/gpiolib-devres.c/** * devm_gpiod_get - Resource-managed gpiod_get() * dev: GPIO consumer * con_id: function within the GPIO consumer * flags: optional GPIO initialization flags * * Managed gpiod_get(). GPIO descriptors returned from this function are * automatically disposed on driver detach. See gpiod_get() for detailed * information about behavior and return values. */structgpio_desc*__must_checkdevm_gpiod_get(structdevice*dev,constchar*con_id,enumgpiod_flagsflags){returndevm_gpiod_get_index(dev,con_id,0,flags);}此接口是linux内核标准接口下面来解析下其具体的参数函义dev 指定此gpio的使用者一般需要拿到此dev的of_node属性节点。然后从所有的属性中查找指定的字符串。所以此参数不能为空con_id 找定查找的gpio属性名因为可能存在多个gpio属性配置使用多个属性名。此参数可为空如果为空则查找系统指定的字符串flags gpio初始化状态,可以为以下值的任意一个enumgpiod_flags{GPIOD_ASIS0,GPIOD_INGPIOD_FLAGS_BIT_DIR_SET,GPIOD_OUT_LOWGPIOD_FLAGS_BIT_DIR_SET|GPIOD_FLAGS_BIT_DIR_OUT,GPIOD_OUT_HIGHGPIOD_FLAGS_BIT_DIR_SET|GPIOD_FLAGS_BIT_DIR_OUT|GPIOD_FLAGS_BIT_DIR_VAL,GPIOD_OUT_LOW_OPEN_DRAINGPIOD_OUT_LOW|GPIOD_FLAGS_BIT_OPEN_DRAIN,GPIOD_OUT_HIGH_OPEN_DRAINGPIOD_OUT_HIGH|GPIOD_FLAGS_BIT_OPEN_DRAIN,};大体函义如下GPIOD_ASIS 不需要对gpio作任何修改GPIOD_IN gpio为输入GPIOD_OUT_LOW gpio为输出并拉低GPIOD_OUT_HIGH gpio为输出并拉高GPIOD_OUT_LOW_OPEN_DRAIN gpio漏极开路输出并拉低GPIOD_OUT_HIGH_OPEN_DRAIN gpio漏极开路输出并拉高此函数的调用流程如下devm_gpiod_get_indexNon-Exclusive :此模式允许多个进程或任务同时访问同一个GPIO引脚需要对资源访问加锁of_find_gpiostatic__maybe_unusedconstchar*constgpio_suffixes[]{gpios,gpio};structgpio_desc*of_find_gpio(structdevice_node*np,constchar*con_id,unsignedintidx,unsignedlong*flags){charprop_name[32];/* 32 is max size of property name */enumof_gpio_flagsof_flags;constof_find_gpio_quirk*q;structgpio_desc*desc;unsignedinti;/* Try GPIO property foo-gpios and foo-gpio */for(i0;iARRAY_SIZE(gpio_suffixes);i){if(con_id)snprintf(prop_name,sizeof(prop_name),%s-%s,con_id,gpio_suffixes[i]);elsesnprintf(prop_name,sizeof(prop_name),%s,gpio_suffixes[i]);descof_get_named_gpiod_flags(np,prop_name,idx,of_flags);if(!gpiod_not_found(desc))break;}/* Properly named GPIO was not found, try workarounds */for(qof_find_gpio_quirks;gpiod_not_found(desc)*q;q)desc(*q)(np,con_id,idx,of_flags);if(IS_ERR(desc))returndesc;*flagsof_convert_gpio_flags(of_flags);returndesc;}如果有指定属性名那么会进行字符串拼接.拼接的规则是xxx-gpios|xxx-gpio,也就是说实际查找的字符串是添加了后辍的。会轮询查找对应的字符串比如在驱动中使用of_find_gpio(…,“power”,…)那么在DTS中就应该配置power-gpios或者power-gpio如果指定属性名为空那么会直接查找gpios或者gpio所以如果你不想写属性名就直接在DTS中配置其它的一个属性就可以了工作中碰到的查找失败起因就是在此了。of_get_named_gpiod_flagsof_parse_phandle_with_args_map是个系统函数这里不用太关注。只需要关心其输出的结果gpiospecnp 其指向的gpio控制器节点args_count #gpio-size配置的数据args 具体的gpio配置数据structof_phandle_args{structdevice_node*np;intargs_count;uint32_targs[MAX_PHANDLE_ARGS];};of_find_gpiochip_by_xlatestaticstructgpio_chip*of_find_gpiochip_by_xlate(structof_phandle_args*gpiospec){returngpiochip_find(gpiospec,of_gpiochip_match_node_and_xlate);}structgpio_chip*gpiochip_find(void*data,int(*match)(structgpio_chip*gc,void*data)){structgpio_device*gdev;structgpio_chip*gcNULL;unsignedlongflags;spin_lock_irqsave(gpio_lock,flags);list_for_each_entry(gdev,gpio_devices,list)if(gdev-chipmatch(gdev-chip,data)){gcgdev-chip;break;}spin_unlock_irqrestore(gpio_lock,flags);returngc;}上述代码很明显轮询所有的gpio控制器。从而找到匹配的控制器匹配的规则也很简单就两点设备树配置的控制器节点与其中一个控制器相等存在of_xlate回调函数且其返回值0匹配实现如下staticintof_gpiochip_match_node_and_xlate(structgpio_chip*chip,void*data){structof_phandle_args*gpiospecdata;returndevice_match_of_node(chip-gpiodev-dev,gpiospec-np)chip-of_xlatechip-of_xlate(chip,gpiospec,NULL)0;}of_xlate_and_get_gpiod_flagsstaticstructgpio_desc*of_xlate_and_get_gpiod_flags(structgpio_chip*chip,structof_phandle_args*gpiospec,enumof_gpio_flags*flags){intret;if(chip-of_gpio_n_cells!gpiospec-args_count)returnERR_PTR(-EINVAL);retchip-of_xlate(chip,gpiospec,flags);if(ret0)returnERR_PTR(ret);returngpiochip_get_desc(chip,ret);}这里的函数实现完全依赖控制器代码逻辑比较简单这里要搞懂这个实现。需要找一个gpio控制器来研究下这里以gpio-sprd.c为例gpio-sprd控制器staticintsprd_gpio_probe(structplatform_device*pdev){structgpio_irq_chip*irq;structsprd_gpio*sprd_gpio;sprd_gpiodevm_kzalloc(pdev-dev,sizeof(*sprd_gpio),GFP_KERNEL);if(!sprd_gpio)return-ENOMEM;sprd_gpio-irqplatform_get_irq(pdev,0);if(sprd_gpio-irq0)returnsprd_gpio-irq;sprd_gpio-basedevm_platform_ioremap_resource(pdev,0);if(IS_ERR(sprd_gpio-base))returnPTR_ERR(sprd_gpio-base);spin_lock_init(sprd_gpio-lock);sprd_gpio-chip.labeldev_name(pdev-dev);sprd_gpio-chip.ngpioSPRD_GPIO_NR;sprd_gpio-chip.base-1;sprd_gpio-chip.parentpdev-dev;sprd_gpio-chip.requestsprd_gpio_request;sprd_gpio-chip.freesprd_gpio_free;sprd_gpio-chip.getsprd_gpio_get;sprd_gpio-chip.setsprd_gpio_set;sprd_gpio-chip.direction_inputsprd_gpio_direction_input;sprd_gpio-chip.direction_outputsprd_gpio_direction_output;irqsprd_gpio-chip.irq;gpio_irq_chip_set_chip(irq,sprd_gpio_irqchip);irq-handlerhandle_bad_irq;irq-default_typeIRQ_TYPE_NONE;irq-parent_handlersprd_gpio_irq_handler;irq-parent_handler_datasprd_gpio;irq-num_parents1;irq-parentssprd_gpio-irq;returndevm_gpiochip_add_data(pdev-dev,sprd_gpio-chip,sprd_gpio);}这里此控制器的定义从上可以看出此控制器并没有定义。如果控制器没有定义此回调函数则会使用系统默认提供的回调函数of_gpio_simple_xlate此函数是公用的回调函数如果控制器定义了自己的xlate函数则使用控制器自身的如果没有就会使用此函数。到这里gpio的解析流程就基本走完了对gpio子系统认识进一步加深。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

佛山外贸网站建设新闻wordpress 变量

作为 10 年运维老炮,咱不整虚的,全程说人话、讲逻辑、给实操、上案例,保证你看完就能落地。先把核心逻辑讲透,再拆操作步骤,最后给一个完整的电商场景案例,兼容 K8S 1.33。 一、核心逻辑总览 先把这三个组…

张小明 2026/1/17 8:37:44 网站建设

网站建设编辑教程揭阳网站设计公司

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus微信小程序介绍系统测试 四、代码参考 源码获取 目的 摘要:随着移动互联网的普及,品牌会员在线商城成为提升用户粘…

张小明 2026/1/17 8:15:22 网站建设

建设外贸型网站流程中和seo公司

极速Markdown转HTML:一键打造专业文档页面的终极解决方案 【免费下载链接】fiddly Create beautiful and simple HTML pages from your Readme.md files 项目地址: https://gitcode.com/gh_mirrors/fi/fiddly 在技术文档创作中,Markdown转HTML已成…

张小明 2026/1/17 9:08:19 网站建设

优秀网站设计书籍电子商务营销策划方案

告别盲猜,拒绝中断。在 VS Code 中以战斗机 HUD 般的精准度监控你的 AI 军火库。为什么你需要它?你是否经历过这样的崩溃时刻:代码写到最关键的逻辑,Copilot 突然罢工,提示 “Rate Limit Exceeded”?你不得…

张小明 2026/1/17 10:56:47 网站建设

湖南网站制作方案微软做网站的软件

自动化脚本编写与工作站环境搭建 脚本参数处理与使用 在编写脚本时,我们可以通过 [ $# -eq 0 ] 表达式来检查传递给脚本的参数数量是否为零。若参数数量为零,脚本会执行原始行为并要求用户输入名称;若用户未提供名称,脚本将以退出码退出。若传递了参数,脚本会将第一个…

张小明 2026/1/17 12:37:39 网站建设

佛山网站建设的首选公司北辰手机网站建设

MAA明日方舟智能辅助工具:从繁琐操作到高效自动化的完整攻略 【免费下载链接】MaaAssistantArknights 一款明日方舟游戏小助手 项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights 还在手动刷图、重复基建操作吗?&#x1f…

张小明 2026/1/17 13:25:14 网站建设