CN117724877A - 硬件信息的获取方法及装置 - Google Patents
硬件信息的获取方法及装置 Download PDFInfo
- Publication number
- CN117724877A CN117724877A CN202311734926.9A CN202311734926A CN117724877A CN 117724877 A CN117724877 A CN 117724877A CN 202311734926 A CN202311734926 A CN 202311734926A CN 117724877 A CN117724877 A CN 117724877A
- Authority
- CN
- China
- Prior art keywords
- bus
- hardware
- determining
- instruction
- bmc
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 66
- 230000006870 function Effects 0.000 claims description 64
- 238000012545 processing Methods 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 16
- 230000015654 memory Effects 0.000 claims description 15
- 239000000758 substrate Substances 0.000 claims 4
- 238000005516 engineering process Methods 0.000 abstract description 6
- 230000008569 process Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 5
- 238000012544 monitoring process Methods 0.000 description 5
- 241000282326 Felis catus Species 0.000 description 4
- 238000013467 fragmentation Methods 0.000 description 4
- 238000006062 fragmentation reaction Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 239000000700 radioactive tracer Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请实施例提供了一种硬件信息的获取方法及装置,其中,该方法包括:获取目标基板管理控制器BMC发送的第一串行双线接口I2C指令,其中,第一I2C指令用于指示获取第一硬件的硬件信息;指示服务器的驱动内核确定所述第一I2C指令对应的第一I2C总线,并通过所述第一I2C总线对应的目标芯片对所述第一I2C总线执行占用操作;在成功占用所述第一I2C总线的情况下,指示所述BMC使用所述第一I2C总线获取所述第一硬件的硬件信息。通过本申请,解决了相关技术中多个BMC节点在访问服务器硬件资源时容易存在冲突的问题,进而避免了多个BMC节点在访问服务器硬件资源时发生冲突的现象。
Description
技术领域
本申请实施例涉及计算机领域,具体而言,涉及一种硬件信息的获取方法及装置。
背景技术
随着云服务的兴起,云空间,云存储环境的搭建越来越广泛。一般用户在厂商提供的管理系统中进行操作,这个管理系统厂商会进行自己的定制化的设计以及管理和访问权限的限制。这种服务一般使用智能网卡管理服务器,并且网卡中配有系统,如果智能网卡搭配与管理单个节点,会造成智能网卡中的中央处理器(Central Processing Unit,简称为CPU)内核的浪费,也增加服务器的整体成本,于是单个智能网卡管理两个或者多个节点的服务器形态逐步出现。
当单个智能网卡管理多个节点的服务器形态出现后,在结构上为了节省硬件资源,会出现多个节点同时监控或者控制同一硬件的场景,比如:两个节点的基板管理控制器(Baseboard Management Controller,简称为BMC)都需要进行电源供应单元(PowerSupply Unit,简称为PSU)信息的监控,都需要对系统风扇进行控制。当前对于PSU的监控为BMC通过PMBUS协议访问PSU的寄存器获取输入电压,输入电流,输入功耗等信息。对于风扇的控制为BMC通过串行双线接口(Inter-Integrated Circuit,简称为I2C)访问风扇板的复杂可编程逻辑器件(Complex Programmable Logic Device,简称为CPLD),对CPLD下发指令进行风扇转速的获取以及风扇转速的控制。
在服务器多节点配置时,多个BMC节点在监控管理上,存在共享硬件资源的情况。
针对相关技术中,多个BMC节点在访问服务器硬件资源时容易存在冲突的问题,目前尚未提出有效的解决方案。
因此,有必要对相关技术予以改良以克服相关技术中的所述缺陷。
发明内容
本申请实施例提供了一种硬件信息的获取方法及装置,以至少解决相关技术中多个BMC节点在访问服务器硬件资源时容易存在冲突的问题。
根据本申请的一个实施例,提供了一种硬件信息的获取方法,包括:获取目标基板管理控制器BMC发送的第一串行双线接口I2C指令,其中,第一I2C指令用于指示获取第一硬件的硬件信息;指示服务器的驱动内核确定所述第一I2C指令对应的第一I2C总线,并通过所述第一I2C总线对应的目标芯片对所述第一I2C总线执行占用操作;在成功占用所述第一I2C总线的情况下,指示所述BMC使用所述第一I2C总线获取所述第一硬件的硬件信息。
在一个示例性的实施例中,所述获取目标基板管理控制器BMC发送的第一串行双线接口I2C指令,包括:获取所述BMC使用目标线程发送的所述第一I2C指令;所述方法还包括:获取所述BMC使用所述目标线程发送的第二I2C指令,其中,所述第二I2C指令用于指示获取第二硬件的硬件信息,所述第一硬件与所述第二硬件对应的I2C总线相同。
在一个示例性的实施例中,所述通过所述I2C总线对应的目标芯片对所述第一I2C总线执行占用操作,包括:在所述第一I2C指令的等待时间内多次调用所述目标芯片对应的仲裁函数,执行以下仲裁流程,并在所述等待时间内存在仲裁函数的返回结果为指定值的情况下,确定成功占用所述第一I2C总线,在所述等待时间内不存在仲裁函数的返回结果为指定值的情况下,确定占用所述第一I2C总线失败,其中,在所述等待时间内确定仲裁函数的返回结果为指定值的情况下,停止调用所述目标芯片的仲裁函数:读取控制寄存器和状态寄存器的值,并根据所述控制寄存器和状态寄存器的值确定所述第一I2C总线的状态;在所述第一I2C总线的状态为关闭状态的情况下,对所述第一I2C总线执行占用操作;在成功占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果为所述指定值;在未成功占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果不为所述指定值;在所述第一I2C总线的状态为开启状态的情况下,对所述第一I2C总线执行占用操作;在成功占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果为所述指定值;在未成功占用所述第一I2C总线的情况下,确定是否存在节点占用所述第一I2C总线,并在确定存在节点占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果不为所述指定值。
在一个示例性的实施例中,所述通过所述第一I2C总线对应的目标芯片对所述第一I2C总线执行占用操作之后,所述方法还包括:在I2C总线的跟踪功能开启的情况下,从所述服务器的日志文件中获取所述仲裁函数执行的所述仲裁流程。
在一个示例性的实施例中,在所述指示服务器的驱动内核确定所述第一I2C指令对应的第一I2C总线之前,所述方法还包括:指示所述驱动内核通过设置所述服务器的设备树源文件,建立所述目标芯片与所述第一I2C总线的绑定关系。
在一个示例性的实施例中,所述指示服务器的驱动内核确定所述第一I2C指令对应的第一I2C总线,包括:指示所述驱动内核确定所述BMC向所述目标芯片发送时钟信号和数据信号所使用的I2C总线的总线号;根据所述总线号确定所述第一I2C指令对应的第一I2C总线。
在一个示例性的实施例中,所述根据所述总线号确定所述第一I2C指令对应的第一I2C总线,包括:在所述服务器中存在所述总线号标识的物理总线的情况下,将所述总线号标识的物理总线确定为所述第一I2C总线;在所述服务器中不存在所述总线号标识的物理总线的情况下,确定与虚拟总线的所述总线号具有对应关系的目标总线号,并将所述目标总线号标识的物理总线确定为所述第一I2C总线。
根据本申请的另一个实施例,提供了一种硬件信息的获取装置,包括:获取模块,用于获取目标基板管理控制器BMC发送的第一串行双线接口I2C指令,其中,第一I2C指令用于指示获取第一硬件的硬件信息;处理模块,用于指示服务器的驱动内核确定所述第一I2C指令对应的第一I2C总线,并通过所述第一I2C总线对应的目标芯片对所述第一I2C总线执行占用操作;指示模块,用于在成功占用所述第一I2C总线的情况下,指示所述BMC使用所述第一I2C总线获取所述第一硬件的硬件信息。
根据本申请的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本申请,在获取到BMC发送的第一I2C指令时,指示服务器的驱动内核确定第一I2C指令对应的第一I2C总线,并通过第一I2C总线对应的目标芯片对第一I2C总线执行占用操作;在成功占用第一I2C总线的情况下,指示BMC使用第一I2C总线获取第一硬件的硬件信息。由于在获取到I2C指令之后,会指示驱动内核通过第一I2C总线对应的目标芯片对第一I2C总线执行占用操作,并在占用成功的情况下,指示BMC使用第一I2C总线获取第一硬件的硬件信息。进而可以避免多个BMC同时使用I2C总线进行硬件资源的获取,因此,可以解决相关技术中多个BMC节点在访问服务器硬件资源时容易存在冲突的问题,进而避免了多个BMC节点在访问服务器硬件资源时发生冲突的现象。
附图说明
图1是本申请实施例的一种硬件信息的获取方法的服务器设备的硬件结构框图;
图2是根据本申请实施例的一种硬件信息的获取方法的流程图;
图3是根据本申请实施例的一种BMC与芯片的连接示意图;
图4是根据本申请实施例的另一种BMC与芯片的连接示意图;
图5是根据本申请实施例的另一种硬件信息的获取方法的流程图;
图6是根据本申请实施例的一种总线抢占仲裁过程的流程图;
图7是根据本申请实施例的一种硬件信息的获取装置的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请的实施例。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例中所提供的方法实施例可以在服务器设备或者类似的运算装置中执行。以运行在服务器设备上为例,图1是本申请实施例的一种硬件信息的获取方法的服务器设备的硬件结构框图。如图1所示,服务器设备可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,其中,上述服务器设备还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述服务器设备的结构造成限定。例如,服务器设备还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的硬件信息的获取方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至服务器设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括服务器设备的通信供应方提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种硬件信息的获取方法,图2是根据本申请实施例的一种硬件信息的获取方法的流程图,如图2所示,该流程包括如下步骤S202-S206:
步骤S202,获取目标基板管理控制器BMC发送的第一串行双线接口I2C指令,其中,第一I2C指令用于指示获取第一硬件的硬件信息;
作为一种可选的示例,第一硬件包括但不限于服务器中的电源分配板(PowerDistribution Board,简称为PDB)、风扇板。
BMC对PDB的PSU信息进行监控,包括但不限于:输入/输出电压,输入/输出电流,输入/输出功耗等;对于风扇板的监控包括对于风扇板CPLD的访问,温度sensor的访问,功耗芯片的访问。
在一个示例性的实施例中,上述步骤S202包括:获取所述BMC使用目标线程发送的所述第一I2C指令;
在上述步骤S202之前或者之后,还具有以下步骤:获取所述BMC使用所述目标线程发送的第二I2C指令,其中,所述第二I2C指令用于指示获取第二硬件的硬件信息,所述第一硬件与所述第二硬件对应的I2C总线相同。
也就是说,在本实施例中,对于同一个bus上的不同物理器件(如风扇板中的CPLD,温度芯片,功耗芯片)的访问放在同一个线程中顺序执行,避免不同线程抢占同一个bus。
步骤S204,指示服务器的驱动内核确定所述第一I2C指令对应的第一I2C总线,并通过所述第一I2C总线对应的目标芯片对所述第一I2C总线执行占用操作;
作为一种可选的示例,目标芯片可以为PCA9641,该芯片是一个二对一的具有仲裁功能的多路分解器。
在一个示例性的实施例中,在所述指示服务器的驱动内核确定所述第一I2C指令对应的第一I2C总线之前,所述方法还包括:指示所述驱劢内核通过设置所述服务器的设备树源文件,建立所述目标芯片不所述第一I2C总线的绑定关系。
需要说明的是,设备树源文件用于描述嵌入式系统硬件设备的一种数据结构和格式。设备树源文件通常用于Linux内核的设备树机制,用于描述嵌入式系统中各种硬件设备的配置信息,包括处理器、外设、总线、中断、内存等。通过使用设备树源文件,可以在不修改内核源代码的情冴下对硬件迚行配置和管理,从而实现硬件平台的可移植性和可扩展性。设备树源文件在嵌入式系统的开发中起着至关重要的作用。
作为一种可选的示例,可以通过以下代码完成目标芯片(pca9641)不第一I2C总线(I2C7)的绑定关系,即将目标芯片绑定到第一I2C总线中。
在一个示例性的实施例中,所述指示服务器的驱劢内核确定所述第一I2C指令对应的第一I2C总线,包括以下步骤S11-S12:
步骤S11:指示所述驱劢内核确定所述BMC向所述目标芯片发送时钟信号和数据信号所使用的I2C总线的总线号;
步骤S12:根据所述总线号确定所述第一I2C指令对应的第一I2C总线。
作为一种可选的示例,如图3所示,节点一不节点二分别通过BMC的I2C bus7的串行时钟线(Serial Clock Line,简称为SCL)/串行数据线(Serial Data Line,简称为SDA)信号,分别连入PCA9641的MST0_SCL/SDA,MST1_SCL/SDA,然后PCA9641的SLAVE_SDA/SCL信号分别连入风扇板的SCL/SDA信号中。
作为一种可选的示例,如图示4所示,节点一不节点二的BMC分别通过I2C bus12连接到PDB电源板的SLAVE_SDA/SCL。
需要说明的是,本申请实施例中的节点包括但不限于服务器中的主板。
在本实施例中,通过上述步骤S11-S12可以准确的确定第一I2C指令对应的I2C总线。
在一个示例性的实施例中,上述步骤S12包括步骤S121-S122:
步骤S121:在所述服务器中存在所述总线号标识的物理总线的情况下,将所述总线号标识的物理总线确定为所述第一I2C总线;
步骤S122:在所述服务器中不存在所述总线号标识的物理总线的情况下,确定与虚拟总线的所述总线号具有对应关系的目标总线号,并将所述目标总线号标识的物理总线确定为所述第一I2C总线。
也就是说,在服务器中不存在总线号标识的物理总线的情况下,确定总线号对应的总线为虚拟总线,进而需要对应确定出实际的物理总线,将对应的实际物理总线确定为第一I2C总线。
步骤S206,在成功占用所述第一I2C总线的情况下,指示所述BMC使用所述第一I2C总线获取所述第一硬件的硬件信息。
通过上述步骤S202-S206,在获取到BMC发送的第一I2C指令时,指示服务器的驱动内核确定第一I2C指令对应的第一I2C总线,并通过第一I2C总线对应的目标芯片对第一I2C总线执行占用操作;在成功占用第一I2C总线的情况下,指示BMC使用第一I2C总线获取第一硬件的硬件信息。由于在获取到I2C指令之后,会指示驱动内核通过第一I2C总线对应的目标芯片对第一I2C总线执行占用操作,并在占用成功的情况下,指示BMC使用第一I2C总线获取第一硬件的硬件信息。进而可以避免多个BMC同时使用I2C总线进行硬件资源的获取,因此,可以解决相关技术中多个BMC节点在访问服务器硬件资源时容易存在冲突的问题,进而避免了多个BMC节点在访问服务器硬件资源时发生冲突的现象。
其中,上述步骤的执行主体可以为服务器等,但不限于此。
在一个示例性的实施例中,上述通过所述I2C总线对应的目标芯片对所述第一I2C总线执行占用操作,包括:
在所述第一I2C指令的等待时间内多次调用所述目标芯片对应的仲裁函数,执行以下仲裁流程S21-S23,并在所述等待时间内存在仲裁函数的返回结果为指定值的情况下,确定成功占用所述第一I2C总线,在所述等待时间内不存在仲裁函数的返回结果为指定值的情况下,确定占用所述第一I2C总线失败,其中,在所述等待时间内确定仲裁函数的返回结果为指定值的情况下,停止调用所述目标芯片的仲裁函数:
S21:读取控制寄存器和状态寄存器的值,并根据所述控制寄存器和状态寄存器的值确定所述第一I2C总线的状态;
S22:在所述第一I2C总线的状态为关闭状态的情况下,对所述第一I2C总线执行占用操作;在成功占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果为所述指定值;在未成功占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果不为所述指定值;
S23:在所述第一I2C总线的状态为开启状态的情况下,对所述第一I2C总线执行占用操作;在成功占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果为所述指定值;在未成功占用所述第一I2C总线的情况下,确定是否存在节点占用所述第一I2C总线,并在确定存在节点占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果不为所述指定值。
在本实施例中,通过上述方式可以快速的实现对第一I2C总线的控制,提高了总线的抢占效率。
在一个示例性的实施例中,在通过所述第一I2C总线对应的目标芯片对所述第一I2C总线执行占用操作之后,所述方法还包括:在I2C总线的跟踪功能开启的情况下,从所述服务器的日志文件中获取所述仲裁函数执行的所述仲裁流程。
也就是说,在i2c trace功能打开的情况下,应用层发送任何一条指令时,均可以查看整个仲裁过程,后续出现问题时不再需要硬件飞线连通I2C协议分析仪进行分析,具体配置方式为:
在kernel的配置文件中添加CONFIG_ENABLE_DEFAULT_TRACERS=y,实际效果为:
cat/sys/kernel/debug/tracing/trace
echo nop>/sys/kernel/debug/tracing/current_tracer;
echo 1>/sys/kernel/debug/tracing/events/i2c/enable;
echo 1>/sys/kernel/debug/tracing/tracing_on;
cat/sys/kernel/debug/tracing/trace_pipe|grep-i detect&
i2cdetect-31811 [000]....23804.085709:i2c_write:i2c-16#0 a=003 f=0000 l=0[];
i2cdetect-31811 [000].n..23804.085741:i2c_write:i2c-7#0 a=070 f=0000 l=1[01];
i2cdetect-31811 [000].n..23804.085745:i2c_read:i2c-7#1 a=070 f=0001l=1
i2cdetect-31811 [000]....23804.086232:i2c_reply:i2c-7#1 a=070 f=0001 l=1[00]
i2cdetect-31811 [000].n..23804.086251:i2c_result:i2c-7 n=2 ret=2
i2cdetect-31811 [000].n..23804.086258:i2c_write:i2c-7#0 a=070 f=0000 l=1[02]
i2cdetect-31811 [000].n..23804.086260:i2c_read:i2c-7#1 a=070 f=0001l=1
i2cdetect-31811 [000]....23804.086908:i2c_reply:i2c-7#1 a=070 f=0001 l=1[c8]
在本实施例中,通过上述方法,可以在出现故障后,无需硬件将总线飞线,使用I2C分析已经数据得抓取,直接从日志文件中就能够看到完整得交互过程。
显然,上述所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。为了更好的理解上述方法,以下结合实施例对上述过程进行说明,但不用于限定本发明实施例的技术方案,具体地:
需要说明的是,基于本申请技术背景,BMC对于PSU以及风扇的管理与控制都是通过I2C实现的,在通信协议上均为maser端,PSU/FAN为slave端。由于两个BMC对于PSU以及风扇的管理都是实时进行的,某一时刻只能有一个maser与slave进行通信。那么需要对两个master访问进行仲裁。本申请提出硬件上使用芯片PCA9641解决此问题,该芯片是一个二对一的具有仲裁功能的多路分解器,软件上提出一种新型的抢占碎片化处理机制,不在用户空间的代码中多次执行操作暂用总线的处理方式,而是采用单次访问就进行抢占仲裁的方式。同时提供一种可以获取I2C交互整体过程的方式,不再需要加入I2C分析仪去分析维问题,不同bus下的PCA9641在内核注册后固定I2C总线,不是随机分配。
需要说明的是,如果在用户空间使用该芯片,软件设计如图5所示:当BMC运行进入风扇板轮询进程中,首先通过控制PCA9641占用总线,如果占用不成功则retry三次,重新进行占用,之后判断是否占用成功,如果成功则进行风扇板上温度信息的获取、功耗信息的获取,完成后进入下一次循环中。需要说明的是,当前这种处理方式会出现一个node长时间占用总线,另一个node无法访问的情况,这样抢占为整块时间的访问。并且任何一个I2C总线上连接有PCA9641器件时,都需要考虑到抢占这个代码的实现,这种方式比较繁琐。本申请提出的方案中会将这个仲裁过程体现在驱动内核中,应用程序在使用时不再需要考虑仲裁的过程,驱动层会在每次调用I2C指令的时候完成这个过程,将块访问时间变成碎片。减少上层逻辑,减低故障概率。
本申请提出的基于BMC的多主抢占碎片化处理方式,在硬件上设计如图3所示:节点一与节点二分别通过BMC的I2C bus7的SCL/SDA信号,分别连入PCA9641的MST0_SCL/SDA,MST1_SCL/SDA,然后PCA9641的SLAVE_SDA/SCL信号分别连入风扇板的SCL/SDA信号中。如图4所示为节点一与节点二的BMC分别通过I2C bus12连接到PDB的SLAVE_SDA/SCL。软件设计上BMC需要对PDB电源板的PSU信息进行监控,包括输入/输出电压,输入/输出电流,输入/输出功耗等。对于风扇板的监控包括对于风扇板复杂可编程逻辑器件(ComplexProgrammable Logic Device,简称为CPLD)的访问,温度传感器(sensor)的访问,功耗芯片的访问。所以当前对于同一个bus上的不同物理器件(如风扇板中的CPLD,温度,功耗芯片)的访问放在同一个线程中顺序执行,避免不同线程抢占同一个bus。
需要说明的是,PCA9641的仲裁机制在驱动层的实现如图6所示,该流程包括如下步骤:
步骤1:当用户空间接收到单条的I2C指令后,内核空间进行执行函数pca9641_Select_chan函数,函数进入仲裁流程,如果仲裁函数返回0(即上述实施例中的非指定值),则退出pca9641_Select_chan,否则进入步骤2;
步骤2:读取状态以及控制寄存器得读值,判断是否处于bus off状态,如果处于bus off状态则进入步骤3;否则进入步骤7;
步骤3:进行总线控制;
步骤4:判断是否控制总线成功,如果成功进入步骤5,否则进入步骤6;
步骤5:连接总线,设置等待时间,仲裁函数返回1(即上述实施例中的指定值);
步骤6:设置等待时间,仲裁函数返回0;
步骤7:判断是否控制总线成功,成功则连接总线,函数返回1,否则进入步骤8;
步骤8:判断是否其他master控制了总线,如果其他master控制了总线则进行总线控制,设置等待时间,返回0;
步骤9:pca9641_Select_chan函数判断仲裁函数返回是否为0,如果为0,退出该函数,否则进入步骤10;
步骤10:判断是否设置可等待时间,如果设置了等待时间,则等待,进入步骤11;
步骤11:判断是否超时,没有超时则进入步骤1,否则退出函数pca9641_Select_chan。
需要说明的是,整体的内核的实现步骤如下:
步骤1:设置设备树源文件(Device Tree Source file,简称为DTS)文件,将PCA9641绑定到I2C总线中;
步骤1的代码实现过程如下:
步骤2:修改驱动函数,设置mux的adapter;
步骤2的代码实现过程如下:
muxc=i2c_mux_alloc(adap,&client->dev,1,sizeof(*data),I2C_MUX_ARBITRATOR,pca9541_select_chan,pca9541_release_chan);
将mux adapter绑定到总线上,为i2c总线绑定master仲裁器
i2c_mux_add_adapter(muxc,0,0,0);
步骤3:对pca9641创建别名,绑定在固定bus上,而不随机变化,这样有利于应用层程序调用;
步骤3的代码实现过程如下:
aliases{
serial0=&uart1;
serial1=&uart2;
serial2=&uart3;
serial3=&uart4;
serial4=&uart5;
i2c16=&test000;
i2c17=&test001;
i2c18=&test002;
};
&i2c6{
status=″okay″;
pca9541a@70{
compatible=″nxp,pca9641″;
reg=<0x70>;
#address-cells=<1>;
#size-cells=<0>;
test001:i2c-arb{
};
};
};
步骤4:将i2c trace功能打开,应用层发送任何一条指令时,均可以查看整个中仲裁过程,后续出现问题时不再需要硬件飞线连通I2C协议分析仪进行分析;
步骤4的代码实现过程如下:
在kernel的配置文件中添加CONFIG_ENABLE_DEFAULT_TRACERS=y,实际效果为:
cat/sys/kernel/debug/tracing/trace
echo nop>/sys/kernel/debug/tracing/current_tracer;
echo 1>/sys/kernel/debug/tracing/events/i2c/enable;
echo 1>/sys/kernel/debug/tracing/tracing_on;
cat/sys/kernel/debug/tracing/trace_pipe|grep-i detect&
i2cdetect-31811 [000]....23804.085709:i2c_write:i2c-16#0 a=003 f=0000 l=0[]
i2cdetect-31811 [000].n..23804.085741:i2c_write:i2c-7#0 a=070 f=0000 l=1[01]
i2cdetect-31811 [000].n..23804.085745:i2c_read:i2c-7#1 a=070 f=0001l=1
i2cdetect-31811 [000]....23804.086232:i2c_reply:i2c-7#1 a=070 f=0001 l=1[00]
i2cdetect-31811 [000].n..23804.086251:i2c_result:i2c-7 n=2 ret=2
i2cdetect-31811 [000].n..23804.086258:i2c_write:i2c-7#0 a=070 f=0000 l=1[02]
i2cdetect-31811 [000].n..23804.086260:i2c_read:i2c-7#1 a=070 f=0001l=1
i2cdetect-31811 [000]....23804.086908:i2c_reply:i2c-7#1 a=070 f=0001 l=1[c8]
需要说明的是,应用层使用该机器时,无需再次考虑仲裁过程,直接发送I2Cread/write函数即可。对应的I2C总线的号码为aliases对应的。
需要说明的是,本申请提出了一种基于BMC的多主抢占碎片化处理方式。该方案解决了两个节点共享硬件资源的仲裁问题,同时将应用层的整块时间占用总线的方式转化内核中进行零碎化的处理,单条的I2C指令在内核层就进行了仲裁,应用层无感知。这样无论有几个这样的设备,都不再需要在对应得监控线程中进行应用层得仲裁,便于扩展,同时也降低了故障出错率,减少了硬件资源以及软件问题定位成本,具有客观的经济效益。
此外,本申请提出硬件上使用芯片PCA9641解决此问题,该芯片是一个二对一的具有仲裁功能的多路分解器,可以实现双主对于同一硬件资源得抢占仲裁;提出一种将软件上整块时间占用总线得仲裁方式转化为内核中单条指令仲裁得碎片化处理得思路,这样硬件设计上有几路总线上有该器件,应用层得监控程序都无须再进行整块时间占用得仲裁处理;在内核处理中,提出使用aliases将不同总线中PCA9641器件虚拟总线地址进行固定,而不是随机产生,这样应用层才可以直接调用,否则会出现bus号无法对应得问题;提出了一种打开总线trace得方法,这样如果出现故障后,无需硬件将总线飞线,使用II2C分析已经数据得抓取,直接从日志文件中就能够看到完整得交互过程。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
在本实施例中还提供了一种硬件信息的获取装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图7是根据本申请实施例的一种硬件信息的获取装置的结构框图,如图7所示,该装置包括:
获取模块72,用于获取目标基板管理控制器BMC发送的第一串行双线接口I2C指令,其中,第一I2C指令用于指示获取第一硬件的硬件信息;
处理模块74,用于指示服务器的驱动内核确定所述第一I2C指令对应的第一I2C总线,并通过所述第一I2C总线对应的目标芯片对所述第一I2C总线执行占用操作;
指示模块76,用于在成功占用所述第一I2C总线的情况下,指示所述BMC使用所述第一I2C总线获取所述第一硬件的硬件信息。
通过上述装置,由于在获取到I2C指令之后,会指示驱动内核通过第一I2C总线对应的目标芯片对第一I2C总线执行占用操作,并在占用成功的情况下,指示BMC使用第一I2C总线获取第一硬件的硬件信息。进而可以避免多个BMC同时使用I2C总线进行硬件资源的获取,因此,可以解决相关技术中多个BMC节点在访问服务器硬件资源时容易存在冲突的问题,进而避免了多个BMC节点在访问服务器硬件资源时发生冲突的现象。
在一个示例性的实施例中,获取模块72,还用于获取所述BMC使用目标线程发送的所述第一I2C指令;获取所述BMC使用所述目标线程发送的第二I2C指令,其中,所述第二I2C指令用于指示获取第二硬件的硬件信息,所述第一硬件与所述第二硬件对应的I2C总线相同。
在一个示例性的实施例中,处理模块74,还用于在所述第一I2C指令的等待时间内多次调用所述目标芯片对应的仲裁函数,执行以下仲裁流程,并在所述等待时间内存在仲裁函数的返回结果为指定值的情况下,确定成功占用所述第一I2C总线,在所述等待时间内不存在仲裁函数的返回结果为指定值的情况下,确定占用所述第一I2C总线失败,其中,在所述等待时间内确定仲裁函数的返回结果为指定值的情况下,停止调用所述目标芯片的仲裁函数:读取控制寄存器和状态寄存器的值,并根据所述控制寄存器和状态寄存器的值确定所述第一I2C总线的状态;在所述第一I2C总线的状态为关闭状态的情况下,对所述第一I2C总线执行占用操作;在成功占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果为所述指定值;在未成功占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果不为所述指定值;在所述第一I2C总线的状态为开启状态的情况下,对所述第一I2C总线执行占用操作;在成功占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果为所述指定值;在未成功占用所述第一I2C总线的情况下,确定是否存在节点占用所述第一I2C总线,并在确定存在节点占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果不为所述指定值。
在一个示例性的实施例中,所述装置还包括:显示模块,用于通过所述第一I2C总线对应的目标芯片对所述第一I2C总线执行占用操作之后,在I2C总线的跟踪功能开启的情况下,从所述服务器的日志文件中获取所述仲裁函数执行的所述仲裁流程。
在一个示例性的实施例中,所述装置还包括:绑定模块,用于在指示服务器的驱动内核确定所述第一I2C指令对应的第一I2C总线之前,指示所述驱动内核通过设置所述服务器的设备树源文件,建立所述目标芯片与所述第一I2C总线的绑定关系。
在一个示例性的实施例中,处理模块74,还用于指示所述驱动内核确定所述BMC向所述目标芯片发送时钟信号和数据信号所使用的I2C总线的总线号;根据所述总线号确定所述第一I2C指令对应的第一I2C总线。
在一个示例性的实施例中,处理模块74,还用于在所述服务器中存在所述总线号标识的物理总线的情况下,将所述总线号标识的物理总线确定为所述第一I2C总线;在所述服务器中不存在所述总线号标识的物理总线的情况下,确定与虚拟总线的所述总线号具有对应关系的目标总线号,并将所述目标总线号标识的物理总线确定为所述第一I2C总线。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本申请的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种硬件信息的获取方法,其特征在于,
包括:
获取目标基板管理控制器BMC发送的第一串行双线接口I2C指令,其中,第一I2C指令用于指示获取第一硬件的硬件信息;
指示服务器的驱动内核确定所述第一I2C指令对应的第一I2C总线,并通过所述第一I2C总线对应的目标芯片对所述第一I2C总线执行占用操作;
在成功占用所述第一I2C总线的情况下,指示所述BMC使用所述第一I2C总线获取所述第一硬件的硬件信息。
2.根据权利要求1所述的方法,其特征在于,
所述获取目标基板管理控制器BMC发送的第一串行双线接口I2C指令,包括:
获取所述BMC使用目标线程发送的所述第一I2C指令;
所述方法还包括:
获取所述BMC使用所述目标线程发送的第二I2C指令,其中,所述第二I2C指令用于指示获取第二硬件的硬件信息,所述第一硬件与所述第二硬件对应的I2C总线相同。
3.根据权利要求1所述的方法,其特征在于,
所述通过所述I2C总线对应的目标芯片对所述第一I2C总线执行占用操作,包括:
在所述第一I2C指令的等待时间内多次调用所述目标芯片对应的仲裁函数,执行以下仲裁流程,并在所述等待时间内存在仲裁函数的返回结果为指定值的情况下,确定成功占用所述第一I2C总线,在所述等待时间内不存在仲裁函数的返回结果为指定值的情况下,确定占用所述第一I2C总线失败,其中,在所述等待时间内确定仲裁函数的返回结果为指定值的情况下,停止调用所述目标芯片的仲裁函数:
读取控制寄存器和状态寄存器的值,并根据所述控制寄存器和状态寄存器的值确定所述第一I2C总线的状态;
在所述第一I2C总线的状态为关闭状态的情况下,对所述第一I2C总线执行占用操作;
在成功占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果为所述指定值;在未成功占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果不为所述指定值;
在所述第一I2C总线的状态为开启状态的情况下,对所述第一I2C总线执行占用操作;在成功占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果为所述指定值;在未成功占用所述第一I2C总线的情况下,确定是否存在节点占用所述第一I2C总线,并在确定存在节点占用所述第一I2C总线的情况下,设置等待时间,并确定所述仲裁函数的返回结果不为所述指定值。
4.根据权利要求3所述的方法,其特征在于,
所述通过所述第一I2C总线对应的目标芯片对所述第一I2C总线执行占用操作之后,所述方法还包括:
在I2C总线的跟踪功能开启的情况下,从所述服务器的日志文件中获取所述仲裁函数执行的所述仲裁流程。
5.根据权利要求1所述的方法,其特征在于,
在所述指示服务器的驱动内核确定所述第一I2C指令对应的第一I2C总线之前,所述方法还包括:
指示所述驱动内核通过设置所述服务器的设备树源文件,建立所述目标芯片与所述第一I2C总线的绑定关系。
6.根据权利要求1所述的方法,其特征在于,
所述指示服务器的驱动内核确定所述第一I2C指令对应的第一I2C总线,包括:
指示所述驱动内核确定所述BMC向所述目标芯片发送时钟信号和数据信号所使用的I2C总线的总线号;
根据所述总线号确定所述第一I2C指令对应的第一I2C总线。
7.根据权利要求6所述的方法,其特征在于,
所述根据所述总线号确定所述第一12C指令对应的第一I2C总线,包括:
在所述服务器中存在所述总线号标识的物理总线的情况下,将所述总线号标识的物理总线确定为所述第一I2C总线;
在所述服务器中不存在所述总线号标识的物理总线的情况下,确定与虚拟总线的所述总线号具有对应关系的目标总线号,并将所述目标总线号标识的物理总线确定为所述第一12C总线。
8.一种硬件信息的获取装置,其特征在于,
包括:
获取模块,用于获取目标基板管理控制器BMC发送的第一串行双线接口I2C指令,其中,第一I2C指令用于指示获取第一硬件的硬件信息;
处理模块,用于指示服务器的驱动内核确定所述第一I2C指令对应的第一I2C总线,并通过所述第一I2C总线对应的目标芯片对所述第一I2C总线执行占用操作;
指示模块,用于在成功占用所述第一I2C总线的情况下,指示所述BMC使用所述第一I2C总线获取所述第一硬件的硬件信息。
9.一种计算机可读存储介质,其特征在于,
所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至7任一项中所述的方法的步骤。
10.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,
所述处理器执行所述计算机程序时实现所述权利要求1至7任一项中所述的方法的步骤。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202311734926.9A CN117724877A (zh) | 2023-12-15 | 2023-12-15 | 硬件信息的获取方法及装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202311734926.9A CN117724877A (zh) | 2023-12-15 | 2023-12-15 | 硬件信息的获取方法及装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN117724877A true CN117724877A (zh) | 2024-03-19 |
Family
ID=90201081
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202311734926.9A Pending CN117724877A (zh) | 2023-12-15 | 2023-12-15 | 硬件信息的获取方法及装置 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN117724877A (zh) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN118409803A (zh) * | 2024-04-03 | 2024-07-30 | 超聚变数字技术有限公司 | 一种通信方法及服务器 |
| CN119645905A (zh) * | 2024-11-27 | 2025-03-18 | 苏州元脑智能科技有限公司 | 多节点服务器访问方法、装置、计算机设备和存储介质 |
-
2023
- 2023-12-15 CN CN202311734926.9A patent/CN117724877A/zh active Pending
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN118409803A (zh) * | 2024-04-03 | 2024-07-30 | 超聚变数字技术有限公司 | 一种通信方法及服务器 |
| CN119645905A (zh) * | 2024-11-27 | 2025-03-18 | 苏州元脑智能科技有限公司 | 多节点服务器访问方法、装置、计算机设备和存储介质 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN116541227B (zh) | 故障诊断方法、装置、存储介质、电子装置及bmc芯片 | |
| CN117555760B (zh) | 服务器监测方法及装置、基板控制器及嵌入式系统 | |
| EP3168752B1 (en) | Chipset and server system using the same | |
| US20110078350A1 (en) | Method for generating multiple serial bus chip selects using single chip select signal and modulation of clock signal frequency | |
| CN116627520B (zh) | 基板管理控制器的系统运行方法以及基板管理控制器 | |
| KR20120112454A (ko) | 분산된 멀티코어 메모리 초기화 | |
| CN117724877A (zh) | 硬件信息的获取方法及装置 | |
| CN118708519B (zh) | 服务器拓展模组、服务器、配置方法、设备及介质 | |
| CN116302141B (zh) | 串口切换方法、芯片及串口切换系统 | |
| CN115599617B (zh) | 总线检测方法、装置、服务器及电子设备 | |
| CN116848519A (zh) | 硬件接口信号的生成方法、装置及电子设备 | |
| CN119336668B (zh) | 网卡的管理方法及装置 | |
| CN118260223B (zh) | 双主设备的总线电路、总线控制方法及装置 | |
| US6584586B1 (en) | Apparatus and method for capturing and transferring internal system activity | |
| EP2761483B1 (en) | Protocol neutral fabric | |
| CN118245228A (zh) | Cxl交换板卡、cxl内存分配系统、分配方法及装置 | |
| US10088523B2 (en) | Debug adapter | |
| CN113688085A (zh) | 一种pci-e设备的服务器接口管理结构和方法 | |
| CN116719563A (zh) | 内存信息获取方法、装置、设备及存储介质 | |
| CN119669120B (zh) | 一种卷管理设备功能的配置方法、装置、电子设备和存储介质 | |
| CN118377513B (zh) | 服务器的信息管理方法及装置 | |
| CN120407482B (zh) | 型号确定系统、方法、电子设备、存储介质及产品 | |
| CN118642979A (zh) | 适用不同类型PCIe Switch连接设备的统一排序方法及系统 | |
| Yin et al. | Design of the VME Bus Controller Module based on ARM | |
| JP2001084161A (ja) | データ処理装置 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination |