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

达州+网站建设wordpress 搜索引擎ping

达州+网站建设,wordpress 搜索引擎ping,百度自然搜索排名优化,注册账号怎么弄一#xff0c;pinctrl的引入 由于SoC系统越来越复杂、集成度越来越高#xff0c;SoC中pin的数量也越来越多、功能也越来越复杂#xff0c;这就对如何管理、使用这些pins提出了挑战。因此#xff0c;用于管理这些pins的硬件模块#xff08;pin controller#xff09;就出…一pinctrl的引入 由于SoC系统越来越复杂、集成度越来越高SoC中pin的数量也越来越多、功能也越来越复杂这就对如何管理、使用这些pins提出了挑战。因此用于管理这些pins的硬件模块pin controller就出现了。相应地linux kernel也出现了对应的驱动pin controller driver。 1pinctrl的作用 想要pinA、B用于GPIO需要设置IOMUX让它们连接到GPIO模块要想让pinA、B用于I2C需要设置IOMUX让它们连接到I2C模块这里GPIO、I2C应该是并列的关系它们能够使用之前需要设置复用关系IOMUX有时还要配置引脚比如上拉、下拉、开漏等等。现在芯片一般动辄几百个引脚在使用到GPIO、I2C等功能时若一个引脚一个引脚去找对应的寄存器进行配置非常浪费时间和精力所以内核引入了Pinctrl子系统把引脚的复用和配置抽象出来只需要芯片厂商把自家芯片的支持进去就可以很方便的配置引脚。 PinctrlPin Controller顾名思义就是用来控制引脚的 1引脚枚举与命名(Enumerating and naming) 2引脚复用(Multiplexing)比如用作GPIO、I2C或其他功能 3引脚配置(Configuration)比如上拉、下拉、开漏、驱动强度等 2pinctrl的重要概念 Pinctrl子系统涉及2个对象Pin controller devices、Pinctrl client devices。 Pin controller devices提供服务可以用它来复用引脚、配置引脚是一个软件上的概念。 注意Pin controller和GPIO Controller不同前者控制的引脚可用于GPIO功能、I2C功能后者只是把引脚配置为输入、输出等简单的功能。两者的关系是先用Pin controller把引脚配置为GPIO再用GPIO Controler把引脚配置为输入或输出。 Pinctrl client devices使用服务Pinctrl系统的客户即使用Pinctrl系统的设备。声明自己要使用哪些引脚的哪些功能怎么配置它们。 在设备树中上述两个对象被定义成两个节点pin controller server节点举例如下 //qcom AOSP pin controller device tlmm: pinctrlf000000 {compatible qcom,diwali-pinctrl;reg 0x0F000000 0x1000000;interrupts GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH;gpio-controller;#gpio-cells 2;interrupt-controller;#interrupt-cells 2;wakeup-parent pdc;qcom,gpios-reserved 32 33 34 35;//一个device需要用到的所有pinctrl state资源pmx_ts_active {ts_active: ts_active {mux {pins gpio129, gpio51;function gpio;};config {pins gpio129, gpio51;drive-strength 8;bias-pull-up;};};};pmx_ts_int_suspend {ts_int_suspend: ts_int_suspend {mux {pins gpio51;function gpio;};config {pins gpio51;drive-strength 2;bias-pull-down;};};};pmx_ts_reset_suspend {ts_reset_suspend: ts_reset_suspend {mux {pins gpio129;function gpio;};config {pins gpio129;drive-strength 2;bias-pull-down;};};};pmx_ts_release {ts_release: ts_release {mux {pins gpio129, gpio51;function gpio;};config {pins gpio129, gpio51;drive-strength 2;bias-disable;};};};}; pinctrl client 节点举例 //一个device的pinctrl state配置 xxxxx {pinctrl-names pmx_ts_active, pmx_ts_suspend, pmx_ts_release;pinctrl-0 ts_active;pinctrl-1 ts_int_suspend ts_reset_suspend; pinctrl-2 ts_release; }; Pin controller节点的格式没有统一的标准每家芯片都不一样甚至上面的group、function关键字也不一定有但是概念是有的。而client device节点的格式是统一的。 这是由于怎么去解析Pincontroller节点下的子节点完全是有芯片厂商决定内核Pinctrl驱动框架只定义了解析节点的接口而已而Client端是由内核代码统一管理的。 二pin control subsystem的文件列表 1、源文件列表 我们整理linux/drivers/pinctrl目录下pin control subsystem的源文件列表如下 文件名 描述 core.c core.h pin control subsystem的core driver pinctrl-utils.c pinctrl-utils.h pin control subsystem的一些utility接口函数 pinmux.c pinmux.h pin control subsystem的core driver(pin muxing部分的代码也称为pinmux driver) pinconf.c pinconf.h pin control subsystem的core driver(pin config部分的代码也称为pin config driver) devicetree.c devicetree.h pin control subsystem的device tree代码 pinctrl-xxxx.c 各种pin controller的low level driver。 在pin controller driver文档中 我们以SM8475的pin controller为例描述了一个具体的low level的driver这个driver涉及的文件包括pinctrl-diwali.cpinctrl-diwali.h和pinctrl-msm.cpinctrl-msm.h。 2、和其他内核模块接口头文件 很多内核的其他模块需要用到pin control subsystem的服务这些头文件就定义了pin control subsystem的外部接口以及相关的数据结构。我们整理linux/include/linux/pinctrl目录下pin control subsystem的外部接口头文件列表如下 文件名 描述 consumer.h 其他的driver要使用pin control subsystem的下列接口 a、设置引脚复用功能 b、配置引脚的电气特性 这时候需要include这个头文件 devinfo.h 这是for linux内核的驱动模型模块driver model使用的接口。struct device中包括了一个struct dev_pin_info    *pins的成员这个成员描述了该设备的引脚的初始状态信息在probe之前driver model中的core driver在调用driver的probe函数之前会先设定pin state machine.h 和machine模块的接口。 3、Low level pin controller driver接口 我们整理linux/include/linux/pinctrl目录下pin control subsystem提供给底层specific pin controller driver的头文件列表如下 文件名 描述 pinconf-generic.h 这个接口主要是提供给各种pin controller driver使用的不是外部接口。 pinconf.h pin configuration 接口 pinctrl-state.h pin control state状态定义 pinmux.h pin mux function接口 三pin control subsystem的软件框架图 1功能规格 pin control subsystem的主要功能包括 1管理系统中所有可以控制的pin。在系统初始化的时候枚举所有可以控制的pin并标识这些pin。 2管理这些pin的复用Multiplexing。对于SOC而言其引脚除了配置成普通GPIO之外若干个引脚还可以组成一个pin group形成特定的功能。例如pin number是{ 0, 8, 16, 24 }这四个引脚组合形成一个pin group提供SPI的功能。pin control subsystem要管理所有的pin group。 3配置这些pin的特性。例如配置该引脚上的pull-up/down电阻配置drive strength等 2pin control subsystem在和其他linux内核模块的接口关系 pin control subsystem会向系统中的其他driver提供接口以便进行该driver的pin config和pin mux的设定。理想的状态是GPIO controll driver也只是像UART,SPI这样driver一样和pin control subsystem进行交互但是实际上由于各种源由后文详述pin control subsystem和GPIO subsystem必须有交互。 3pin control subsystem内部block diagram 四pinctrl子系统主要数据结构 1pincontroller的数据结构 记住pinctrl的三大作用有助于理解所涉及的数据结构 引脚枚举与命名(Enumerating and naming) 引脚复用(Multiplexing)比如用作GPIO、I2C或其他功能 引脚配置(Configuration)比如上拉、下来、open drain、驱动强度等。 2pin controller的概念和软件抽象 Kernel pinctrl core使用struct pinctrl_desc抽象一个pin controller。 2.1 Pin kernel的pin controller子系统要想管理好系统的pin资源第一个要搞明白的问题就是系统中到底有多少个pin用软件语言来表述就是要把系统中所有的pin描述出来并建立索引。这由上面struct pinctrl_desc结构中pins和npins来完成。 对pinctrl core来说它只关心系统中有多少个pin并使用自然数为这些pin编号后续的操作都是以这些编号为操作对象。至于编号怎样和具体的pin对应上完全是pinctrl driver自己的事情。 因此pinctrl driver需要根据实际情况将系统中所有的pin组织成一个struct pinctrl_pin_desc类型的数组该类型的定义为 struct pinctrl_pin_desc {unsigned number;const char *name;void *drv_data; }; number和name完全由driver自己决定不过要遵循有利于代码编写、有利于理解等原则。另外为了便于driver的编写可以在drv_data中保存driver的私有数据结构可以包含相关的寄存器偏移等信息。 2.2 Pin groups 在SoC系统中有时需要将很多pin组合在一起以实现特定的功能例如SPI接口、I2C接口等。因此pin controller需要以group为单位访问、控制多个pin这就是pin groups。相应地pin controller subsystem需要提供一些机制来获取系统中到底有多少groups、每个groups包含哪些pins、等等。 因此pinctrl core在struct pinctrl_ops中抽象出三个回调函数用来获取pin groups相关信息如下 struct pinctrl_ops {//获取系统中pin groups的个数后续的操作将以相应的索引为单位类似数组的下标个数为数组的大小int (*get_groups_count) (struct pinctrl_dev *pctldev);//获取指定group由索引selector指定的名称const char *(*get_group_name) (struct pinctrl_dev *pctldev,unsigned selector);//获取指定group的所有pins由索引selector指定结果保存在pins指针数组和num_pins指针中int (*get_group_pins) (struct pinctrl_dev *pctldev,unsigned selector,const unsigned **pins,unsigned *num_pins);void (*pin_dbg_show) (struct pinctrl_dev *pctldev, struct seq_file *s,unsigned offset);int (*dt_node_to_map) (struct pinctrl_dev *pctldev,struct device_node *np_config,struct pinctrl_map **map, unsigned *num_maps);void (*dt_free_map) (struct pinctrl_dev *pctldev,struct pinctrl_map *map, unsigned num_maps); }; 当然最终的group信息是由pinctrl driver提供的至于driver怎么组织这些group那是driver自己的事情了这里存储在soc data中。 2.3 Pin multiplexing(对象是pin或者pin group) 为了照顾不同类型的产品、不同的应用场景SoC中的很多管脚可以配置为不同的功能例如A2和B5两个管脚既可以当作普通的GPIO使用又可以配置为I2C0的的SCL和SDA也可以配置为UART5的TX和RX这称作管脚的复用pin multiplexing简称为pinmux。kernel pinctrl subsystem使用struct pinmux_ops来抽象pinmux有关的操作如下 struct pinmux_ops {//检查某个pin是否已作它用用于管脚复用时的互斥避免多个功能同时使用某个pin而不知道导致奇怪的错误int (*request) (struct pinctrl_dev *pctldev, unsigned offset);int (*free) (struct pinctrl_dev *pctldev, unsigned offset);//获取系统中function的个数int (*get_functions_count) (struct pinctrl_dev *pctldev);//获取指定function的名称const char *(*get_function_name) (struct pinctrl_dev *pctldev,unsigned selector);//获取指定function所占用的pin group可以有多个int (*get_function_groups) (struct pinctrl_dev *pctldev,unsigned selector,const char * const **groups,unsigned *num_groups);//将指定的pin groupgroup_selector设置为指定的functionfunc_selectorint (*set_mux) (struct pinctrl_dev *pctldev, unsigned func_selector,unsigned group_selector);int (*gpio_request_enable) (struct pinctrl_dev *pctldev,struct pinctrl_gpio_range *range,unsigned offset);void (*gpio_disable_free) (struct pinctrl_dev *pctldev,struct pinctrl_gpio_range *range,unsigned offset);int (*gpio_set_direction) (struct pinctrl_dev *pctldev,struct pinctrl_gpio_range *range,unsigned offset,bool input);bool strict; }; pinctrl core不关心function的具体形态只要求pinctrl driver将SoC的所有可能的function枚举出来格式自行定义不过需要有编号、名称等内容并注册给pinctrl core。后续pinctrl core将会通过function的索引访问、控制相应的function。 2.4 Pin configuration(对象是pin或者pin group 2.1和2.2中介绍了pinctrl subsystem中的操作对象pin or pin group以及抽象方法。嵌入式系统的工程师都知道SoC中的管脚有些属性可以配置例如上拉、下拉、高阻、驱动能力等。pinctrl subsystem使用pin configuration来封装这些功能具体体现在struct pinconf_ops数据结构中如下 struct pinconf_ops { #ifdef CONFIG_GENERIC_PINCONFbool is_generic; #endif//获取指定pin管脚的编号由2.1中pin的注册信息获得当前配置保存在config指针中配置的具体含义只有pinctrl driver自己知道下同int (*pin_config_get) (struct pinctrl_dev *pctldev,unsigned pin,unsigned long *config);//设置指定pin的配置可以同时配置多个config具体意义要由相应pinctrl driver解释int (*pin_config_set) (struct pinctrl_dev *pctldev,unsigned pin,unsigned long *configs,unsigned num_configs);//获取或者设置指定pin group的配置项int (*pin_config_group_get) (struct pinctrl_dev *pctldev,unsigned selector,unsigned long *config);//获取或者设置指定pin group的配置项int (*pin_config_group_set) (struct pinctrl_dev *pctldev,unsigned selector,unsigned long *configs,unsigned num_configs);void (*pin_config_dbg_show) (struct pinctrl_dev *pctldev,struct seq_file *s,unsigned offset);void (*pin_config_group_dbg_show) (struct pinctrl_dev *pctldev,struct seq_file *s,unsigned selector);void (*pin_config_config_dbg_show) (struct pinctrl_dev *pctldev,struct seq_file *s,unsigned long config); }; kernel pinctrl subsystem并不关心configuration的具体内容是什么它只提供pin configuration get/set的通用机制至于get到的东西以及set的东西到底是什么是pinctrl driver自己的事情。 3pinctrl client的数据结构 3.1 device结构体 设备节点要么被转换为platform_device或者其他结构体(比如i2c_client)但是里面都会有一个device结构体 3.2 pin control state holder 每个device结构体里都有一个dev_pin_info结构体用来保存设备的pinctrl信息为了方便管理pin control state我们又提出了一个pin control state holder的概念用来管理一个设备的所有的pin control状态 -- struct pinctrl 系统中的每一个需要和pin control subsystem进行交互的设备在进行设定之前都需要首先获取这个句柄。而属于该设备的所有的状态都是挂入到一个链表中链表头就是pin control state holder的states成员。 参考链接 pinctrl 子系统介绍_pinctrl子系统_kenny_wju的博客-CSDN博客 linux内核中的GPIO系统之2pin control subsystem
http://www.zqtcl.cn/news/174441/

相关文章:

  • 网上最好的网站模块模板建站小程序
  • 安平县哪家做网站html动漫网站模板下载
  • 网站关于 模板wordpress adsence
  • 杭州公司网站建设如何选择五屏网站建设
  • 天津商城网站建设平面设计师网站
  • 上海的网站设计公司苏州网站建设渠道
  • 做美食没有广告的网站o2o网站建设
  • 网站程序调试模式怎么做做汽车特卖会的网站
  • 怎么有自己的网站政务公开网站建设方案
  • 济南装饰行业网站建设成都地区网站开发成本
  • 宁波产品网站设计模板网站建设需要通过哪些审批
  • 了解网站建设管理网站开发的可行性研究报告
  • 淄博网站设计策划方案公司中文域名.网站
  • 综合网站系统电脑怎么做软件开发
  • 网站虚拟主持人制作国内网站建设排名
  • 上海房地产网站建设报价wordpress.备份
  • 网站建设运营维护合同专用车网站建设价格
  • 建设部咨询资质网站平台类网站建设公司
  • wap 网站 源码网站建立
  • 辽阳专业建设网站公司山东省工程建设招标信息网站
  • 下载专门做初中数学题的网站佛山网站制作在线
  • 永康物流网站蒙牛企业网站建设规划书
  • 网站开发发和后台开发有什么区别马鞍山网站建设价格
  • 广州建设银行预约公积金网站怎么下载ppt免费模板
  • 网站策划的基本过程网站设置在哪
  • 内蒙古住房和城乡建设网站网站建设需要购买什么
  • 网站做调查问卷给钱的兼职南通营销网站制作
  • 开个微网站需要什么自己制作网页的步骤
  • 有专业做线切割配件的网站吗中国婚恋网站排名
  • 做ppt网站大全中国工程建设信息网站