Processing

Please wait...

Settings

Settings

Goto Application

1. WO2020108410 - METHOD AND APPARATUS FOR I2C DEVICE MANAGEMENT IN STACKED SYSTEM, AND STORAGE MEDIUM

Document

说明书

发明名称 0001   0002   0003   0004   0005   0006   0007   0008   0009   0010   0011   0012   0013   0014   0015   0016   0017   0018   0019   0020   0021   0022   0023   0024   0025   0026   0027   0028   0029   0030   0031   0032   0033   0034   0035   0036   0037   0038   0039   0040   0041   0042   0043   0044   0045   0046   0047   0048   0049   0050   0051   0052   0053   0054   0055   0056   0057   0058   0059   0060   0061   0062   0063   0064   0065   0066   0067   0068   0069   0070   0071   0072   0073   0074   0075   0076   0077   0078   0079   0080   0081   0082   0083   0084   0085   0086   0087   0088   0089   0090  

权利要求书

1   2   3   4   5   6   7   8   9   10  

附图

1   2   3   4   5   6  

说明书

发明名称 : 堆叠系统中I2C器件管理的方法、设备和存储介质

[0001]
交叉引用
[0002]
本发明要求在2018年11月26日提交至中国专利局、申请号为201811420323.0、发明名称为“堆叠系统中I2C器件管理的方法、设备和存储介质”的中国专利申请的优先权,该申请的全部内容通过引用结合在本发明中。

技术领域

[0003]
本发明涉及堆叠系统的器件管理技术领域,尤其涉及一种堆叠系统中I2C器件管理的方法、设备和存储介质。

背景技术

[0004]
交换机及PTN(Packet Transport Network,分组传送网)等产品的FRU(Field Replace Unit,现场可更换单元)器件一般都会内置E2PROM(Electrically Erasable Programmable read only memory,带电可擦可编程只读存储器)存储器件的一些信息,比如静态的如序列号、生产厂家、生产日期等,动态的如电源的电流、功率等,称为电子标签,这些FRU器件及板载的如RTC、温度传感器、电源控制芯片等的访问均是通过I2C总线,因而,可统称为I2C器件。
[0005]
在堆叠系统内,目前的技术中,当主需要读写备的I2C器件时,需要:1、应用向主的控制平面发出读写备的I2C器件的请求;2、主的控制平面发读写请求消息给备的资管进程;3、备的资管进程处理请求消息,调用器件对应的I2C驱动读写器件。4、备资管进程回复消息给主的控制平面读写器件的数据和结果;5、主的控制平面处理回复消息给应用读写器件的数据和结果。
[0006]
这样一来,当系统中的备设备比较多或FRU器件比较多或所需动态信息比较多时,主备之间这些频繁的消息交互就会加大系统负载,尤其是当这些消息中的一部分是同步消息时,或在处理热插拔、主备分裂、主备倒换等场景时也很繁琐。由此可见,目前的技术中,堆叠系统中主对备I2C器件的访问过多的依赖控制平面,加大了控制平面的负担和系统的复杂度。
[0007]
发明内容
[0008]
本发明实施例提供了一种堆叠系统中I2C器件管理的方法,所述方法包括以下步骤:启动初始化时,在堆叠系统中创建主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件;在所述主虚拟控制总线与所述备虚拟控制总线之间建立套接字socket通信,来实现所述堆叠系统中主设备与备设备之间的I2C器件访问通信。
[0009]
本发明实施例还提出了一种堆叠系统中I2C器件管理的设备,所述设备包括存储器、处理器、存储在所述存储器上并可在所述处理器上运行的程序以及用于实现所述处理器和所述存储器之间的连接通信的数据总线,所述程序被所述处理器执行时实现前述方法的步骤。
[0010]
本发明提供了一种存储介质,用于计算机可读存储,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述方法的步骤。
[0011]
发明实施例还提出了一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述任意方法实施例中的方法。

附图说明

[0012]
图1是本发明实施例一提供的堆叠系统中I2C器件管理的方法的流程图。
[0013]
图2是本发明实施例堆叠系统的结构框图。
[0014]
图3为图1所示堆叠系统中I2C器件管理的方法步骤S110的具体流程图。
[0015]
图4为图1所示堆叠系统中I2C器件管理的方法步骤S120的具体流程图。
[0016]
图5为图1所示堆叠系统中I2C器件管理的方法又一流程图。
[0017]
图6是本发明实施例二提供的堆叠系统中I2C器件管理的设备的结构框图。
[0018]
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

[0019]
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0020]
在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身没有特有的意义。因此,“模块”、“部件”或“单元”可以混合地使用。
[0021]
实施例一.
[0022]
如图1所示,本实施例提供了一种堆叠系统中I2C器件管理的方法,该方法包括以下步骤:步骤S110:启动初始化时,在堆叠系统中创建主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件。
[0023]
具体地,如图2所示,设备A和设备B组成一个堆叠系统,设备A上有一个I2C控制器Adpter-A及一个控制总线BUS-A,控制总线BUS-A下挂一个器件DEV-A;设备B上有一个I2C控制器Adpter-B及一个控制总线BUS-B,控制总线BUS-B下挂一个器件DEV-B。基于图2所示的堆叠系统为例,如图3所示,该步骤“启动初始化时,在堆叠系统中创建主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件”具体包括;步骤S111:启动初始化时,分别对该堆叠系统的主设备与备设备进行内核I2C子系统初始化,以在相应的内核I2C子系统为该主设备注册主控制器、主控制总线以及主器件,为该备设备注册备控制器、备控制总线以及备器件。
[0024]
步骤S112:在该堆叠系统中,对该主设备创建主虚拟控制器、主虚拟控制总线与主虚拟器件,对该备设备创建备虚拟控制器、备虚拟控制总线以及备虚拟器件。
[0025]
具体体现,如图2所示,先分别对设备A及设备B进行内核I2C子系统初始化,在进行设备A内核I2C子系统初始化时,执行以下动作:设备A内核I2C子系统初始化时,加载I2C控制器Adapter-A的驱动P-Adapter Driver,该驱动probe处理匹配上P-Adapter A,并向内核I2C子系统注册了控制器设备P-Adapter A及挂载其下的I2C器件P-Device A,挂载了控制总线BUS-A的算法P-Alogrithm A。之后加载Dev-A的驱动,该驱动匹配到了器件P-Device A。
[0026]
在进行设备B内核I2C子系统初始化时,执行以下动作:设备B内核I2C 子系统初始化时,加载I2C控制器Adapter-B的驱动P-Adapter Driver,该驱动probe处理匹配上P-Adapter B,并向内核I2C子系统注册了控制器设备P-Adapter B及挂载其下的I2C器件P-Device B,挂载了控制总线BUS-B的算法P-Alogrithm B。之后加载Dev-B的驱动,该驱动匹配到了器件P-Device B。
[0027]
如果设备A系统启动在之后与设备B的主备竞争中,获得了master的角色,即设备A为主设备,I2C控制器Adapter-A为主控制器,控制总线BUS-A为主控制总线,器件DEV-A为主器件。在此节点,设备A加载主虚拟驱动V-Adapter Driver,该驱动probe处理匹配上主虚拟控制器V-Adapter A,并向内核I2C子系统注册了主虚拟控制器设备V-Adapter A,挂载了主虚拟控制总线V-BUS A的算法V-Alogrithm A。然后该驱动扫描了内核I2C子系统的设备链,对I2C器件P-Device A添加标志VSC-MASTER,创建主虚拟器件V-Device A(复制了P-Device A),与P-Device A关联,并向内核I2C子系统注册了V-Device A,通过V-BUS A挂载到V-Adapter下。之后,主虚拟驱动V-Adapter Driver创建与设备B的socket连接以及MSG_DEV_ADV消息定时器,该消息定时器每隔10s,向设备B发送MSG_DEV_ADV消息,该消息携带了V-Device A的设备信息。
[0028]
与之同时,设备B系统启动在之后与设备A的主备竞争中,获得了slave的角色,即设备B为备设备,I2C控制器Adapter-B为备控制器,控制总线BUS-B为备控制总线,器件DEV-B为备器件。在此节点,设备B加载备虚拟驱动V-Adapter Driver,该驱动probe处理匹配上备虚拟控制器V-Adapter B,并向内核I2C子系统注册了备虚拟控制器设备V-Adapter B,挂载了备虚拟控制总线V-BUS B的算法V-Alogrithm B。然后该驱动扫描了内核I2C子系统的设备链,对I2C器件P-Device B添加标志VSC-Slave,创建备虚拟器件V-Device B(复制了P-Device B),与P-Device B关联,并向内核I2C子系统注册了V-Device B,通过V-BUS B挂载到V-Adapter B下。即设备A通过socket通信收到了设备B的MSG_DEV_ADV消息,从此消息中解析出V-Device B的设备信息,据此信息创建V-Adapter B、V-Device B,并向内核I2C子系统注册。然后,给设备B发送MSG_DEV_REP消息,设备B通过socket通信收到了设备A的MSG_DEV_REP消息,关闭MSG_DEV_ADV消息定时器。
[0029]
步骤S120:在主虚拟控制总线与备虚拟控制总线之间建立套接字socket 通信,来实现堆叠系统中主设备与备设备之间的I2C器件访问通信。
[0030]
具体地,当在堆叠系统中创建主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件后,该主虚拟器件通过该主虚拟控制总线挂载在该主虚拟控制器下,该备虚拟器件通过该备虚拟控制总线挂载在该备虚拟控制器下,即V-Device A通过V-BUS A挂载到V-Adapter A下,V-Device B通过V-BUS B挂载到V-Adapter B下,同时,在主虚拟控制总线与备虚拟控制总线之间建立套接字socket通信,来实现堆叠系统中主设备与备设备之间的I2C器件访问通信。即主虚拟控制总线V-BUS A与备虚拟控制总线V-BUS B之间建立套接字socket通信,以实现设备A(即主设备)与设备B(即备设备)之间的I2C器件访问通信。如图4所示,具体访问通信过程如下所示,包括:步骤S121:当该主设备对该备设备的器件进行读取操作时,通过打开该备虚拟器件的器件文件来发起读取操作,并通过该socket通信在该备设备与该主设备之间进行读取消息的交互处理,来使得该主设备读取出该备设备的器件的电子标签。
[0031]
具体地,当该主设备对该备设备的器件进行读取操作时,可通过打开该备虚拟器件的器件文件来发起读取操作,并通过该socket通信在该备设备与该主设备之间进行读取消息的交互处理,来使得该主设备读取出该备设备的器件的电子标签。具体体现为:首先,设备A(即主设备)打开V-Device B(备虚拟器件)的器件文件,发起read操作。接着,设备A的V-Device B驱动,发消息给设备B(即备设备)。即内核I2C子系统调用V-Alogrithm的xfer,该函数的原型如下:int(*master_xfer)(struct i2c_adapter*adap,struct i2c_msg*msgs,int num);
[0032]
xfer实现会将i2c_msg做下封装,封装格式如下:
[0033]
[表0001]
MSG ID i2c_msg

[0034]
此消息ID为MSG_RW_REQ,通过socket通信发送给设备B。
[0035]
设备B收到MSG_RW_REQ消息后,从中解析出i2c_msg,并找到V-Device B对应的P-Device B(即备设备的器件,亦即备器件),进而通过内核I2C子系统的P-Alogrithm B读取Dev-B的电子标签,并通过i2c_msg返回给V-Device B,进而通过V-Alogrithm B封装成MSG_RW_ACK,通过socket通信发送设备A。需要注意的是V-Alogrithm B会对i2c_msg中的bus号做出修正。设备A收到MSG_RW_ACK消息后,从中解析出i2c_msg,并 通过内核I2C子系统将读出的数据返回给read操作。至此,设备A读出了器件Dev-B的电子标签。
[0036]
步骤S122:当该备设备的器件进行拔出操作时,在该备设备的内核I2C子系统中注销该备设备的器件,并通过该socket通信在该备设备与该主设备之间进行删除消息的交互处理,以注销与该备设备的器件相关联的备虚拟器件,进而完成该备设备的器件的拔出处理。
[0037]
具体地,当该备设备的器件进行拔出操作时,可在该备设备的内核I2C子系统中注销该备设备的器件,并通过该socket通信在该备设备与该主设备之间进行删除消息的交互处理,以注销与该备设备的器件相关联的备虚拟器件,进而完成该备设备的器件的拔出处理。具体体现为:器件Dev-B(即备设备的器件,亦即备器件)拔出中断的处理中向内核I2C子系统注销P-Device B(即备设备的器件),当内核I2C子系统注销P-Device B,同时注销P-Device B关联的V-Device B(备虚拟器件),注销V-Device B时通过该socket通信向设备A发送MSG_DEV_DEL消息,设备A中内核I2C子系统对MSG_DEV_DEL消息的处理,注销V-Device B。至此,设备A、设备B完成对DEV-B的拔出处理。
[0038]
另外,如图5所示,本堆叠系统中I2C器件管理的方法还包括以下步骤:步骤S130:该主设备与该备设备分裂时,依次注销该备虚拟控制器及该主虚拟控制器。
[0039]
具体地,当该主设备与该备设备分裂时,即如图2所示,设备A与设备B断开连接,不再构成堆叠系统时,需依次注销该备虚拟控制器及该主虚拟控制器,即分别在相应的内核I2C子系统中注销该备虚拟控制器及该主虚拟控制器,同时,相应的备虚拟控制总线、备虚拟器件、主虚拟控制总线以及主虚拟器件亦需进行相应注销,注销顺序与创建顺序相反。
[0040]
步骤S140:该主设备与该备设备倒换时,需重启该堆叠系统,以重新对该堆叠系统进行启动初始化。
[0041]
具体地,当该主设备与该备设备倒换时,即如图2所示,设备A由主设备降为备设备,设备B由备设备升为主设备,此时,需重启该堆叠系统(此时,该堆叠系统中的主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件均会被注销),以重新对该堆叠系统进行启动初始化,启动初始后,重新执行上述步骤,与之不同的时,设备B系统启动在之后与设备A的主备竞争中,获得了master的角色,即设备B 变为主设备,此时,I2C控制器Adapter-B为主控制器,控制总线BUS-B为主控制总线,器件DEV-B为主器件,I2C器件P-Device B添加标志
[0042]
VSC-MASTER。与之同时,设备A系统启动在之后与设备B的主备竞争中,获得了slave的角色,即设备A变为备设备,此时,I2C控制器Adapter-A为备控制器,控制总线BUS-A为备控制总线,器件DEV-A为备器件,I2C器件P-Device A添加标志VSC-Slave。
[0043]
实施例二
[0044]
如图6所示,本发明实施例二提出一种堆叠系统中I2C器件管理的设备20,该设备20包括存储器21、处理器22、存储在该存储器上并可在该处理器上运行的程序以及用于实现处理器21和存储器22之间的连接通信的数据总线23,该程序被该处理器执行时,以实现以下如图1所示的具体步骤:步骤S110:启动初始化时,在堆叠系统中创建主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件。
[0045]
具体地,如图2所示,设备A和设备B组成一个堆叠系统,设备A上有一个I2C控制器Adpter-A及一个控制总线BUS-A,控制总线BUS-A下挂一个器件DEV-A;设备B上有一个I2C控制器Adpter-B及一个控制总线BUS-B,控制总线BUS-B下挂一个器件DEV-B。基于图2所示的堆叠系统为例,如图3所示,该步骤“启动初始化时,在堆叠系统中创建主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件”具体包括:步骤S111:启动初始化时,分别对该堆叠系统的主设备与备设备进行内核I2C子系统初始化,以在相应的内核I2C子系统为该主设备注册主控制器、主控制总线以及主器件,为该备设备注册备控制器、备控制总线以及备器件。
[0046]
步骤S112:在该堆叠系统中,对该主设备创建主虚拟控制器、主虚拟控制总线与主虚拟器件,对该备设备创建备虚拟控制器、备虚拟控制总线以及备虚拟器件。
[0047]
具体体现,如图2所示,先分别对设备A及设备B进行内核I2C子系统初始化,在进行设备A内核I2C子系统初始化时,执行以下动作:设备A内核I2C子系统初始化时,加载I2C控制器Adapter-A的驱动P-Adapter Driver,该驱动probe处理匹配上P-Adapter A,并向内核I2C子系统注册了控制器设备P-Adapter A及挂载其下的I2C器件P-Device A,挂载了控制总 线BUS-A的算法P-Alogrithm A。之后加载Dev-A的驱动,该驱动匹配到了器件P-Device A。
[0048]
在进行设备B内核I2C子系统初始化时,执行以下动作:设备B内核I2C子系统初始化时,加载I2C控制器Adapter-B的驱动P-Adapter Driver,该驱动probe处理匹配上P-Adapter B,并向内核I2C子系统注册了控制器设备P-Adapter B及挂载其下的I2C器件P-Device B,挂载了控制总线BUS-B的算法P-Alogrithm B。之后加载Dev-B的驱动,该驱动匹配到了器件P-Device B。
[0049]
如果设备A系统启动在之后与设备B的主备竞争中,获得了master的角色,即设备A为主设备,I2C控制器Adapter-A为主控制器,控制总线BUS-A为主控制总线,器件DEV-A为主器件。在此节点,设备A加载主虚拟驱动V-Adapter Driver,该驱动probe处理匹配上主虚拟控制器V-Adapter A,并向内核I2C子系统注册了主虚拟控制器设备V-Adapter A,挂载了主虚拟控制总线V-BUS A的算法V-Alogrithm A。然后该驱动扫描了内核I2C子系统的设备链,对I2C器件P-Device A添加标志VSC-MASTER,创建主虚拟器件V-Device A(复制了P-Device A),与P-Device A关联,并向内核I2C子系统注册了V-Device A,通过V-BUS A挂载到V-Adapter下。之后,主虚拟驱动V-Adapter Driver创建与设备B的socket连接以及MSG_DEV_ADV消息定时器,该消息定时器每隔10s,向设备B发送MSG_DEV_ADV消息,该消息携带了V-Device A的设备信息。
[0050]
与之同时,设备B系统启动在之后与设备A的主备竞争中,获得了slave的角色,即设备B为备设备,I2C控制器Adapter-B为备控制器,控制总线BUS-B为备控制总线,器件DEV-B为备器件。在此节点,设备B加载备虚拟驱动V-Adapter Driver,该驱动probe处理匹配上备虚拟控制器V-Adapter B,并向内核I2C子系统注册了备虚拟控制器设备V-Adapter B,挂载了备虚拟控制总线V-BUS B的算法V-Alogrithm B。然后该驱动扫描了内核I2C子系统的设备链,对I2C器件P-Device B添加标志VSC-Slave,创建备虚拟器件V-Device B(复制了P-Device B),与P-Device B关联,并向内核I2C子系统注册了V-Device B,通过V-BUS B挂载到V-Adapter B下。即设备A通过socket通信收到了设备B的MSG_DEV_ADV消息,从此消息中解析出V-Device B的设备信息,据此信息创建V-Adapter B、V-Device B,并向内核I2C子系统注册。然后,给设备B发送MSG_DEV_REP消息,设备B通过 socket通信收到了设备A的MSG_DEV_REP消息,关闭MSG_DEV_ADV消息定时器。
[0051]
步骤S120:在主虚拟控制总线与备虚拟控制总线之间建立套接字socket通信,来实现堆叠系统中主设备与备设备之间的I2C器件访问通信。
[0052]
具体地,当在堆叠系统中创建主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件后,该主虚拟器件通过该主虚拟控制总线挂载在该主虚拟控制器下,该备虚拟器件通过该备虚拟控制总线挂载在该备虚拟控制器下,即V-Device A通过V-BUS A挂载到V-Adapter A下,V-Device B通过V-BUS B挂载到V-Adapter B下,同时,在主虚拟控制总线与备虚拟控制总线之间建立套接字socket通信,来实现堆叠系统中主设备与备设备之间的I2C器件访问通信。即主虚拟控制总线V-BUS A与备虚拟控制总线V-BUS B之间建立套接字socket通信,以实现设备A(即主设备)与设备B(即备设备)之间的I2C器件访问通信。如图4所示,具体访问通信过程如下所示,包括:步骤S121:当该主设备对该备设备的器件进行读取操作时,通过打开该备虚拟器件的器件文件来发起读取操作,并通过该socket通信在该备设备与该主设备之间进行读取消息的交互处理,来使得该主设备读取出该备设备的器件的电子标签。
[0053]
具体地,当该主设备对该备设备的器件进行读取操作时,可通过打开该备虚拟器件的器件文件来发起读取操作,并通过该socket通信在该备设备与该主设备之间进行读取消息的交互处理,来使得该主设备读取出该备设备的器件的电子标签。具体体现为:首先,设备A(即主设备)打开V-Device B(备虚拟器件)的器件文件,发起read操作。接着,设备A的V-Device B驱动,发消息给设备B(即备设备)。即内核I2C子系统调用V-Alogrithm的xfer,该函数的原型如下:int(*master_xfer)(struct i2c_adapter*adap,struct i2c_msg*msgs,int num);
[0054]
xfer实现会将i2c_msg做下封装,封装格式如下:
[0055]
[表0002]
MSG ID i2c_msg

[0056]
此消息ID为MSG_RW_REQ,通过socket通信发送给设备B。
[0057]
设备B收到MSG_RW_REQ消息后,从中解析出i2c_msg,并找到V-Device B对应的P-Device B(即备设备的器件,亦即备器件),进而通过内核I2C子系统的P-Alogrithm B读取Dev-B的电子标签,并通过i2c_msg 返回给V-Device B,进而通过V-Alogrithm B封装成MSG_RW_ACK,通过socket通信发送设备A。需要注意的是V-Alogrithm B会对i2c_msg中的bus号做出修正。设备A收到MSG_RW_ACK消息后,从中解析出i2c_msg,并通过内核I2C子系统将读出的数据返回给read操作。至此,设备A读出了器件Dev-B的电子标签。
[0058]
步骤S122:当该备设备的器件进行拔出操作时,在该备设备的内核I2C子系统中注销该备设备的器件,并通过该socket通信在该备设备与该主设备之间进行删除消息的交互处理,以注销与该备设备的器件相关联的备虚拟器件,进而完成该备设备的器件的拔出处理。
[0059]
具体地,当该备设备的器件进行拔出操作时,可在该备设备的内核I2C子系统中注销该备设备的器件,并通过该socket通信在该备设备与该主设备之间进行删除消息的交互处理,以注销与该备设备的器件相关联的备虚拟器件,进而完成该备设备的器件的拔出处理。具体体现为:器件Dev-B(即备设备的器件,亦即备器件)拔出中断的处理中向内核I2C子系统注销P-Device B(即备设备的器件),当内核I2C子系统注销P-Device B,同时注销P-Device B关联的V-Device B(备虚拟器件),注销V-Device B时通过该socket通信向设备A发送MSG_DEV_DEL消息,设备A中内核I2C子系统对MSG_DEV_DEL消息的处理,注销V-Device B。至此,设备A、设备B完成对DEV-B的拔出处理。
[0060]
另外,如图5所示,本堆叠系统中I2C器件管理的方法还包括以下步骤:步骤S130:该主设备与该备设备分裂时,依次注销该备虚拟控制器及该主虚拟控制器。
[0061]
具体地,当该主设备与该备设备分裂时,即如图2所示,设备A与设备B断开连接,不再构成堆叠系统时,需依次注销该备虚拟控制器及该主虚拟控制器,即分别在相应的内核I2C子系统中注销该备虚拟控制器及该主虚拟控制器,同时,相应的备虚拟控制总线、备虚拟器件、主虚拟控制总线以及主虚拟器件亦需进行相应注销,注销顺序与创建顺序相反。
[0062]
步骤S140:该主设备与该备设备倒换时,需重启该堆叠系统,以重新对该堆叠系统进行启动初始化。
[0063]
具体地,当该主设备与该备设备倒换时,即如图2所示,设备A由主设备降为备设备,设备B由备设备升为主设备,此时,需重启该堆叠系统(此时,该堆叠系统中的主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟 控制器、备虚拟控制总线以及备虚拟器件均会被注销),以重新对该堆叠系统进行启动初始化,启动初始后,重新执行上述步骤,与之不同的时,设备B系统启动在之后与设备A的主备竞争中,获得了master的角色,即设备B变为主设备,此时,I2C控制器Adapter-B为主控制器,控制总线BUS-B为主控制总线,器件DEV-B为主器件,I2C器件P-Device B添加标志VSC-MASTER。与之同时,设备A系统启动在之后与设备B的主备竞争中,获得了slave的角色,即设备A变为备设备,此时,I2C控制器Adapter-A为备控制器,控制总线BUS-A为备控制总线,器件DEV-A为备器件,I2C器件P-Device A添加标志VSC-Slave。
[0064]
实施例三
[0065]
本发明实施例三提出一种计算机可读存储介质,该计算机可读存储介质存储有一个或者多个程序,该一个或者多个程序可被一个或者多个处理器执行,以实现以下如图1所示的具体步骤:步骤S110:启动初始化时,在堆叠系统中创建主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件。
[0066]
具体地,如图2所示,设备A和设备B组成一个堆叠系统,设备A上有一个I2C控制器Adpter-A及一个控制总线BUS-A,控制总线BUS-A下挂一个器件DEV-A;设备B上有一个I2C控制器Adpter-B及一个控制总线BUS-B,控制总线BUS-B下挂一个器件DEV-B。基于图2所示的堆叠系统为例,如图3所示,该步骤“启动初始化时,在堆叠系统中创建主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件”具体包括:步骤S111:启动初始化时,分别对该堆叠系统的主设备与备设备进行内核I2C子系统初始化,以在相应的内核I2C子系统为该主设备注册主控制器、主控制总线以及主器件,为该备设备注册备控制器、备控制总线以及备器件。
[0067]
步骤S112:在该堆叠系统中,对该主设备创建主虚拟控制器、主虚拟控制总线与主虚拟器件,对该备设备创建备虚拟控制器、备虚拟控制总线以及备虚拟器件。
[0068]
具体体现,如图2所示,先分别对设备A及设备B进行内核I2C子系统初始化,在进行设备A内核I2C子系统初始化时,执行以下动作:设备A内核I2C子系统初始化时,加载I2C控制器Adapter-A的驱动P-Adapter Driver,该驱动probe处理匹配上P-Adapter A,并向内核I2C子系统注册了控制器设备P-Adapter A及挂载其下的I2C器件P-Device A,挂载了控制总线BUS-A的算法P-Alogrithm A。之后加载Dev-A的驱动,该驱动匹配到了器件P-Device A。
[0069]
在进行设备B内核I2C子系统初始化时,执行以下动作:设备B内核I2C子系统初始化时,加载I2C控制器Adapter-B的驱动P-Adapter Driver,该驱动probe处理匹配上P-Adapter B,并向内核I2C子系统注册了控制器设备P-Adapter B及挂载其下的I2C器件P-Device B,挂载了控制总线BUS-B的算法P-Alogrithm B。之后加载Dev-B的驱动,该驱动匹配到了器件P-Device B。
[0070]
如果设备A系统启动在之后与设备B的主备竞争中,获得了master的角色,即设备A为主设备,I2C控制器Adapter-A为主控制器,控制总线BUS-A为主控制总线,器件DEV-A为主器件。在此节点,设备A加载主虚拟驱动V-Adapter Driver,该驱动probe处理匹配上主虚拟控制器V-Adapter A,并向内核I2C子系统注册了主虚拟控制器设备V-Adapter A,挂载了主虚拟控制总线V-BUS A的算法V-Alogrithm A。然后该驱动扫描了内核I2C子系统的设备链,对I2C器件P-Device A添加标志VSC-MASTER,创建主虚拟器件V-Device A(复制了P-Device A),与P-Device A关联,并向内核I2C子系统注册了V-Device A,通过V-BUS A挂载到V-Adapter下。之后,主虚拟驱动V-Adapter Driver创建与设备B的socket连接以及MSG_DEV_ADV消息定时器,该消息定时器每隔10s,向设备B发送MSG_DEV_ADV消息,该消息携带了V-Device A的设备信息。
[0071]
与之同时,设备B系统启动在之后与设备A的主备竞争中,获得了slave的角色,即设备B为备设备,I2C控制器Adapter-B为备控制器,控制总线BUS-B为备控制总线,器件DEV-B为备器件。在此节点,设备B加载备虚拟驱动V-Adapter Driver,该驱动probe处理匹配上备虚拟控制器V-Adapter B,并向内核I2C子系统注册了备虚拟控制器设备V-Adapter B,挂载了备虚拟控制总线V-BUS B的算法V-Alogrithm B。然后该驱动扫描了内核I2C子系统的设备链,对I2C器件P-Device B添加标志VSC-Slave,创建备虚拟器件V-Device B(复制了P-Device B),与P-Device B关联,并向内核I2C子系统注册了V-Device B,通过V-BUS B挂载到V-Adapter B下。即设备A通过socket通信收到了设备B的MSG_DEV_ADV消息,从此消息中解析出 V-Device B的设备信息,据此信息创建V-Adapter B、V-Device B,并向内核I2C子系统注册。然后,给设备B发送MSG_DEV_REP消息,设备B通过socket通信收到了设备A的MSG_DEV_REP消息,关闭MSG_DEV_ADV消息定时器。
[0072]
步骤S120:在主虚拟控制总线与备虚拟控制总线之间建立套接字socket通信,来实现堆叠系统中主设备与备设备之间的I2C器件访问通信。
[0073]
具体地,当在堆叠系统中创建主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件后,该主虚拟器件通过该主虚拟控制总线挂载在该主虚拟控制器下,该备虚拟器件通过该备虚拟控制总线挂载在该备虚拟控制器下,即V-Device A通过V-BUS A挂载到V-Adapter A下,V-Device B通过V-BUS B挂载到V-Adapter B下,同时,在主虚拟控制总线与备虚拟控制总线之间建立套接字socket通信,来实现堆叠系统中主设备与备设备之间的I2C器件访问通信。即主虚拟控制总线V-BUS A与备虚拟控制总线V-BUS B之间建立套接字socket通信,以实现设备A(即主设备)与设备B(即备设备)之间的I2C器件访问通信。如图4所示,具体访问通信过程如下所示,包括:步骤S121:当该主设备对该备设备的器件进行读取操作时,通过打开该备虚拟器件的器件文件来发起读取操作,并通过该socket通信在该备设备与该主设备之间进行读取消息的交互处理,来使得该主设备读取出该备设备的器件的电子标签。
[0074]
具体地,当该主设备对该备设备的器件进行读取操作时,可通过打开该备虚拟器件的器件文件来发起读取操作,并通过该socket通信在该备设备与该主设备之间进行读取消息的交互处理,来使得该主设备读取出该备设备的器件的电子标签。具体体现为:首先,设备A(即主设备)打开V-Device B(备虚拟器件)的器件文件,发起read操作。接着,设备A的V-Device B驱动,发消息给设备B(即备设备)。即内核I2C子系统调用V-Alogrithm的xfer,该函数的原型如下:int(*master_xfer)(struct i2c_adapter*adap,struct i2c_msg*msgs,int num);
[0075]
xfer实现会将i2c_msg做下封装,封装格式如下:
[0076]
[表0003]
MSG ID i2c_msg

[0077]
此消息ID为MSG_RW_REQ,通过socket通信发送给设备B。
[0078]
设备B收到MSG_RW_REQ消息后,从中解析出i2c_msg,并找到 V-Device B对应的P-Device B(即备设备的器件,亦即备器件),进而通过内核I2C子系统的P-Alogrithm B读取Dev-B的电子标签,并通过i2c_msg返回给V-Device B,进而通过V-Alogrithm B封装成MSG_RW_ACK,通过socket通信发送设备A。需要注意的是V-Alogrithm B会对i2c_msg中的bus号做出修正。设备A收到MSG_RW_ACK消息后,从中解析出i2c_msg,并通过内核I2C子系统将读出的数据返回给read操作。至此,设备A读出了器件Dev-B的电子标签。
[0079]
步骤S122:当该备设备的器件进行拔出操作时,在该备设备的内核I2C子系统中注销该备设备的器件,并通过该socket通信在该备设备与该主设备之间进行删除消息的交互处理,以注销与该备设备的器件相关联的备虚拟器件,进而完成该备设备的器件的拔出处理。
[0080]
具体地,当该备设备的器件进行拔出操作时,可在该备设备的内核I2C子系统中注销该备设备的器件,并通过该socket通信在该备设备与该主设备之间进行删除消息的交互处理,以注销与该备设备的器件相关联的备虚拟器件,进而完成该备设备的器件的拔出处理。具体体现为:器件Dev-B(即备设备的器件,亦即备器件)拔出中断的处理中向内核I2C子系统注销P-Device B(即备设备的器件),当内核I2C子系统注销P-Device B,同时注销P-Device B关联的V-Device B(备虚拟器件),注销V-Device B时通过该socket通信向设备A发送MSG_DEV_DEL消息,设备A中内核I2C子系统对MSG_DEV_DEL消息的处理,注销V-Device B。至此,设备A、设备B完成对DEV-B的拔出处理。
[0081]
另外,如图5所示,本堆叠系统中I2C器件管理的方法还包括以下步骤:步骤S130:该主设备与该备设备分裂时,依次注销该备虚拟控制器及该主虚拟控制器。
[0082]
具体地,当该主设备与该备设备分裂时,即如图2所示,设备A与设备B断开连接,不再构成堆叠系统时,需依次注销该备虚拟控制器及该主虚拟控制器,即分别在相应的内核I2C子系统中注销该备虚拟控制器及该主虚拟控制器,同时,相应的备虚拟控制总线、备虚拟器件、主虚拟控制总线以及主虚拟器件亦需进行相应注销,注销顺序与创建顺序相反。
[0083]
步骤S140:该主设备与该备设备倒换时,需重启该堆叠系统,以重新对该堆叠系统进行启动初始化。
[0084]
具体地,当该主设备与该备设备倒换时,即如图2所示,设备A由主设 备降为备设备,设备B由备设备升为主设备,此时,需重启该堆叠系统(此时,该堆叠系统中的主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件均会被注销),以重新对该堆叠系统进行启动初始化,启动初始后,重新执行上述步骤,与之不同的时,设备B系统启动在之后与设备A的主备竞争中,获得了master的角色,即设备B变为主设备,此时,I2C控制器Adapter-B为主控制器,控制总线BUS-B为主控制总线,器件DEV-B为主器件,I2C器件P-Device B添加标志VSC-MASTER。与之同时,设备A系统启动在之后与设备B的主备竞争中,获得了slave的角色,即设备A变为备设备,此时,I2C控制器Adapter-A为备控制器,控制总线BUS-A为备控制总线,器件DEV-A为备器件,I2C器件P-Device A添加标志VSC-Slave。
[0085]
本发明实施例提出的堆叠系统中I2C器件管理的方法、设备和存储介质,其通过在堆叠系统启动初始化时,在堆叠系统中创建主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件,以在该主虚拟控制总线与该备虚拟控制总线之间建立套接字socket通信,来实现该堆叠系统中主设备与备设备之间的I2C器件访问通信。这样一来,通过利用内核内核I2C子系统框架,在驱动层面处理堆叠系统I2C器件的访问,使得堆叠系统的主设备可以像访问本机器件一样访问备设备的I2C器件。可见,通过应用本技术方案,堆叠系统可在控制平面几乎不参与的情况下,完成主设备对备设备的I2C器件的访问,以在提升了堆叠系统的I2C器件访问可靠性的同时,有效减小了控制平面的负荷以及减小了控制平面的复杂度。
[0086]
实施例四
[0087]
本实施例四提供了一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述任意方法实施例中的方法。
[0088]
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。
[0089]
在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
[0090]
以上参照附图说明了本发明的优选实施例,并非因此局限本发明的权利范围。本领域技术人员不脱离本发明的范围和实质内所作的任何修改、等同替换和改进,均应在本发明的权利范围之内。

权利要求书

[权利要求 1]
一种堆叠系统中I2C器件管理的方法,其中,所述方法包括以下步骤: 启动初始化时,在堆叠系统中创建主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件; 在所述主虚拟控制总线与所述备虚拟控制总线之间建立套接字socket通信,来实现所述堆叠系统中主设备与备设备之间的I2C器件访问通信。
[权利要求 2]
根据权利要求1所述的堆叠系统中I2C器件管理的方法,其中,所述启动初始化时,在堆叠系统中创建主虚拟控制器、主虚拟控制总线、主虚拟器件、备虚拟控制器、备虚拟控制总线以及备虚拟器件的步骤包括: 启动初始化时,分别对所述堆叠系统的主设备与备设备进行内核I2C子系统初始化,以在相应的内核I2C子系统为所述主设备注册主控制器、主控制总线以及主器件,为所述备设备注册备控制器、备控制总线以及备器件。
[权利要求 3]
根据权利要求2所述的堆叠系统中I2C器件管理的方法,其中,所述启动初始化时,分别对所述堆叠系统的主设备与备设备进行内核I2C子系统初始化,以在相应的内核I2C子系统为所述主设备注册主控制器、主控制总线以及主器件,为所述备设备注册备控制器、备控制总线以及备器件的步骤之后,还包括: 在所述堆叠系统中,对所述主设备创建所述主虚拟控制器、所述主虚拟控制总线与所述主虚拟器件,对所述备设备创建所述备虚拟控制器、所述备虚拟控制总线以及所述备虚拟器件。
[权利要求 4]
根据权利要求1所述的堆叠系统中I2C器件管理的方法,其中,所述在所述主虚拟控制总线与所述备虚拟控制总线之间建立套接字socket通信,来实现所述堆叠系统中主设备与备设备之间的I2C器件访问通信的步骤包括: 当所述主设备对所述备设备的器件进行读取操作时,通过打开所述备虚拟 器件的器件文件来发起读取操作,并通过所述socket通信在所述备设备与所述主设备之间进行读取消息的交互处理,来使得所述主设备读取出所述备设备的器件的电子标签。
[权利要求 5]
根据权利要求4所述的堆叠系统中I2C器件管理的方法,其中,所述在所述主虚拟控制总线与所述备虚拟控制总线之间建立套接字socket通信,来实现所述堆叠系统中主设备与备设备之间的I2C器件访问通信的步骤还包括: 当所述备设备的器件进行拔出操作时,在所述备设备的内核I2C子系统中注销所述备设备的器件,并通过所述socket通信在所述备设备与所述主设备之间进行删除消息的交互处理,以注销与所述备设备的器件相关联的备虚拟器件,进而完成所述备设备的器件的拔出处理。
[权利要求 6]
根据权利要求1所述的堆叠系统中I2C器件管理的方法,其中,所述在所述主虚拟控制总线与所述备虚拟控制总线之间建立套接字socket通信,来实现所述堆叠系统中主设备与备设备之间的I2C器件访问通信的步骤之后,还包括以下步骤: 所述主设备与所述备设备分裂时,依次注销所述备虚拟控制器及所述主虚拟控制器。
[权利要求 7]
根据权利要求1所述的堆叠系统中I2C器件管理的方法,其中,所述在所述主虚拟控制总线与所述备虚拟控制总线之间建立套接字socket通信,来实现所述堆叠系统中主设备与备设备之间的I2C器件访问通信的步骤之后,还包括以下步骤: 所述主设备与所述备设备倒换时,需重启所述堆叠系统,以重新对所述堆叠系统进行启动初始化。
[权利要求 8]
根据权利要求1所述的堆叠系统中I2C器件管理的方法,其中,所述主虚拟器件通过所述主虚拟控制总线挂载在所述主虚拟控制器下,所述备虚拟器 件通过所述备虚拟控制总线挂载在所述备虚拟控制器下。
[权利要求 9]
一种堆叠系统中I2C器件管理的设备,其中,所述设备包括存储器、处理器、存储在所述存储器上并可在所述处理器上运行的程序以及用于实现所述处理器和所述存储器之间的连接通信的数据总线,所述程序被所述处理器执行时实现如权利要求1-8任一项所述的堆叠系统中I2C器件管理的方法的步骤。
[权利要求 10]
一种存储介质,用于计算机可读存储,其中,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现权利要求1至8中任一项所述的堆叠系统中I2C器件管理的方法的步骤。

附图

[ 图 1]  
[ 图 2]  
[ 图 3]  
[ 图 4]  
[ 图 5]  
[ 图 6]