专利名称:一种存储设备的挂载方法、系统及电视的制作方法
技术领域:
本发明属于电视技术领域,尤其涉及一种存储设备的挂载方法、系统及电视。
背景技术:
Android系统目前支持的外部存储设备主要是安全数码卡(Secure DigitalMemory Card, sdcard), Android系统加载sdcard的过程是将sdcard相关的挂载信息写入到/etc/void, fstab,开机时通过初始化程序解析void, fstab,动态挂载sdcard,应用程序对sdcard的访问主要通过/mnt/sdcard目录来完成。Android系统自动挂载外部存储设备主要通过vold(Volume Daemon)函数来完成,对于usb存储设备的支持有缺陷。目前存在的缺陷主要如下
I、支持文件系统有限,当前仅支持文件配置表(File Allocation Table, fat)类型的文件系统。2、不能支持一个盘多个分区的挂载。3、对支持动态插拔的usb存储设备,由于加载时无通用唯一识别码(UniversallyUnique Identifier, uuid),不能确定盘的唯一性。4、应用程序不能获取到存储设备的每个分区的名称,用户体验较差。综上所述,现有技术中Android系统提供的存储设备的挂载方法,比较适合挂载sdcard,但不太适合其它类型的外部存储设备,比如USB类型的外部存储设备。
发明内容
本发明实施例提供了一种存储设备的挂载方法、系统,旨在解决现有技术中Android系统提供的存储设备的挂载方法,不太适合其它类型,比如USB类型的外部存储设备的问题。—方面,提供一种存储设备的挂载方法,所述方法包括内核层加载存储设备的驱动;获取所述存储设备的主设备号和次设备号;本地层根据所述主设备号和次设备号创建所述存储设备的设备文件;从创建的所述设备文件中提取对所述存储设备进行分区的文件系统的类型,所述存储设备的每个分区的唯一识别码和/或所述存储设备的每个分区的名称;判断所述文件系统的类型是否为空,如果否,则根据所述存储设备的每个分区的唯一识别码在预设的目录下创建所述存储设备的挂载路径,如判断文件系统类型为空,则提示用户;根据所述设备文件的名称、所述文件系统的类型以及所述存储设备的每个分区的唯一识别码挂载所述存储设备至所述挂载路径下。另一方面,提供一种存储设备的挂载系统,所述系统包括驱动加载单元,用于加载存储设备的驱动;
设备号获取单元,用于获取所述存储设备的主设备号和次设备号;设备文件创建单元,用于根据所述主设备号和次设备号创建所述存储设备的设备文件;设备信息提取单元,用于从创建的所述设备文件中提取对所述存储设备进行分区的文件系统的类型,所述存储设备的每个分区的唯一识别码和/或所述存储设备的每个分区的名称;挂载路径创建单元,用于判断所述文件系统的类型是否为空,如果否,则根据所述存储设备的每个分区的唯一识别码在预设的目录下创建所述存储设备的挂载路径,如判断文件系统类型为空,则提示用户;设备挂载单元,用于根据所述设备文件的名称、所述文件系统的类型以及所述存 储设备的每个分区的唯一识别码挂载所述存储设备至所述挂载路径下。再一方面,提供一种电视,所述电视包括如上所述的存储设备的挂载系统。在本发明实施例中,Android系统即可根据不同的文件系统进行分区挂载,获取到存储设备的每个分区的唯一识别码uuid后,可以将挂载路径设置为/mnt/uuid,因为uuid为文件系统的唯一标识,不会冲突,并且容易识别,可以方便Android 系统的其他模块区分不同的存储设备,增强Android系统对存储设备的管理。
图I是本发明实施例一提供的存储设备的挂载方法的实现流程图;图2是本发明实施例二提供的存储设备的挂载方法的实现流程图;图3是本图2的挂载路径与盘名之间的映射关系示意图;图4是本发明实施例三提供的存储设备的挂载系统的结构框图;图5是本发明实施例四提供的存储设备的挂载系统的结构框图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。在本发明实施例中,加载存储设备的驱动并获取所述存储设备的主设备号和次设备号;根据所述主设备号和次设备号创建所述存储设备的设备文件;从所述设备文件中提取文件系统的类型,与所述存储设备的每个分区的唯一识别码;根据所述存储设备的每个分区的唯一识别码在预设的目录下创建所述存储设备的挂载路径;当所述文件系统的类型不为空时,根据所述设备文件的名称、所述文件系统的类型以及所述存储设备的每个分区的唯一识别码挂载所述存储设备至所述挂载路径下。以下结合具体实施例对本发明的实现进行详细描述实施例一图I示出了本发明实施例一提供的存储设备的挂载方法的实现流程,详述如下在步骤SlOl中,内核层Kernel level加载存储设备的驱动。在本实施例中,当Android系统检测到有外部存储设备接入时,通过Linux内核层Kernel level加载所述存储设备的驱动,其中,本实施例中,将外部存储设备以USB存储设备为例来进行说明,但具体应用时,并不限于USB存储设备。在步骤S102中,获取所述存储设备的主设备号和次设备号。在本实施例中,Kernel level加载所述存储设备的驱动至Android系统中后,通过连接器(Netlink)机制,仓Il建kernel和用户空间的通信套接字socket,通过该socket动态的接收kernel level发送的有关外部存储设备的Uevent信息,从所述Uevent信息中解析出所述存储设备的主设备号(major)、次设备号(minor)。其中,Netlink是一种特殊的socket,它是Linux所特有的,类似于伯克利软件套件(Berkeley Software Distribution,BSD)中的AF_R0UTE,但又远比它的功能强大,目前在最新的Linux内核(2. 6. 14)中使用Netlink进行应用与内核通信的应用很多,包括路由 daemon (NETLINK_R0UTE)、1-wire 子系统(NETLINK_W1)、用户态 socket 协议(NETLINK_ USERS0CK)、防火墙(NETLINK_FIREWALL)、socket 监视(NETLINK_INET_DIAG)、netfilter日志(NETLINK_NFL0G)、ipsec 安全策略(NETLINK_XFRM),SELinux 事件通知(NETLINK_SELINUX)、iSCSI 子系统(NETLINK_ISCSI),进程审计(NETLINK_AUDIT)、转发信息表查询(NETLINK_FIB_L00KUP),netlink connector (NETLINK_C0NNECT0R)、netfilter 子系统(NETLINK_NETFILTER)、IPv6 防火墙(NETLINK_IP6_FW)、DECnet 路由信息(NETLINK_DNRTMSG)、内核事件向用户态通知(NETLINK_K0BJECT_UEVENT)和通用 netlink(NETLINK_GENERIC)。其中,在Linux中王设备号被系统用来确定驱动程式(设备类型如USB设备,硬盘设备),次设备号被驱动程式用来确定具体的设备。在步骤S103中,本地层根据所述存储设备的主设备号和次设备号创建所述存储设备的设备文件。在本实施例中,本地层Native level根据Kernel level获取的主设备号和次设备号在Android系统预设的目录/dev/block/void下创建存储设备的设备文件。具体的设备文件的创建可以通过本地层提供的mknod函数来实现,mknod函数说明如下int mknod (const char*pathname, mode_t mode, dev_t dev);dev_t dev = (major << 8) |minor。在步骤S104中,从所述设备文件中提取对所述存储设备进行分区的文件系统的类型、所述存储设备的每个分区的唯一识别码和/或所述存储设备的每个分区的名称。在本实施例中,通过Android系统本地层Native level的blkid库及uuid库从创建的设备文件中提取对存储设备进行分区的文件系统的类型fstype和存储设备的每个分区的唯一识别码uuid,当然,也可以提取存储设备的每个分区的名称label。通过blkid库获取对存储设备进行分区的文件系统的类型后,Android系统即可根据不同的文件系统进行分区挂载,通过uuid库获取到存储设备的每个分区的唯一识别码uuid后,可以将挂载路径设置为/mnVuuid,因为uuid为文件系统的唯一标识,不会冲突,并且容易识别,可以方便Android系统的其他模块区分不同的存储设备,增强Android系统对存储设备的管理。通过uuid库获取到存储设备的每个分区的名称后,可以在应用程序层App level显示存储设备的每个分区的名称给用户,增强用户体验。在步骤S105中,判断所述文件系统的类型是否为空,如果否,则根据所述存储设备的每个分区的唯一识别码在预设的目录下创建所述存储设备的挂载路径。在本实施例中,当提取到的文件系统的类型fstype不为空时,则可以根据获取的uuid在Android系统预设的目录/mnt/usb/下创建uuid目录,该uuid目录即为所述存储设备的挂载路径,如判断文件系统类型为空,则提示用户。在步骤S106中,根据所述设备文件的名称、所述文件系统的类型以及所述存储设备的每个分区的唯一识别码挂载所述存储设备至所述挂载路径下。在本实施例中,通过mount函数来实现存储设备的挂载,具体的mount函数的说明如下#include<sys/mount. h> int mount (const char 氺 source, const char 氺 target, constchar*filesystemtype, unsigned long mountflags, const void氺data)。本实施例,先创建外部存储设备的设备文件,再从所述设备文件中提取出对所述存储设备进行分区的文件系统的类型和所述存储设备的每个分区的唯一识别码,当所述文件系统的类型不为空时,则根据所述存储设备的每个分区的唯一识别码在预设的目录下创建所述唯一识别码的目录,最后根据所述设备文件的名称、所述文件系统的类型以及所述存储设备的每个分区的唯一识别码挂载所述存储设备至所述唯一识别码的目录下。实现了通过文件系统的类型挂载存储设备,并且通过uuid库获取到存储设备的每个分区的唯一识别码uuid后,可以将挂载路径设置为/mnt/uuid,因为uuid为文件系统的唯一标识,不会冲突,并且容易识别,可以方便Android系统的其他模块区分不同的存储设备,增强 Android系统对存储设备的管理。实施例二图2示出了本发明实施例二提供的存储设备的挂载方法的实现流程,详述如下在步骤S201中,内核层Kernel level加载存储设备的驱动。在步骤S202中,获取所述存储设备的主设备号和次设备号。在步骤S203中,本地层根据所述存储设备的主设备号和次设备号创建所述存储设备的设备文件,在Linux中主设备号被系统用来确定驱动程式(设备类型如USB设备,硬盘设备),次设备号被驱动程式用来确定具体的设备。在步骤S204中,从所述设备文件中提取对所述存储设备进行分区的文件系统的类型、所述存储设备的每个分区的唯一识别码和/或所述存储设备的每个分区的名称。在步骤S205中,判断所述文件系统的类型是否为空,如果否,则根据所述存储设备的每个分区的唯一识别码在预设的目录下创建所述存储设备的挂载路径mountpoint,如判断文件系统类型为空,则提示用户。在步骤S206中,根据所述设备文件的名称、所述文件系统的类型以及所述存储设备的每个分区的唯一识别码挂载所述存储设备至所述挂载路径下。在步骤S207中,本地层发送所述存储设备的信息至框架层。在本实施例中,所述存储设备的信息包括所述存储设备的挂载路径、对所述存储设备进行分区的文件系统的类型、所述存储设备的每个分区的唯一识别码和/或所述存储设备的每个分区的名称。所述存储设备的信息还包括存储设备文件的名称或/和所述存储设备的文件目录信息与文件目录信息或/和文件的名称建立的关联映射,实现通过对象的名称信息获取对象的目录信息。具体的,Android系统启动时,仓Ij建的vold(socket)来完成Android系统的本地层(c/c++)与框架层(java)通信,通过这个socket传递存储设备的mountpoint、fstype、label和uuid至框架层。在步骤S208中,框架层建立挂载路径与所述存储设备的每个分区的名称的映射关系,并提供应用层访问所述存储设备的信息的接口。在本实施例中,框架层接收到本地层发送的存储设备的信息后,建立存储设备的每个分区的挂载路径与存储设备的每个分区的名称的关联映射,实现通过分区的名称获取分区的挂载路径,通过分区的挂载路径访问分区的内容。在本实施例中,是通过哈希表的Map接口 Hashmap来建立每个分区的挂载路径与存储设备的每个分区的名称的关联映射关 系,具体的映射实例如图3所示,建立好每个分区的挂载路径与每个分区的名称之间的映射关系后,框架层可通过存储设备的每个分区的名称获取到访问存储设备的路径,通过该路径即可实现存储设备的访问。进一步,通过建立文件夹与文件的路径映射,即建立的名称与路径的Hashmap映射关系,可以在框架层即时读取存储设备的文件夹名称与文件名称,并即时获取对象的路径,实现快速对存储设备内容的访问。具体的,步骤S208所述接口包括获取存储设备的每个分区的名称的接口、获取每个分区的挂载路径的接口 ;通过存储设备的设备文件的名称、文件目录的名称获取对应文件、文件目录信息的接口 ;通过分区的名称获取分区的挂载路径的接口。框架层可以提供应用层获取存储设备的label和uuid的接口。比如,获取存储设备的每个分区的名称函数getVolumeLabel ()、获取文件系统的类型的函数getVolume Fstype ()、获取每个分区的唯一识别码的函数getVolume UuidO和获取挂载路径的函数getVolumeMountpoint ()。在步骤S209中,应用层调用所述框架层提供的接口,在用户图形界面显示所述存储设备的信息。现有技术应用访问存储设备有两种方式I、直接通过挂载路径名(如/mnt/uuid、/mnt/sd*、/mnt/USB*)去访问,这种方式用户体验较差,感觉很困惑。因为用户不知道这种路径到底是什么意思,代表那个盘。2、通过别名方式去访问,如(USBI---/mnt/USBl sdal---/mnt/sdal),这种方式的
缺点是盘插入usb 口的顺序不一致,显示的别名也不一样,每次都在变化。在本实施例中,应用层先调用getVolumeLabel ()显示label (存储设备的每个分区的名称)给用户,用户需要访问盘的时候,通过Android框架层提供的接口(StringgetVolumeMountpoint (String label))获取挂载路径(/mnt/uuid),然后,应用直接显示该目录的内容,即可完成存储设备的访问,有效的解决了上述问题。在本实施例中,步骤S201-S206的执行和上述实施例一中的步骤S101-S106的执行过程类似,详情参见上述实施例一的描述。步骤S207可以和步骤S206并行运行在步骤S205之后,也可以在步骤S206之前或者之后执行,没有先后次序之分。本实施例,通过框架层提供的接口函数,应用层先显示盘名给用户,用户可以根据该盘名访问存储设备,提高了存储设备的直观性,增强了用户体验。实施例三图4示出了本发明实施例三提供的存储设备的挂载系统的具体结构框图,为了便于说明,仅示出了与本发明实施例相关的部分。在本实施例中,该存储设备的挂载系统是内置于电视中的软件单元、硬件单元或者软硬件结合的单元,该存储设备的挂载系统包括驱动加载单元41、设备号获取单元42、设备文件创建单元43、设备信息提取单元44、挂载路径创建单元45和设备挂载单元46。其中,驱动加载单元41,用于加载存储设备的驱动;
设备号获取单兀42,用于获取所述存储设备的主设备号和次设备号;设备文件创建单元43,用于根据所述主设备号和次设备号创建所述存储设备的设备文件;设备信息提取单元44,用于从创建的所述设备文件中提取对所述存储设备进行分区的文件系统的类型,所述存储设备的每个分区的唯一识别码和/或所述存储设备的每个分区的名称;挂载路径创建单元45,用于判断所述文件系统的类型是否为空,如果否,则根据所述存储设备的每个分区的唯一识别码在预设的目录下创建所述存储设备的挂载路径;设备挂载单元46,用于根据所述设备文件的名称、所述文件系统的类型以及所述存储设备的每个分区的唯一识别码挂载所述存储设备至所述挂载路径下。具体的,所述设备号获取单元42包括套接字建立模块、Uevent信息接收模块和设备号提取模块。其中,套接字建立模块,用于创建内核和用户空间的通信套接字socket ;Uevent信息接收模块,用于通过所述socket动态的接收内核层发送的有关所述存储设备的Uevent信息;设备号提取模块,用于从所述Uevent信息中解析出所述存储设备的主设备号和次设备号,在Linux中,主设备号被系统用来确定驱动程式(设备类型如USB设备,硬盘设备),次设备号被驱动程式用来确定具体的设备。本发明实施例提供的存储设备的挂载系统可以应用在前述对应的方法实施例一中,详情参见上述实施例一的描述,在此不再赘述。实施例四图5示出了本发明实施例四提供的存储设备的挂载系统的具体结构框图,为了便于说明,仅示出了与本发明实施例相关的部分。在本实施例中,该存储设备的挂载系统是内置于电视中的软件单元、硬件单元或者软硬件结合的单元,该存储设备的挂载系统包括驱动加载单元51、设备号获取单元52、设备文件创建单元53、设备信息提取单元54、挂载路径创建单元55、设备挂载单元56、信息发送单元57、接口创建单元58和信息显示单元59。其中,驱动加载单元51、设备号获取单元52、设备文件创建单元53、设备信息提取单元54、挂载路径创建单元55、设备挂载单元56的功能请参见实施例三中的描述,在此不再赘述。信息发送单元57,用于发送存储设备的信息至框架层,所述存储设备的信息包括所述存储设备的挂载路径、对所述存储设备进行分区的文件系统的类型、所述存储设备的每个分区的唯一识别码和/或所述存储设备的每个分区的名称;接口创建单元58,用于保存所述存储设备的信息至预设的数据结构中,并提供应用层访问所述存储设备的信息的接口,所述接口包括获取存储设备的每个分区的名称的接口和获取每个分区的挂载路径的接口;信息显示单元59,用于调用框架层提供的接口,在用户图形界面显示所述存储设备的信息。所述系统还包括存储映射单元,该单元用于建立存储设备的每个分区挂载路径与每个分区的名称之间的关联映射,实现通过分区名称获取分区的挂载路径,通过分区的挂载路径访问分区的内容;所述存储映射单元还用于建立存储设备文件的名称或/和所述存储设备的文件目录信息与文件目录信息或/和文件的名称建立的关联映射,实现通过对 象的名称信息获取对象的目录信息。本发明实施例提供的存储设备的挂载系统可以应用在前述对应的方法实施例二中,详情参见上述实施例二的描述,在此不再赘述。值得注意的是,上述系统实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。另外,本领域普通技术人员可以理解实现上述各实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,相应的程序可以存储于一计算机可读取存储介质中,所述的存储介质,如R0M/RAM、磁盘或光盘等。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种存储设备的挂载方法,其特征在于,所述方法包括 内核层加载存储设备的驱动; 获取所述存储设备的主设备号和次设备号; 本地层根据所述主设备号和次设备号创建所述存储设备的设备文件; 从创建的所述设备文件中提取对所述存储设备进行分区的文件系统的类型,所述存储设备的每个分区的唯一识别码和/或所述存储设备的每个分区的名称; 判断所述文件系统的类型是否为空,如果否,则根据所述存储设备的每个分区的唯一识别码在预设的目录下创建所述存储设备的挂载路径; 根据所述设备文件的名称、所述文件系统的类型以及所述存储设备的每个分区的唯一识别码挂载所述存储设备至所述挂载路径下。
2.如权利要求I所述的方法,其特征在于,在所述根据所述存储设备的每个分区的唯一识别码在预设的目录下创建所述存储设备的挂载路径的步骤之后,所述方法还包括 本地层发送所述存储设备的信息至框架层,所述存储设备的信息包括所述存储设备的挂载路径、对所述存储设备进行分区的文件系统的类型、所述存储设备的每个分区的唯一识别码和/或所述存储设备的每个分区的名称; 框架层保存所述存储设备的信息至预设的数据结构中,并提供应用层访问所述存储设备的信息的接口; 应用层调用所述框架层提供的接口,在用户图形界面显示所述存储设备的信息。
3.如权利要求2所述的方法,其特征在于,在所述框架层保存所述存储设备的信息至预设的数据结构中,并提供应用层访问所述存储设备的信息的接口步骤之前还包括 建立存储设备的每个分区的挂载路径与每个分区的名称之间的关联映射,实现通过分区的名称获取分区的挂载路径,通过分区的挂载路径访问分区的内容。
4.如权利要求2所述的方法,其特征在于,所述存储设备的信息还包括存储设备文件的名称或/和所述存储设备的文件目录信息与文件目录信息或/和文件的名称建立的关联映射,实现通过对象的名称信息获取对象的目录信息。
5.如权利要求2所述的的方法,其特征在于,所述接口包括 获取存储设备的每个分区的名称的接口、获取每个分区的挂载路径的接口。
通过存储设备的设备文件的名称、文件目录的名称获取对应文件、文件目录信息的接n ; 通过分区的名称获取分区的挂载路径的接口。
6.如权利要求I所述的方法,其特征在于,所述获取所述存储设备的主设备号和次设备号具体为 创建内核和用户空间的通信套接字socket ; 通过所述socket动态的接收内核层发送的有关所述存储设备的Uevent信息; 从所述Uevent信息中解析出所述存储设备的主设备号和次设备号。
7.一种存储设备的挂载系统,其特征在于,所述系统包括 驱动加载单元,用于加载存储设备的驱动; 设备号获取单元,用于获取所述存储设备的主设备号和次设备号; 设备文件创建单元,用于根据所述主设备号和次设备号创建所述存储设备的设备文件; 设备信息提取单元,用于从创建的所述设备文件中提取对所述存储设备进行分区的文件系统的类型,所述存储设备的每个分区的唯一识别码和/或所述存储设备的每个分区的名称; 挂载路径创建单元,用于判断所述文件系统的类型是否为空,如果否,则根据所述存储设备的每个分区的唯一识别码在预设的目录下创建所述存储设备的挂载路径; 设备挂载单元,用于根据所述设备文件的名称、所述文件系统的类型以及所述存储设备的每个分区的唯一识别码挂载所述存储设备至所述挂载路径下。
8.如权利要求7所述的系统,其特征在于,所述系统还包括 存储映射单元,用于建立存储设备的每个分区挂载路径与每个分区的名称之间的关联映射,实现通过分区名称获取分区的挂载路径,通过分区的挂载路径访问分区的内容。
9.如权利要求7所述的系统,其特征在于,所述存储映射单元还用于建立存储设备文件的名称或/和所述存储设备的文件目录信息与文件目录信息或/和文件的名称建立的关联映射,实现通过对象的名称信息获取对象的目录信息。
10.如权利要求7所述的系统,其特征在于,所述系统还包括 信息发送单元,用于发送存储设备的信息至框架层,所述存储设备的信息包括所述存储设备的挂载路径、对所述存储设备进行分区的文件系统的类型、所述存储设备的每个分区的唯一识别码和/或所述存储设备的每个分区的名称; 接口创建单元,用于保存所述存储设备的信息至预设的数据结构中,并提供应用层访问所述存储设备的信息的接口; 信息显示单元,用于调用框架层提供的接口,在用户图形界面显示所述存储设备的信肩、O
11.如权利要求7所述的系统,其特征在于,所述设备号获取单元包括 套接字建立模块,用于创建内核和用户空间的通信套接字socket ; Uevent信息接收模块,用于通过所述socket动态的接收内核层发送的有关所述存储设备的Uevent信息; 设备号提取模块,用于从所述Uevent信息中解析出所述存储设备的主设备号和次设备号。
12.—种电视,其特征在于,所述电视包括如权利要求7至11任意一项所述的存储设备的挂载系统。
全文摘要
本发明适用于电视技术领域,提供了一种存储设备的挂载方法、系统,所述方法包括加载存储设备的驱动;获取存储设备的主设备号和次设备号;根据主设备号和次设备号创建存储设备的设备文件;从设备文件中提取对存储设备进行分区的文件系统的类型、存储设备的每个分区的唯一识别码和/或存储设备的每个分区的名称;判断所述文件系统的类型是否为空,如果否,则根据存储设备的每个分区的唯一识别码在预设的目录下创建存储设备的挂载路径;根据设备文件的名称、文件系统的类型以及存储设备的每个分区的唯一识别码挂载存储设备至挂载路径下。本发明,可以方便Android系统的其他模块区分不同的存储设备,增强对存储设备的管理。
文档编号G06F17/30GK102682088SQ20121012162
公开日2012年9月19日 申请日期2012年4月23日 优先权日2012年4月23日
发明者崔小康 申请人:Tcl集团股份有限公司