nandflash设备管理的方法和系统与流程

文档序号:12747781阅读:191来源:国知局
nand flash设备管理的方法和系统与流程

本发明涉及计算机应用技术领域,特别是涉及一种nand flash设备管理的方法和系统。



背景技术:

在Linux中,传统的nftl设计架构通过将nftl设置在kernel中,实现MTD设备的存取数据操作。但现有技术中,将nftl设置在kernel中,受kernel的限制,开发新功能和升级驱动都较为困难,且开发稳定的驱动实现的周期长;调试和维护的效率较低;只能使用单一的C语言编写代码,编译灵活度受到限制。



技术实现要素:

基于此,有必要提供一种灵活、高效、通用且可扩展的nftl设计方式的nandflash设备管理的方法和系统。

一种nand flash设备管理的方法,包括以下步骤:

将内核层中的nftl模块设置于应用层中;

对处于所述应用层中的所述nftl模块建立一个应用层信息服务接口;

调用所述应用层信息服务接口实现nand flash设备管理。

在其中一个实施例中,对处于所述应用层中的所述nftl模块建立一个应用层信息服务接口的步骤具体包括:

在所述应用层信息服务接口内建立一个上行通道与一个下行通道;

其中,所述上行通道为所述nftl模块与nand块设备层进行通信的通道;

所述下行通道为所述nftl模块与nand物理层进行通信的通道。

在其中一个实施例中,所述下行通道被配置具有两种操作方式;

其中,第一种操作方式为通过ioctl函数实现控制流的操作,且所述控制流用于对所述下行通道与所述上行通道建立连接;

第二种操作方式为通过mmap函数实现数据流的操作,且所述数据流用于向所述nand物理层进行读数据和写数据操作。

在其中一个实施例中,所述上行通道包括第一上行通道和第二上行通道,所述第一上行通道为设置于应用层中的上行通道,所述第二上行通道为设置于kernel层中的上行通道;

所述下行通道包括第一下行通道和第二下行通道,所述第一下行通道为设置于应用层中的下行通道,所述第二下行通道为设置于kernel层中的下行通道;所述调用所述应用层信息服务接口实现nand flash设备管理过程中,当nand块设备层中包含多个对象时,包括以下步骤:

在所述第一上行通道中建立多个守护线程;

将所述多个守护线程与所述nftl模块支持的多个分区进行绑定连接;

其中,所述守护线程与所述分区为一一对应关系,所述守护线程与所述nand块设备层中的多个对象也为一一对应关系;所述nand块设备中的对象发送io请求到所述第二上行通道。

在其中一个实施例中,在所述第二上行通道处设置有nand上行通道代理,用于接收所述nand块设备层发送的io请求,并调用所述第二上行通道提供的预设程序接口;以及

在所述第二下行通道处设置有nand下行通道代理,用于接收来自nftl的操作,并翻译执行nand控制层的连接操作与nand物理层的物理操作。

在其中一个实施例中,调用所述应用层信息服务接口实现nand flash设备管理的步骤包括:

所述nand上行通道代理接收到所述nand块设备层发送的io请求后,调用所述第二上行通道提供的所述预设程序接口在所述第二上行通道中生成通道io请求,并启动所述第一上行通道的读程序对应的守护线程;

所述第一上行通道中的读程序读取所述第二上行通道的通道io请求;

所述第一上行通道的读程序将生成的所述通道io请求中的数据发送至所述应用层中;

根据所述通道io请求调用回调函数,并在所述nftl模块中执行所述回调函数;

当所述回调函数执行完成后,所述第一上行通道通过写程序将所述回调函数执行结果发送至所述第二上行通道,并启动执行请求程序对应的线程;

所述执行请求程序将所述回调函数执行结果发送至所述nand上行通道代理,并由所述nand上行通道代理反馈至所述nand块设备层。

基于同一发明构思的一种nand flash设备管理的系统,包括:

设置模块,用于将内核层中的nftl模块设置于应用层中;

接口建立模块,用于对处于所述应用层中的所述nftl模块建立一个应用层信息服务接口;

调用模块,用于调用所述应用层信息服务接口实现nand flash设备管理。

在其中一个实施例中,所述接口建立模块具体包括:

通道建立单元,用于在所述应用层信息服务接口内建立一个上行通道与一个下行通道;

其中,所述上行通道为所述nftl模块与nand块设备层进行通信的通道;

所述下行通道为所述nftl模块与nand物理层进行通信的通道。

在其中一个实施例中,在所述第二上行通道处设置有nand上行通道代理,用于接收所述nand块设备层发送的io请求,并调用所述第二上行通道提供的预设程序接口;以及

在所述第二下行通道处设置有nand下行通道代理,用于接收来自nftl的操作,并翻译执行nand控制层的连接操作与nand物理层的物理操作。

在其中一个实施例中,所述调用模块具体包括:

请求接收单元,用于nand上行通道代理接收到nand块设备层发送的io请求后,调用所述第二上行通道提供的预设程序接口在所述第二上行通道中生成通道io请求;

请求读取单元,用于第一上行通道通过读程序读取第二上行通道的通道io请求;

第一启动单元,用于启动所述第一上行通道的读程序对应的守护线程;第一发送单元,用于所述第一上行通道的读程序将生成的所述通道io请求中的数据发送至所述应用层中;

执行单元,用于根据所述通道io请求调用回调函数,并在所述nftl模块中执行所述回调函数;

第二发送单元,用于当所述回调函数执行完成后,所述第一上行通道通过写程序将所述回调函数执行结果发送至所述第二上行通道;

第二启动单元,用于启动执行请求程序对应的线程;

第三发送单元,用于所述执行请求程序将所述回调函数执行结果发送至所述nand上行通道代理;

反馈单元,用于由所述nand上行通道代理反馈所述回调函数执行结果至所 述nand块设备层。

上述nand flash设备管理的方法和系统,通过将内核层中的nftl模块设置于应用层中;对处于应用层中的nftl模块建立一个应用层信息服务接口;调用应用层信息服务接口实现nand flash设备管理。上述nand flash设备管理的方法和系统,解决linux nand driver的开发、调试与维护效率低的问题;同时,可以选择更多的语言来开发nand driver,使开发工作更多样,更灵活且具有易用性。

附图说明

图1为现有技术中nftl的设计架构示意图;

图2为一个实施例中nand flash设备管理的方法的流程示意图;

图3为一个实施例中nand flash设备管理的方法中建立上行通道与下行通道数据传输的流程示意图;

图4为一个实施例中nand flash设备管理的方法中数据传输的模块化示例图;

图5为另一个实施例中nand flash设备管理的方法中数据传输的模块化示例图;

图6为一个实施例中nand flash设备管理的方法抽象成生产者与消费者的模型示意图;

图7为一个实施例中nand flash设备管理的方法抽象成生产者与消费者后应用层中消费者的执行流程示意图;

图8为一个实施例中nand flash设备管理的方法的示例流程示意图;

图9为一个实施例中nand flash设备管理的方法的示例中下行通道操作步骤的示意图;

图10为多分区下nand flash设备管理的方法的流程示意图;

图11为一个实施例中nand flash设备管理系统的结构示意图;

图12为一个实施例中nand flash设备管理系统中接口建立模块的结构示意图;

图13为一个实施例中nand flash设备管理系统中调用模块的结构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下通过实施例,并结合附图,对本发明nand flash设备管理的方法和系统的具体实施方式进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

参见图1,在Linux中,传统的nftl(nand flash translation layer,nand flash转换层)架构为图1所示的设计架构。其中,nand flash是flash内存的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。nand flash具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,例如,嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。

具体的,nand块设备层、nftl层和nand物理驱动层为三个层次存在于内核中,组成了nand驱动。其中,nftl是nand flash驱动中的一个虚拟转换层,它将对flash的操作,转换成对磁盘的操作,它必须被配置使用一个磁盘形式的文件系统,例如,图1中的FAT32或ext4,通过MTD原始设备进行数据的存取。可以理解的是,nftl层涉及到的相关算法与管理策略是整个nand驱动的关键,直接影响了整个nand驱动的稳定性、使用寿命和性能。

由于目前市场上有多个nftl厂商,其对nftl的设计方案也各不相同。优化良好的nftl方案在技术市场中具有很大的竞争优势。所以,本发明提出的nand flash设备管理的方法使得nftl驱动的开发与调试变得更灵活,同时,也便于优化出更快捷的算法。

由于应用层运行的程序,容易开发、调试和维护,本发明提供的一种nandflash设备管理方法是将内核的nftl模块程序转移到应用层运行。实现了将数据结构与数据进行分离,但其实现的功能不变,只是运行的空间转变到更加灵活、适用的应用层的目的。

参见图2,一个实施例中,nand flash设备管理的方法可以包括以下步骤:

步骤S100,将内核层中的nftl模块设置于应用层中。

需要说明的是,本发明是将原内核层中的nftl模块转移设置于应用层中,基于上述原理,也可以将具有更加高效、精确的内核模块通过转移设置在应用层中,这样更有利于程序的管理以及算法的及时有效的更新操作的完成。

步骤S200,对处于应用层中的nftl模块建立一个应用层信息服务接口。可以理解的是,应用层信息服务接口还可以用数据库、通用的应用程序接口进行替代,这样应用层信息服务接口不仅可为nand驱动服务,同时,还可以提供给linux内核模块进行更加充分的使用。其中,应用层信息服务接口为具有高效、灵活、通用可扩展的通用接口

步骤S300,调用应用层信息服务接口实现nand flash设备管理。

本实施例中,通过将内核层中的nftl模块设置于应用层中;对处于应用层中的nftl模块建立一个应用层信息服务接口;调用应用层信息服务接口实现nand flash设备管理,实现将内nand flash驱动的关键核心核nftl模块转移到应用层中,使得nftl所管理的数据与数据结构相分离,其中,数据结构在应用层进行管理, 数据则在内核层进行管理,这样不仅能够提高数据的处理性能,同时,能够提高程序的开发、调试和维护的效率;且还可以选择更多的语言来开发上述程序,以满足不同的需求,具有灵活性与适用性。

需要进一步说明的是,在一个实施例中,步骤S200中,对处于应用层中的nftl模块建立一个应用层信息服务接口的步骤具体包括:在应用层信息服务接口内建立一个上行通道与一个下行通道;其中,上行通道为建立处于应用层中的所述nftl模块与nand块设备层之间通信的通道;下行通道为建立处于应用层中的nftl模块与nand物理层之间通信的通道。由此,提高了传输数据从上行与下行通道准确传输的易用性。

其中,下行通道被配置具有两种操作方式;第一种操作方式为通过ioctl函数实现控制流的操作,且控制流用于对下行通道与上行通道建立连接,可以理解的是,对下行通道与上行通道建立连接的过程类似usb枚举的过程,即usb中任何设备在使用前都可以利用地址为0的控制管道通信来进行枚举,并且保证同一时刻最多只有一个设备在进行枚举的执行;而应用层信息服务系统接口中任何对象,这里包含但不限于文件系统、分区或者nftl中的其他设备,都可以利用下行通道中的ioctl函数实现控制流操作与上行通道建立连接,并且保证同一时刻最多只有一个对象进行建立连接的操作;第二种操作方式为通过mmap函数实现数据流的操作,且数据流用于向nand物理层进行读数据和写数据操作。由此,提高了数据调用的准确性。

此外,上行通道被设置于应用层中的部分为应用层中的所述上行通道,即为第一上行通道;上行通道被设置于kernel层中的部分为kernel层中的上行通道,即为第二上行通道;下行通道被设置于应用层中的部分为应用层中的下行通道,即为第一下行通道;下行通道被设置于kernel层中的部分为kernel层中 的下行通道,即为第二下行通道。由此,通过应用层与内核层上行通道与下行通道的准确划分为后续的数据传输准确提供了基础,具有适用性。

可以理解的是,在第一上行通道中建立多个守护线程;将多个守护线程与nftl模块支持的多个分区进行绑定连接;其中,守护线程与分区为一一对应关系,守护线程与nand块设备层中的多个对象也为一一对应关系,而所述nand块设备中的对象能够独立发送io请求到所述第二上行通道。Nand块设备中的每个对象相对独立的利用第一上行通道和第二上行通道与应用层之间进行数据的存取。由此,提高了上行通道通过守护线程与多分区进行绑定连接的准确性。

此外,在第二上行通道处设置nand上行通道代理,用于接收nand块设备层发送的io请求,并调用第二上行通道提供的预设程序接口;以及在第二下行通道处设置nand下行通道代理,用于接收来自nftl的操作,并翻译执行nand控制层的连接操作与nand物理层的物理操作。

需要进一步说明的是,在一个实施例中,参见图3,步骤S300中,调用应用层信息服务接口实现nand flash设备管理的步骤具体包括:

步骤S301,nand上行通道代理接收到nand块设备层发送的io请求后,调用第二上行通道提供的预设程序接口在第二上行通道中生成通道io请求,并启动第一上行通道的读程序对应的守护线程。

步骤S302,第一上行通道通过读程序读取第二上行通道的通道io请求。

步骤S303,第一上行通道的读程序将生成的通道io请求中的数据发送至应用层中。

步骤S304,根据通道io请求调用回调函数,并在nftl模块中执行回调函数。

步骤S305,当回调函数执行完成后,第一上行通道通过写程序将回调函数执行结果发送至第二上行通道,并启动执行请求程序对应的线程。

步骤S306,执行请求程序将回调函数执行结果发送至nand上行通道代理,并由nand上行通道代理反馈至nand块设备层。

为了更好地理解与应用本发明提出的nand flash设备管理的方法,进行以下示例,需要说明的是,本发明保护范围不局限于以下示例。

参见图1在传统技术中中,nftl模块是处在nand块设备层之下的,直接由nand块设备层调用nftl层提供的应用程序接口来执行通信。但是nftl模块设置到应用层后,其与块设备层的通信就需要通过ALIS(Application Layer Information Service,应用层信息服务)接口设置两个通道来使nftl模块能够方便地与nand驱动的kernel层部分通信。参见图4。其中,kalis_up表示内核层的上行通道;ualis_up表示应用层的上行通道;kalis_down表示内核层的下行通道;ualis_down表示应用层的下行通道。

需要进一步说明的是,参见图5,kalis_up与ualis_up共同组成了上行通道,且上行通道是由一个在nftl层建立的守护线程来维持运行的。其中,在linux操作系统中在系统引导的时候会开启很多服务,这些服务就叫做守护进程。为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一定的方式配置系统。守护进程是脱离于终端并且在后台运行的进程。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。

为了更加形象地理解上行通道的概念,我们可以将上行通道描述成是一个生成者与消费者的关系。参见图6,从nand块设备层传递过来的io请求,经过nand上行通道代理后,会调用kalis_up提供的应用程序接口来封装成应用层信息服务接口内部请求,即上述为应用层信息服务接口内部请求的生产者。其中,应用层信息服务接口的上行通道的生产者和消费者是处于不同的进程中的。消 费者是由应用层的上行通道建立的守护线程来执行操作;生产者是由内核层的上行通道执行请求线程执行操作。io请求可视为产品,其由nand块设备层提供的,且最终都会发送至内核层的上行通道执行请求线程进行操作,经过内核层的上行通道传递至应用层的上行通道去进行消费执行。

其中,由于nftl是在应用层运行的,其上行通道的接口为ualis_up,且上行通道是由一个在nftl层建立的守护线程来维持运行的。

需要进一步说明的是,参见图7,通过这个死循环程序,不停的从内核的kalis_up中读取请求,然后执行这个请求,并将请求执行的结果返回给kalis_up,这就是消费者。在应用层中运行的这个死循环程序ualis_up并不是使用查询方式来与内核中的kalis_up通信的,而是使用等待队列的机制通信。通过等待队列的机制通信使得进程等待某一特定事件的发生,无需频繁的轮询,进程在等待周期中睡眠,当时间发生后由内核自动唤醒。由此,不会在应用层与内核层传递数据时,使得性能有巨大的损耗。

具体的,参见图8,nand flash设备管理的方法的示例流程示意图。

步骤S801,ualis_up通过read系统调用进入内核进而调用到对应的接口alis_up_read主动读取kalis_up内的请求;其中,如果kalis_up内部无请求,则ualis_up所在守护线程睡眠,等待请求的产生;否则,读取请求到ualis_up中去。

步骤S802,Nand上行通道代理收到nand块设备层传递过来的io请求后,调用kalis_up提供的应用程序接口(alis_up_do_req)在kalis_up中生成请求并唤醒之前ualis_up读时睡眠的守护线程。

步骤S803,alis_up_do_req所在线程睡眠,等待被ualis_up读取的请求执行完成。

步骤S804,alis_up_read所在线程被唤醒后,将请求中的数据拷贝或者共享 到应用空间中去。

步骤S805,ualis_up调用执行请求回调函数。其中,回调函数为建立上行通道连接时被进行赋值与设置的,应用层的上行通道对请求的内容与执行过程不进行执行操作,请求的解析与执行都是由回调函数执行完成,且回调函数也正是nftl模块中的核心函数。

步骤S806,回调函数执行完成后,ualis_up会依次调用write系统,以及最终对应的alis_up_write接口将请求的执行结果返回给kalis_up,并唤醒睡眠的alis_up_do_req所在线程。

步骤S807,alis_up_do_req所在线程被唤醒后,将请求的执行结果返回给nand上行通道代理,最终请求执行结果会返回到nand块设备层。

通过上述步骤S801-步骤S807,针对一个请求的执行从由nand块设备层产生到nand块设备层接收到此请求的执行结果而完成。

可以理解的是,步骤S801-步骤S807中为了描述的便捷性,我们使数据流带有了明确的传递方向而分开进行说明的。其中,步骤S801-步骤S807描述的alis_up_read和alis_up_write也可以用alis_up_mmap代替。

此外,在步骤S805中,ualis_up调用执行请求回调函数,这个回调函数的具体执行是由nftl层控制的,但会将最终的io请求以及相关的数据传递到nand flash中的nand物理层中。其中,nftl层与nand物理层的通信是通过应用层信息服务接口的下行通道来执行的。有关应用层信息服务接口的具体结构参见图9。

其中,应用层信息服务接口的下行通道有两种操作方式。第一种操作方式为通过ioctl函数实现控制流的操作,且控制流用于对下行通道与上行通道建立连接,绑定图6中的生产者和消费者。此外,通过建立连续关系,应用层信息服务接口同时可以被其他模块程序使用。由此,提高了nftl层的灵活性与易用性。

更进一步地,由于nftl是支持多分区的,并且整个nand驱动是支持多nftl的。可以理解的是,当由nand块设备层发出多个请求时,首先建立应用层信息服务接口的上行通道的连接,连接的建立保障了消费者只能消费处于相同连接关系下的生成者产生的产品请求。

参见图10,如果想以分区为单位来提供请求服务时,生产者就会有多个,这样我们就必须在应用层的上行通道中建立多个消费者,即多个守护线程与之对应,每个守护线程对应一个生产者,即分区。其中,生产者与消费者在进行数据通信前必须先绑定,以确定连接关系。同样的,如果以nftl为服务单位来提供请求服务时,如果有多个nftl需要进行管理,也要建立多个应用层信息服务接口的上行通道的连接。只有建立了应用层信息服务接口的上行通道连接后,这个连接才可以使用应用层信息服务接口的上行通道进行通信,这样才会使得连接的消费者只会消费本连接的生产者的产品,而不会消费别的连接的产品。

上述nand flash设备管理的方法,首先将kernel层中的nftl模块设置于应用层中;对处于应用层中的nftl模块建立一个应用层信息服务接口;调用应用层信息服务接口实现nand flash设备管理。上述nand flash设备管理的方法将内nand flash驱动的关键核心核nftl模块转移到应用层中,这样能够提高程序的开发、调试和维护的效率;同时还可以选择更多的语言来开发上述程序,以满足不同的需求,具有灵活性与适用性。

基于同一发明构思,在一个实施例中,还提出一种nand flash设备管理的系统。参见图11,该nand flash设备管理的系统可以包括设置模块110、接口建立模块120和调用模块130。

其中,设置模块,用于将kernel层中的nftl模块设置于应用层中;

接口建立模块,用于对处于所述应用层中的所述nftl模块建立一个应用层信 息服务接口;

调用模块,用于调用所述应用层信息服务接口实现nand flash设备管理。

另外,参见图12,本发明提供的一种nand flash设备管理的系统中接口建立模块120具体包括:通道建立单元1201。其中,通道建立单元1201用于在应用层信息服务接口内建立一个上行通道与一个下行通道;其中,上行通道为建立处于应用层中的nftl模块与nand块设备层进行通信的通道;下行通道为建立处于应用层中的nftl模块与nand物理层进行通信的通道。

此外,在另一实施例中,在所述第二上行通道处设置有nand上行通道代理,用于接收所述nand块设备层发送的io请求,并调用所述第二上行通道提供的预设程序接口。并在所述第二下行通道处设置有nand下行通道代理,用于接收来自nftl的操作,并翻译执行nand控制层的连接操作与nand物理层的物理操作。参见图13,该实施例的nand flash设备管理的系统中调用模块130具体包括:1301、请求读取单元1302、第一启动单元1303、第一发送单元1304、执行单元1305、第二发送单元1306、第二启动单元1307、第三发送单元1308和反馈单元1309。

其中,请求接收单元1301用于nand上行通道代理接收到nand块设备层发送的io请求后,调用第二上行通道提供的预设程序接口在第二上行通道中生成通道io请求;请求读取单元1302用于第一上行通道通过读程序读取第二上行通道的通道io请求;第一启动单元1303用于启动第一上行通道的读程序对应的守护线程;第一发送单元1304用于第一上行通道的读程序将生成的通道io请求中的数据发送至应用层中;执行单元1305用于根据通道io请求调用回调函数,并在nftl模块中执行回调函数;第二发送单元1306用于当回调函数执行完成后,第一上行通道通过写程序将回调函数执行结果发送至第二上行通道;第二启动 单元1307用于启动执行请求程序对应的线程;第三发送单元1308用于执行请求程序将回调函数执行结果发送至nand上行通道代理;反馈单元1309用于由nand上行通道代理反馈回调函数执行结果至nand块设备层。

上述nand flash设备管理系统,首先通过设置模块110将kernel层中的nftl模块设置于应用层中;再通过接口建立模块120对处于应用层中的nftl模块建立一个应用层信息服务接口;最后通过调用模块130调用应用层信息服务接口实现nand flash设备管理。上述nand flash设备管理的系统将内nand flash驱动的关键核心核nftl模块转移到应用层中,这样能够提高程序的开发、调试和维护的效率;同时还可以选择更多的语言来开发上述程序,以满足不同的需求,具有灵活性与适用性。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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