一种动态适配外围设备的系统及方法与流程

文档序号:11230144阅读:537来源:国知局

本发明涉及嵌入式设备领域,具体涉及一种动态适配外围设备的系统和一种动态适配外围设备的方法。



背景技术:

相较于其它可编程逻辑单元,soc(systemonchip,系统级芯片)类fpga(field-programmablegatearray,现场可编程逻辑门阵列)具有更高的集成度、更低的功耗、更小的电路尺寸等优势,因而被大多数开发人员所使用。同时,为了充分发挥fpga的灵活性,许多fpga的厂商已开始研发和销售集成了硬核处理器的fpga器件,并为之提供系统方案,在此基础上设计的扣板产品,可动态管理外设资源,更好的对核心硬件电路进行复用。

通过替换逻辑器件的可执行文件,即可使上述fpga器件支持不同的应用场景,从而减少硬件和核心代码的维护成本,但是,若采用当前主流的linux操作系统下对外设进行描述的方案,如设备树情况下,由于随着外设的变化,设备树的描述文件也必须跟随着进行相应替换,以便于与外设适配,导致上层的操作系统必须随着设备树文件的变化而重新编译,致使操作系统难以复用。



技术实现要素:

针对现有技术中存在的缺陷,本发明的目的在于提供一种动态适配外围设备的系统和一种动态适配外围设备的方法,有效提高操作系统的利用率。

为达到以上目的,本发明采取的技术方案是,包括:

初始化模块,其用于初始化硬件设备,并加载设备树和linux内核到内存;

资源配置模块,其用于通过fpga模拟外设得到外设的资源配置;

扩展模块,其用于根据外设的资源配置信息,对加载到内存中的设备树节点进行相应的添加、删除或替换操作;

其中,所述设备树用于根据外设的资源配置进行外设逻辑的描述,所述linux内核用于根据设备树的描述进行外设的驱动。

在上述技术方案的基础上,所述扩展模块中的执行代码由uboot代码修改后生成,所述执行代码用于对设备树节点进行添加、删除或替换操作。

在上述技术方案的基础上,所述设备树由uboot加载至内存中,并由uboot将设备树传递给已加载到内存中的linux内核。

在上述技术方案的基础上,所述初始化模块用于对硬件设备进行初始化及上电操作,所述硬件设备包括内存、调试串口、外部存储器以及外设的硬核处理器。

本发明还提供一种动态适配外围设备的方法,包括:

s1:对硬件设备进行上电并初始化;

s2:加载一fpga用以模拟外设,得到外设的资源配置,并标记出fpga版本标识,所述fpga版本标识用于表示设备树中需进行修改的节点;

s3:加载设备树和linux内核至内存中;

s4:根据标记出的fpga版本标识,对设备树节点进行添加、删除或替换操作;

s5:完成linux系统的启动。

在上述技术方案的基础上,所述硬件设备包括内存、调试串口、外部存储器以及外设的硬核处理器。

在上述技术方案的基础上,所述设备树用于根据外设的资源配置进行外设逻辑的描述。

在上述技术方案的基础上,所述s5具体为:linux内核根据设备树的描述驱动外设。

与现有技术相比,本发明的优点在于:当接入不同的外设时,将设备树以及linux内核加载到内存中,进行初始化,通过一fpga模拟当前所接入的外设,得到外设的资源配置,然后对加载到内存中的设备树进行相应修改,以便于加载到内存中的linux内核对当前所接外设进行驱动,而原始的设备树未做修改,即设备树原始的描述文件未做修改,因此linux操作系统无需随着外设的改变而重新编译,从而达到操作系统复用的目的。

附图说明

图1为本发明一种动态适配外围设备的方法的流程图。

具体实施方式

以下结合附图对本发明作进一步详细说明。

本发明提供一种动态适配外围设备的系统,该系统基于linux操作系统,动态适配的外围设备为采用fpga逻辑创建的外设,即soc类fpga中采用逻辑动态创建的外设或其它共cpu(centralprocessingunit,中央处理器)子系统但使用环境有所差异的外设。优选的,本发明的动态适配外围设备的系统在基于cyclonev系列设计出的扣板平台上实施,使用linux操作系统,适用于扣板应用于不同底板的场景。

本动态适配外围设备的系统包括初始化模块、资源配置模块和扩展模块,初始化模块用于初始化硬件设备,并加载设备树、linux内核到内存;资源配置模块用于得到外设的资源配置,外设的资源配置可以通过多种方式的得到,本实施例中,通过一fpga来模拟外设,得到外设的资源配置,因外设为基于fpga设计,因此可以通过另一fpga进行外设逻辑文件的模拟,从而得到外设的资源配置;扩展模块用于根据外设的资源配置信息,对加载到内存中的设备树节点进行相应的添加、删除或替换操作,从而达到动态适配soc类fpga外设的目的。

设备树用于根据外设的资源配置进行外设逻辑的描述,linux内核用于根据设备树的描述进行外设的驱动,根据当前接入的外设的资源配置,对系统中的设备树进行适应性修改,从而linux内核能够根据修改后的设备树驱动外设,达到动态设备不同外设的目的。设备树由uboot加载至内存中,并由uboot将设备树传递给已加载到内存中的linux内核。

扩展模块中的执行代码由uboot代码修改后生成,执行代码用于对设备树节点进行添加、删除或替换操作,扩展模块依赖于uboot,但扩展模块为独立的模块,扩展模块能够单独进行重遍以改变功能。初始化模块通过uboot加载设备树至内存中,并将设备树传递给linux内核。uboot,全称universalbootloader,用于系统引导,linux操作系统通常使用uboot进行系统的引导。扩展模块用于执行除系统启动外的其它功能。

初始化模块还用于对硬件设备进行初始化及上电操作,硬件设备包括内存、调试串口、外部存储器以及外设的硬核处理器。

当接入不同的外设时,将设备树以及linux内核加载到内存中,进行初始化,通过一fpga模拟当前所接入的外设,得到外设的资源配置,然后对加载到内存中的设备树进行相应修改,以便于加载到内存中的linux内核对当前所接外设进行驱动,而原始的设备树未做修改,即设备树原始的描述文件未做修改,因此linux操作系统无需随着外设的改变而重新编译,从而达到操作系统复用的目的。

参见图1所示,本发明还提供一种基于上述系统的动态适配外围设备的方法,该方法包括以下步骤:

s1:对硬件设备上电并初始化,硬件设备包括内存、调试串口、外部存储器以及外设的硬核处理器等需要使用到的基础设备。

s2:加载一fpga用以模拟外设,得到外设的资源配置,并标记出fpga版本标识,fpga版本标识用于表示设备树中需进行修改的节点,因外设为fpga逻辑的外设,基于可编程的逻辑器件,因此可以用另一fpga对接入的外设进行模拟,得到所接入外设内逻辑代码等资源配置,便于后续根据设备树与外设资源配置之间的映射关系,对设备树进行适应性修改,根据外设的资源配置进行外设逻辑的描述。

s3:加载设备树和linux内核至内存中。

s4:根据标记出的fpga版本标识,对设备树节点进行添加、删除或替换操作。若当前接入的外设与之前接入的外设相同,则fpga版本标识为空,即无需对设备树的节点进行修改操作。

s5:完成linux系统的启动,从而能够对外设进行驱动并操作。

通过一fpga模拟所接入的外设,得到外设的资源配置,从而对linux操作系统中加载到内存中的设备树进行适应性修改,使得加载到内存中的linux内核能够驱动外设,从而适配不同应用场景下所接入的不同外设,原始的设备树无需修改,即原始的设备树描述文件无需休息,当接入下一外设时,再次加载设备树至内存中并初始化,然后进行相应修改即可,即原始的设备树始终是无需修改的,因而能够仅通过替换与外设相匹配的fpga,来修改内存中的设备树,即可适配当前接入的采用fpga逻辑创建的外设,提高了操作系统的复用率,降低fpga产品核心代码的维护成本。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1