CN109408429B - 一种低速接口的缓存方法与装置 - Google Patents

一种低速接口的缓存方法与装置 Download PDF

Info

Publication number
CN109408429B
CN109408429B CN201811293225.5A CN201811293225A CN109408429B CN 109408429 B CN109408429 B CN 109408429B CN 201811293225 A CN201811293225 A CN 201811293225A CN 109408429 B CN109408429 B CN 109408429B
Authority
CN
China
Prior art keywords
cache
bus
iomap
layer
hardware
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.)
Active
Application number
CN201811293225.5A
Other languages
English (en)
Other versions
CN109408429A (zh
Inventor
王鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Inspur Intelligent Technology Co Ltd
Original Assignee
Suzhou Inspur Intelligent Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Suzhou Inspur Intelligent Technology Co Ltd filed Critical Suzhou Inspur Intelligent Technology Co Ltd
Priority to CN201811293225.5A priority Critical patent/CN109408429B/zh
Publication of CN109408429A publication Critical patent/CN109408429A/zh
Application granted granted Critical
Publication of CN109408429B publication Critical patent/CN109408429B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/36Handling requests for interconnection or transfer for access to common bus or bus system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种低速接口的缓存方法与装置,包括:在iomap层读写外部寄存器,获取并封装外部寄存器的硬件信息;在iocache层针对硬件信息而加载相应的缓存,并根据缓存发出访问硬件设备的指令;在bus层通过相应的总线根据该指令与硬件设备交互;在iocache层按需卸载相应的缓存。本发明的技术方案能够针对不同寄存器或不同类型的寄存器进行对低速接口的缓存,降低了驱动读写外设寄存器的逻辑操作复杂度,提高了低速I/O设备的访问效率。

Description

一种低速接口的缓存方法与装置
技术领域
本发明涉及计算机领域,并且更具体地,特别是涉及一种低速接口的缓存方法与装置。
背景技术
现有的内核驱动中,操作硬件寄存器的一般逻辑如图1所示。操作寄存器的逻辑大量存在于现有linux内核驱动代码中,它不会因为内核子系统的不同而出现差异,是当前内核中一种普遍适用的寄存器操作逻辑。当前内核的低速设备子系统发起访问硬件寄存器操作时,并没有做更精细化的缓存操作,而是统一使用了线性数组缓存,因此在硬件寄存器的访问效率上还有优化空间。比如编写一个I2C接口的临时传感器驱动时,因为寄存器数量有限,所以使用线性数组缓存寄存器没有问题;但比如像MMC控制器这样的复杂硬件逻辑,涉及的寄存器数量多,再采用线性数组做缓存的策略就会浪费过多的内存空间,而且更重要的是采用线性索引的方式去大量寄存器中查找要访问的某一寄存器的速度会不理想;再比如像NIC这种对访问延迟敏感的设备,寄存器的快速访问更显得尤为重要。由此可见,现有技术的方法破坏了驱动本身的简洁性,降低了代码的逻辑清晰度;而且相同代码逻辑不得不重复出现在每份驱动代码中,从软件设计上讲也不合理。
针对现有技术中操作逻辑重复和寄存器访问速度慢导致延时长、效率低的问题,目前尚未有有效的解决方案。
发明内容
有鉴于此,本发明实施例的目的在于提出一种低速接口的缓存方法与装置,能够针对不同寄存器或不同类型的寄存器进行对低速接口的缓存,降低了驱动读写外设寄存器的逻辑操作复杂度,提高了低速I/O设备的访问效率。
基于上述目的,本发明实施例的一方面提供了一种低速接口的缓存方法,包括以下步骤:
在iomap层读写外部寄存器,以获取并封装外部寄存器的硬件信息;
在iocache层针对硬件信息而加载相应的缓存,并根据缓存发出访问硬件设备的指令;
在bus层通过相应的总线根据该指令与硬件设备交互;
在iocache层按需卸载相应的缓存。
在一些实施方式中,外部寄存器为外部驱动器的寄存器,外部驱动器用于驱动硬件设备;外部寄存器的硬件信息包括以下至少之一:寄存器数量、位宽、书写属性、缓存类型。
在一些实施方式中,在iomap层获取并封装外部寄存器的硬件信息包括:实例化负责封装硬件信息的struct iomap_config并调用iomap_init_xxx将硬件信息传输到iocache层。
在一些实施方式中,在iomap层读写外部寄存器包括:调用iomap_read/iomap_write读写外部寄存器。
在一些实施方式中,在iocache层根据缓存发出访问硬件设备的指令包括:确定缓存的缓存类型、并根据缓存类型来发出访问硬件设备的指令。
在一些实施方式中,缓存类型为以下之一:flat、lzo、rbtree,其中在外部寄存器较少时确定缓存类型为flat,在外部寄存器适中时确定缓存类型为lzo,在外部寄存器较多时确定缓存类型为rbtree。
在一些实施方式中,确定缓存类型包括以下步骤:
在读写外部寄存器时检测cache_type是否赋值和cache_bypass是否需要绕过;
当cache_type有赋值并且cache_bypass不需要绕过时,调用iocache_read/iocache_write从缓存中获得赋值,或调用相应的总线传输函数从硬件设备读取赋值;
根据cache_type赋值确定缓存类型。
在一些实施方式中,在bus层通过相应的总线访问硬件设包括:通过相应的总线连接子系统,其中总线包括以下至少之一:I2C、SPI、AC97、MMIO、SPMI。
本发明实施例的另一方面,还提供了一种低速接口的缓存装置,包括:
至少一个处理器;和
存储器,存储有处理器可运行的程序代码,其中程序代码在由处理器运行时执行上述的方法。
本发明实施例的另一方面,还提供了一种驱动系统,包括:
基于特定总线的驱动器;
上述的低速接口的缓存装置,其在iomap层通过特定总线而连接到相应的驱动器;
基于特定总线的子系统,其通过特定总线连接到相应的低速接口的缓存装置的bus层;
基于特定总线的硬件设备,其通过特定总线连接到相应的子系统。
本发明具有以下有益技术效果:本发明实施例提供的低速接口的缓存方法与装置,通过在iomap层读写外部寄存器,以获取并封装外部寄存器的硬件信息,在iocache层针对硬件信息而加载相应的缓存,并根据缓存发出访问硬件设备的指令,在bus层通过相应的总线根据该指令与硬件设备交互,在iocache层按需卸载相应的缓存的技术方案,能够针对不同寄存器或不同类型的寄存器进行对低速接口的缓存,降低了驱动读写外设寄存器的逻辑操作复杂度,提高了低速I/O设备的访问效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
图1为现有技术的硬件寄存器操作逻辑示意图;
图2为本发明提供的低速接口的缓存方法的流程示意图;
图3为本发明提供的低速接口的缓存方法的iomap的层级图;
图4为本发明提供的低速接口的缓存方法的底层软件逻辑示意图;
图5为本发明提供的低速接口的缓存方法的硬件寄存器操作逻辑示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”、“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。
基于上述目的,本发明实施例的第一个方面,提出了一种能够针对不同寄存器或不同类型的寄存器进行对低速接口的缓存的方法的实施例。图2示出的是本发明提供的低速接口的缓存方法的实施例的流程示意图。
所述低速接口的缓存方法,包括以下步骤:
步骤S101,在iomap层读写外部寄存器,以获取并封装外部寄存器的硬件信息;
步骤S103,在iocache层针对硬件信息而加载相应的缓存,并根据缓存发出访问硬件设备的指令;
步骤S105,在bus层通过相应的总线根据该指令与硬件设备交互;
步骤S107,在iocache层按需卸载相应的缓存。
本发明实施例使用iomap机制来抽离驱动中硬件寄存器的重复操作逻辑,提供通用的硬件寄存器访问接口;另外还在相关的消费者驱动和供应商驱动之间做缓存,提供多种缓存策略,提高访问效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(ROM)或随机存储记忆体(RAM)等。所述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。
在一些实施方式中,外部寄存器为外部驱动器的寄存器,外部驱动器用于驱动硬件设备;外部寄存器的硬件信息包括以下至少之一:寄存器数量、位宽、书写属性、缓存类型。
在一些实施方式中,在iomap层获取并封装外部寄存器的硬件信息包括:实例化负责封装硬件信息的struct iomap_config并调用iomap_init_xxx将硬件信息传输到iocache层。
在一些实施方式中,在iomap层读写外部寄存器包括:调用iomap_read/iomap_write读写外部寄存器。
在一些实施方式中,在iocache层根据缓存发出访问硬件设备的指令包括:确定缓存的缓存类型、并根据缓存类型来发出访问硬件设备的指令。
在一些实施方式中,缓存类型为以下之一:flat、lzo、rbtree,其中在外部寄存器较少时确定缓存类型为flat,在外部寄存器适中时确定缓存类型为lzo,在外部寄存器较多时确定缓存类型为rbtree。
在一些实施方式中,确定缓存类型包括以下步骤:
在读写外部寄存器时检测cache_type是否赋值和cache_bypass是否需要绕过;
当cache_type有赋值并且cache_bypass不需要绕过时,调用iocache_read/iocache_write从缓存中获得赋值,或调用相应的总线传输函数从硬件设备读取赋值;
根据cache_type赋值确定缓存类型。
根据本发明实施例公开的方法还可以被实现为由CPU执行的计算机程序,该计算机程序可以存储在计算机可读存储介质中。在该计算机程序被CPU执行时,执行本发明实施例公开的方法中限定的上述功能。此外,上述方法步骤也可以利用控制器以及用于存储使得控制器实现上述步骤功能的计算机程序的计算机可读存储介质实现。
在一些实施方式中,在bus层通过相应的总线访问硬件设备包括:通过相应的总线连接子系统,其中总线包括以下至少之一:I2C、SPI、AC97、MMIO、SPMI。
结合这里的公开所描述的各种示例性算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现所述的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。
下面根据具体实施例来进一步阐述本发明的详细实施方式。
iomap框架分为3层,其拓扑层级如图3所示。
iomap层直接和驱动对接,为驱动封装最终需要的API。从驱动程序使用角度来说,它只需要做两步工作,一是实例化一个struct iomap_config并调用iomap_init_xxx函数将其传给iocache层,struct iomap_config结构体负责封装外设寄存器相关硬件信息,包括寄存器数量、位宽、书写属性、缓存类型等,iocache层会依据struct iomap_config中的信息完成初始化缓存类型、绑定实际总线操作接口函数等;二是实际调用iomap_read/iomap_write函数发起寄存器的读写动作。
iocache层负责实现缓存策略的实现,核心结构体为struct regcache_ops,每个具体的缓存算法都要实例化一个regcache_ops结构体,其中init()函数用来初始化iomap结构体中缓存相关的属性成员,iomap_init_i2c、iomap_init_spi函数中会去调用init函数;exit()函数是init()函数的反函数,做相关清除工作;read()、write()函数负责结合自身的缓存算法执行对寄存器的读写;sync()函数用于数据同步,负责对硬件的一次实际访问动作。
缓存策略支持如下3种缓存类型:
enum iocache_type{
REGCACHE_NONE,
REGCACHE_RBTREE,
REGCACHE_COMPRESSED,
REGCACHE_FLAT,
};
其中,REGCACHE_FLAT表示数组类型,当外设寄存器比较少的时候,可以用这种类型缓存寄存器值;REGCACHE_COMPRESSED采用LZO压缩算法,在数组缓存的基础上套了一层压缩,以节约内存空间,当外设寄存器数量适中时,可以考虑这种缓存类型(LZO压缩算法相较于传统的GZIP压缩率要低一些,但是压缩和解压速度明显要比GZIP快的多,尤其是解压速度);REGCACHE_RBTREE表示红黑树类型,是一种自平衡二叉查找树,特点是索引快,当外设寄存器数量很大时,或者对寄存器延时敏感时,可以采用这种缓存类型。
在实例化struct iomap_config时,通过cache_type成员指定缓存类型。调用iomap_read/iomap_write函数时,会首先检查cache_type是否有值,然后再检查cache_bypass表示是否需要bypass,如果不需要则进一步调用iocache_read/iocache_write函数直接从缓存中取值,如果此时有从硬件上读写的需要,则再调用具体总线协议相关的读写函数,比如i2c设备,就是调用i2c_transfer函数。
bus层直接面向各低速I/O设备原本的读写函数封装的一层,比如i2c_transfer、spi_sync。本发明实施例支持I2C、SPI、AC97、MMIO和SPMI这5种总线的读写封装。针对不同总线,也可以在iocache层对struct iomap_bus做通用的实例化,一般情况下,直接使用即可,如果不合适,具体驱动中也可覆盖重新实例化自己需要的struct iomap_bus。
结合这里的公开所描述的各种示例性模块可以利用被设计成用于执行这里所述功能的下列部件来实现或执行:通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或晶体管逻辑、分立的硬件组件或者这些部件的任何组合。通用处理器可以是微处理器,但是可替换地,处理器可以是任何传统处理器、控制器、微控制器或状态机。处理器也可以被实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或多个微处理器结合DSP和/或任何其它这种配置。
iomap机制的引入简化了底层驱动的编写逻辑,提高了硬件访问效率,此时的整个底层软件的层次如图4所示。Iomap子系统位于具体外设驱动层和对应子系统层之间(图中只显示了i2c、spi相关逻辑,其他子系统具备相同的层次关系),以前是外设驱动直接调用对应子系统提供的传输函数进行硬件访问。引入iomap机制后,一方面向上层提供经过二次封装后的函数接口,另一方面在其内部代码逻辑中进行缓存策略的选择和数据的路由,最终再调用各子系统提供的传统传输函数,完成对硬件的访问。整个过程的代码逻辑由原来不得不在外设驱动中进行,转移到了由iomap子系统代替完成,降低了外设驱动的代码量,提高了代码本身逻辑的清晰度,同时,其内部代码实现也保证了硬件寄存器的访问效率,减少不必要的硬件访问。
结合这里的公开所描述的方法或算法的步骤可以直接包含在硬件中、由处理器执行的软件模块中或这两者的组合中。软件模块可以驻留在RAM存储器、快闪存储器、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动盘、CD-ROM、或本领域已知的任何其它形式的存储介质中。示例性的存储介质被耦合到处理器,使得处理器能够从该存储介质中读取信息或向该存储介质写入信息。在一个替换方案中,所述存储介质可以与处理器集成在一起。处理器和存储介质可以驻留在ASIC中。ASIC可以驻留在用户终端中。在一个替换方案中,处理器和存储介质可以作为分立组件驻留在用户终端中。
外设驱动使用iomap subsystem的步骤如图5所示。首先,实例化一个iomap_config,里面包含的是硬件外设的相关信息,比如寄存器位宽、数量,希望采用的缓存策略等,这个实例化好的结构体会作为参数传入iomap_read()函数或iomap_write()函数。这步操作建议在驱动的probe函数中调用。
其次,调用与具体子系统相关的初始化函数,比如i2c设备驱动程序就是调用iomap_init_i2c()函数以完成与i2c相关的初始化逻辑,其中就包含了原来硬件寄存器的ioremap动作。这一步也建议在驱动的probe函数中进行,完成后硬件寄存器就可以正常访问了。
然后,就可以在需要的地方调用iomap_read()函数或iomap_write()函数发起对硬件寄存器的访问了。
最后,在外设驱动卸载时,需要调用iomap_exit()函数释放之前在probe()函数中调用iomap_init_xxx()函数申请的资源。
在一个或多个示例性设计中,所述功能可以在硬件、软件、固件或其任意组合中实现。如果在软件中实现,则可以将所述功能作为一个或多个指令或代码存储在计算机可读介质上或通过计算机可读介质来传送。计算机可读介质包括计算机存储介质和通信介质,该通信介质包括有助于将计算机程序从一个位置传送到另一个位置的任何介质。存储介质可以是能够被通用或专用计算机访问的任何可用介质。作为例子而非限制性的,该计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储设备、磁盘存储设备或其它磁性存储设备,或者是可以用于携带或存储形式为指令或数据结构的所需程序代码并且能够被通用或专用计算机或者通用或专用处理器访问的任何其它介质。此外,任何连接都可以适当地称为计算机可读介质。例如,如果使用同轴线缆、光纤线缆、双绞线、数字用户线路(DSL)或诸如红外线、无线电和微波的无线技术来从网站、服务器或其它远程源发送软件,则上述同轴线缆、光纤线缆、双绞线、DSL或诸如红外线、无线电和微波的无线技术均包括在介质的定义。如这里所使用的,磁盘和光盘包括压缩盘(CD)、激光盘、光盘、数字多功能盘(DVD)、软盘、蓝光盘,其中磁盘通常磁性地再现数据,而光盘利用激光光学地再现数据。上述内容的组合也应当包括在计算机可读介质的范围内。
可以将现有技术和本发明的伪代码实施方式相比较。现有技术中的i2c设备读写不会直接调用i2c_transfer函数,而是再封装一层,比如内核中drivers/input/touchscreen/atmel_mxt_ts.c的寄存器读函数:
Figure BDA0001850482490000101
Figure BDA0001850482490000111
而在本发明实施例中,I2c设备驱动采用iomap机制的操作逻辑如下
Figure BDA0001850482490000112
Figure BDA0001850482490000121
从上面对比可以看出,为了让低速I/O设备更专注于自身的逻辑,本发明实施例将i2c、spi等总线操作全部封装在了iomap里,具体的驱动在进行读写寄存器操作时,直接调用iomap_read/iomap_write函数即可。
从上述实施例可以看出,本发明实施例提供的低速接口的缓存方法,通过在iomap层读写外部寄存器,获取并封装外部寄存器的硬件信息,在iocache层针对硬件信息而加载相应的缓存,并根据缓存发出访问硬件设备的指令,在bus层通过相应的总线根据该指令与硬件设备交互,在iocache层按需卸载相应的缓存的技术方案,能够针对不同寄存器或不同类型的寄存器进行对低速接口的缓存,降低了驱动读写外设寄存器的逻辑操作复杂度,提高了低速I/O设备的访问效率。
需要特别指出的是,上述低速接口的缓存方法的各个实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于低速接口的缓存方法也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在所述实施例之上。
基于上述目的,本发明实施例的第二个方面,提出了一种能够针对不同寄存器或不同类型的寄存器进行对低速接口的缓存的装置的实施例。所述装置包括:
至少一个处理器;和
存储器,存储有处理器可运行的程序代码,其中程序代码在由处理器运行时执行上述的方法。
本发明实施例公开所述的装置、设备等可为各种电子终端设备,例如手机、个人数字助理(PDA)、平板电脑(PAD)、智能电视等,也可以是大型终端设备,如服务器等,因此本发明实施例公开的保护范围不应限定为某种特定类型的装置、设备。本发明实施例公开所述的客户端可以是以电子硬件、计算机软件或两者的组合形式应用于上述任意一种电子终端设备中。
本文所述的计算机可读存储介质(例如存储器)可以是易失性存储器或非易失性存储器,或者可以包括易失性存储器和非易失性存储器两者。作为例子而非限制性的,非易失性存储器可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦写可编程ROM(EEPROM)或快闪存储器。易失性存储器可以包括随机存取存储器(RAM),该RAM可以充当外部高速缓存存储器。作为例子而非限制性的,RAM可以以多种形式获得,比如同步RAM(DRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据速率SDRAM(DDR SDRAM)、增强SDRAM(ESDRAM)、同步链路DRAM(SLDRAM)、以及直接Rambus RAM(DRRAM)。所公开的方面的存储设备意在包括但不限于这些和其它合适类型的存储器。
从上述实施例可以看出,本发明实施例提供的低速接口的缓存装置,通过在iomap层读写外部寄存器,获取并封装外部寄存器的硬件信息,在iocache层针对硬件信息而加载相应的缓存,并根据缓存发出访问硬件设备的指令,在bus层通过相应的总线根据该指令与硬件设备交互,在iocache层按需卸载相应的缓存的技术方案,能够针对不同寄存器或不同类型的寄存器进行对低速接口的缓存,降低了驱动读写外设寄存器的逻辑操作复杂度,提高了低速I/O设备的访问效率。
需要特别指出的是,上述低速接口的缓存装置的实施例采用了所述低速接口的缓存方法的实施例来具体说明各模块的工作过程,本领域技术人员能够很容易想到,将这些模块应用到所述低速接口的缓存方法的其他实施例中。当然,由于所述低速接口的缓存方法实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于所述低速接口的缓存装置也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在所述实施例之上。
基于上述目的,本发明实施例的第三个方面,提出了一种能够针对不同寄存器或不同类型的寄存器进行对低速接口的缓存的驱动系统的实施例。该驱动系统包括:
基于特定总线的驱动器;
上述的低速接口的缓存装置,其在iomap层通过特定总线而连接到相应的驱动器;
基于特定总线的子系统,其通过特定总线连接到相应的低速接口的缓存装置的bus层;
基于特定总线的硬件设备,其通过特定总线连接到相应的子系统。
以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。
应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上所述的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。

Claims (8)

1.一种低速接口的缓存方法,其特征在于,包括以下步骤:
在iomap层读写外部寄存器,以获取并封装所述外部寄存器的硬件信息;
在iocache层针对所述硬件信息而加载相应的缓存,并根据所述缓存发出访问硬件设备的指令,包括:确定所述缓存的缓存类型、并根据所述缓存类型来发出访问硬件设备的指令;并且确定所述缓存类型包括以下步骤:
在读写所述外部寄存器时检测cache_type是否赋值和cache_bypass是否需要绕过;
当cache_type有赋值并且cache_bypass不需要绕过时,调用iocache_read/iocache_write从所述缓存中获得赋值,或调用相应的总线传输函数从所述所述硬件设备读取赋值;
根据cache_type赋值确定所述缓存类型;
在bus层通过相应的总线根据所述指令与所述硬件设备交互;和
在iocache层按需卸载相应的所述缓存。
2.根据权利要求1所述的方法,其特征在于,所述外部寄存器为外部驱动器的寄存器,所述外部驱动器用于驱动所述硬件设备;所述外部寄存器的所述硬件信息包括以下至少之一:寄存器数量、位宽、书写属性、缓存类型。
3.根据权利要求2所述的方法,其特征在于,在iomap层获取并封装所述外部寄存器的硬件信息包括:实例化负责封装所述硬件信息的struct iomap_config并调用iomap_init_xxx将所述硬件信息传输到iocache层。
4.根据权利要求2所述的方法,其特征在于,在iomap层读写所述外部寄存器包括:调用iomap_read/iomap_write读写所述外部寄存器。
5.根据权利要求1所述的方法,其特征在于,所述缓存类型为以下之一:flat、lzo、rbtree,其中在所述外部寄存器较少时确定所述缓存类型为flat,在所述外部寄存器数量适中时确定所述缓存类型为lzo,在所述外部寄存器较多时确定所述缓存类型为rbtree。
6.根据权利要求1所述的方法,其特征在于,在bus层通过相应的总线访问所述硬件设备包括:通过相应的总线连接子系统;其中所述总线包括以下至少之一:I2C、SPI、AC97、MMIO、SPMI。
7.一种低速接口的缓存装置,其特征在于,包括:
至少一个处理器;和
存储器,存储有处理器可运行的程序代码,其中所述程序代码在由所述处理器运行时执行如权利要求1-6中任意一项所述的方法。
8.一种驱动系统,其特征在于,包括:
基于特定总线的驱动器;
如权利要求7所述的低速接口的缓存装置,其在iomap层通过所述特定总线而连接到相应的所述驱动器;
基于特定总线的子系统,其通过所述特定总线连接到相应的所述低速接口的缓存装置的bus层;和
基于特定总线的硬件设备,其通过所述特定总线连接到相应的所述子系统。
CN201811293225.5A 2018-11-01 2018-11-01 一种低速接口的缓存方法与装置 Active CN109408429B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811293225.5A CN109408429B (zh) 2018-11-01 2018-11-01 一种低速接口的缓存方法与装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811293225.5A CN109408429B (zh) 2018-11-01 2018-11-01 一种低速接口的缓存方法与装置

Publications (2)

Publication Number Publication Date
CN109408429A CN109408429A (zh) 2019-03-01
CN109408429B true CN109408429B (zh) 2020-10-16

Family

ID=65471046

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811293225.5A Active CN109408429B (zh) 2018-11-01 2018-11-01 一种低速接口的缓存方法与装置

Country Status (1)

Country Link
CN (1) CN109408429B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101911013A (zh) * 2008-01-11 2010-12-08 国际商业机器公司 提取高速缓存属性工具及其指令
CN108628765A (zh) * 2018-04-13 2018-10-09 新华三技术有限公司 开源分布式存储软件Ceph中Cache实现方法和装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5915262A (en) * 1996-07-22 1999-06-22 Advanced Micro Devices, Inc. Cache system and method using tagged cache lines for matching cache strategy to I/O application
US7131039B2 (en) * 2002-12-11 2006-10-31 Hewlett-Packard Development Company, L.P. Repair techniques for memory with multiple redundancy
US8108617B2 (en) * 2008-02-08 2012-01-31 International Business Machines Corporation Method to bypass cache levels in a cache coherent system
US9465696B2 (en) * 2011-06-03 2016-10-11 Apple Inc. Methods and apparatus for multi-phase multi-source backup
CN102609254B (zh) * 2012-01-19 2015-04-22 中国科学院计算技术研究所 获取对象级访存行为的方法及装置
CN108121534A (zh) * 2017-12-19 2018-06-05 郑州云海信息技术有限公司 一种针对W25Q16DV的SPI Flash驱动实现方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101911013A (zh) * 2008-01-11 2010-12-08 国际商业机器公司 提取高速缓存属性工具及其指令
CN108628765A (zh) * 2018-04-13 2018-10-09 新华三技术有限公司 开源分布式存储软件Ceph中Cache实现方法和装置

Also Published As

Publication number Publication date
CN109408429A (zh) 2019-03-01

Similar Documents

Publication Publication Date Title
JP6142081B2 (ja) 不揮発性メモリデバイスにおける揮発性メモリアーキテクチャ及び関連コントローラ
JP6431536B2 (ja) 最終レベルキャッシュシステム及び対応する方法
WO2023098032A1 (zh) 一种内存空间扩展方法、装置及电子设备和存储介质
US20070198780A1 (en) Apparatus, system, and method for determining prefetch data
US6810444B2 (en) Memory system allowing fast operation of processor while using flash memory incapable of random access
US11138034B2 (en) Method and apparatus for collecting information, and method and apparatus for releasing memory
US9164804B2 (en) Virtual memory module
US10216437B2 (en) Storage systems and aliased memory
WO2019047834A1 (zh) 用于传输数据处理请求的方法和装置
WO2020042769A1 (zh) 图像信息的传输方法、装置、存储介质及电子设备
CN109656844B (zh) 一种AT24xx EEPROM驱动方法和装置
US20210049114A1 (en) Computing system for reducing latency between serially connected electronic devices
WO2021135574A1 (zh) 数据存储方法、装置及终端设备
WO2016169032A1 (zh) 数据格式转换装置、缓冲芯片及方法
CN110543433B (zh) 一种混合内存的数据迁移方法及装置
CN110781107B (zh) 基于dram接口的低延迟融合io控制方法和装置
CN109408429B (zh) 一种低速接口的缓存方法与装置
CN111143250B (zh) 一种基于axi-st接口访问fpga存储单元的方法、设备及介质
KR100818919B1 (ko) 메소드 호출 방법 및 이를 이용한 자바 가상 머신
KR101876574B1 (ko) 데이터 입출력 컨트롤러 및 이를 포함하는 시스템
CN113296691A (zh) 数据处理系统、方法、装置以及电子设备
US11775451B2 (en) Computing system for reducing latency between serially connected electronic devices
US8769229B2 (en) Memory pinning through buffer encapsulation
TW202232316A (zh) 計算裝置以及用於儲存裝置資源管理的系統和方法
US10261700B1 (en) Method and apparatus for streaming buffering to accelerate reads

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
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20200916

Address after: 215100 No. 1 Guanpu Road, Guoxiang Street, Wuzhong Economic Development Zone, Suzhou City, Jiangsu Province

Applicant after: SUZHOU LANGCHAO INTELLIGENT TECHNOLOGY Co.,Ltd.

Address before: 450018 Henan province Zheng Dong New District of Zhengzhou City Xinyi Road No. 278 16 floor room 1601

Applicant before: ZHENGZHOU YUNHAI INFORMATION TECHNOLOGY Co.,Ltd.

GR01 Patent grant
GR01 Patent grant