深圳网站设计哪家强上海网站优化公司排名

张小明 2026/3/12 11:26:21
深圳网站设计哪家强,上海网站优化公司排名,游戏开发需要具备哪些技术,天津市装修公司排名榜最近在工作中遇到了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进行投诉反馈,一经查实,立即删除!

如何制作一网站自带浏览器建设银行网站打不开

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个极简的IP地理位置查询工具原型,核心功能:1. 输入IP返回地理位置信息 2. 在地图上标注位置 3. 显示ISP等信息 4. 查询历史记录。使用公开的IP地理API…

张小明 2026/3/5 6:07:15 网站建设

新化 网站开发爱凡客

终极HTML5棋类开发指南:从零构建智能对战系统 【免费下载链接】Chess 中国象棋 - in html5 项目地址: https://gitcode.com/gh_mirrors/che/Chess 现代Web技术为传统棋类游戏注入了全新活力,HTML5 Canvas结合原生JavaScript让复杂棋类逻辑在浏览器…

张小明 2026/3/5 6:07:16 网站建设

截图按钮图标素材网站商城网站建设哪家好

CSDNGreener是一款专为CSDN用户设计的浏览器扩展脚本,通过全面的页面优化和内容过滤功能,为用户提供纯净高效的技术阅读环境。这款脚本经过多年持续更新,已经成为CSDN平台上最受用户欢迎的优化工具之一。 【免费下载链接】CSDNGreener 《专 业…

张小明 2026/3/5 6:07:16 网站建设

网站开发赚不赚钱常用的网站推广

Sony-PMCA-RE 相机逆向工程工具使用指南 【免费下载链接】Sony-PMCA-RE Reverse Engineering Sony Digital Cameras 项目地址: https://gitcode.com/gh_mirrors/so/Sony-PMCA-RE Sony-PMCA-RE 是一款专为索尼数码相机设计的逆向工程工具,通过USB接口实现与相…

张小明 2026/3/5 6:07:17 网站建设

佛山专业做网站公司有哪些虚拟主机建站教程

基于微服务架构的分布式量化交易系统设计与实现 基于微服务架构的分布式量化交易系统:毕业设计的理想选择 在当今金融科技快速发展的时代,量化交易已成为投资领域的重要趋势。对于计算机科学和软件工程专业的学生来说,一个结合前沿技术和实…

张小明 2026/3/5 6:07:20 网站建设

php 开源cms 企业网站长沙专业个人做网站哪家好

OnmyojiAutoScript终极指南:2025年阴阳师自动化脚本完全配置手册 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 还在为阴阳师无尽的日常任务而烦恼吗?每…

张小明 2026/3/10 15:56:15 网站建设