一种启动闪存内引导程序的方法及其网络电视和机顶盒的制作方法

文档序号:6471972阅读:191来源:国知局
专利名称:一种启动闪存内引导程序的方法及其网络电视和机顶盒的制作方法
技术领域
本发明涉及数字电视和机顶盒的系统启动技术及其设备领域,更具体的 说,涉及的是一种启动闪存内引导载入程序的方法及其网络电视和机顶盒的 改进。
背景技术
根据NAND FLASH技术标准的要求,NAND FLASH在其出厂的时候允 许有5%的坏块,所谓的NAND FLASH也叫做与非闪存,或者NAND闪存, 这样一来,当有坏块的NAND闪存作为存储介质用于存储系统程序时,其存 储数据的可靠性就非常危险。如何提高NAND闪存中bootloader引导载入程序 的可靠性,以确保操作系统能够正确引导,已经越来越备受关注。
现有的技术中,如申请号为02125341.2《一种采用与非闪存作系统存储 器的方法》的中国专利,就采用了在自举程序中设置的专用Flash管理函数, 以标记出NAND闪存在擦写过程中被损伤的坏块,从而避免在操作系统代码 在擦写时写入坏块而出现读写地址不连续的现象。但是,对于NAND闪存中 存储的自举程序即bootloader引导载入程序而言,如果自举程序一旦存储在与 非闪存的坏块上,其中的专用Flash管理函数就不能运行,显然也就无法引导 系统载入操作系统。
因此,现有技术尚有待改进和发展。

发明内容
本发明的目的是,在于提供一种启动闪存内引导程序的方法及其网络电视和机顶盒,可以提高NAND闪存中引导载入程序启动的可靠性,以确保系 统能正确引导,降低系统无法启动的失败率。 本发明的技术方案如下
一种启动闪存内引导程序的方法,包括以下步骤
A、 将引导代码存放在闪存中,启动所述闪存内的引导程序;
B、 通过所述闪存第0个块的数据标志判断当前启动是否为第一次启 动,是则转入步骤C,否则转入步骤D;
C、 扫描并记录所述闪存坏块信息,且读写数据时修改所述第0个块 的数据标志;
D、 根据记录的所述闪存坏块信息读取所述第0个块的数据,获取所 述闪存分区信息。
所述的方法,其中,所述步骤A具体包括 Al、在所述第O个块之后多个连续的块中存放所述引导程序的第一阶 段代码,且每个块中都存放一份相同的第 一阶段引导代码;
A2 、在所述闪存后续的好块中存放所述引导程序的第二阶段代码; A3、依次序启动所述的第一阶段代码,并自动搜寻所述的第二阶段代码。
所述的方法,其中,所述步骤C具体包括 Cl、扫描所述闪存,将其坏块的位置信息记录在所述第O个块的数据
中;
C2、计算环境变量的保存位置,读取系统默认的环境变量; C3、保存所述闪存分区信息,启动图片位置信息,写验证标志,写应 用程序;
C4、修改第一次启动的标志,保存数据到所述闪存第O个块的位置。 所述的方法,其中,所述步骤D具体包括
Dl、从记录的所述闪存坏块信息中计算环境变量的启动位置,读取环境变量到系统,取出所述闪存分区信息的同时读取所述第0个块的数据;D2、判断所述第O个块内最后一位数据是否为指定代码,是则转入步骤D3,否则转入步骤D4;D3 、是则系统直接从所述闪存第0个分区获取分区信息并启动图片位置信息;D4、否则直接从环境变量中获取所述闪存分区信息,并开始计算该分 区信息的偏移量和大小。一种启动闪存内引导程序的网络电视,包括一闪存芯片,所述闪存芯片 中存放有引导代码,用于启动系统的引导程序,其中,所述的网络电视还包 括一启动判断模块,用于通过所述闪存芯片第O个块的数据标志判断当前启 动是否为第一次启动;是则扫描并记录所述闪存芯片坏块信息,且读写数据 时修改所述第0个块的数据标志;否则根据记录的所述闪存芯片坏块信息读 取所述第0个块的数据,获取所述闪存芯片分区信息。所述的网络电视,其中,所述闪存芯片中的引导代码包括所述引导程序 的第一阶段引导代码和第二阶段引导代码,在所述第0个块之后多个连续的 块中存放所述第 一阶段代码,且每个块中都存放一份相同的第 一阶段引导代 码;在所述闪存芯片后续的好块中存》丈所述第二阶段代码。所述的网络电视,其中,所述的网络电视还包括一代码判断模块,用于 判断所述第O个块内最后一位数据是否为指定代码;是则系统直接从所述闪 存芯片第O个分区获取分区信息并启动图片位置信息;否则直接从环境变量 中获取所述闪存芯片分区信息,并开始计算该分区信息的偏移量和大小。一种启动闪存内引导程序的机顶盒,包括一闪存芯片,所述闪存芯片中 存放有引导代码,用于启动系统的引导程序,其中,所述的机顶盒还包括一 启动判断模块,用于通过所述闪存芯片第O个块的数据标志判断当前启动是 否为第一次启动;是则扫描并记录所述闪存芯片坏块信息,且读写数据时修 改所述第0个块的数据标志;否则根据记录的所述闪存芯片坏块信息读取所7述第o个块的数据,获取所述闪存芯片分区信息。所述的机顶盒,其中,所述闪存芯片中的引导代码包括所述引导程序的 第一阶段引导代码和第二阶段引导代码,在所述第o个块之后多个连续的块 中存放所述第一阶段代码,且每个块中都存放一份相同的第 一阶段引导代码;在所述闪存芯片后续的好块中存放所述第二阶段代码。所述的机顶盒,其中,所述的机顶盒还包括一代码判断模块,用于判断 所述第O个块内最后一位数据是否为指定代码;是则系统直接从所述闪存芯 片第O个分区获取分区信息并启动图片位置信息;否则直接从环境变量中获 取所述闪存芯片分区信息,并开始计算该分区信息的偏移量和大小。本发明所提供的一种启动闪存内引导程序的方法及其网络电视和机顶 盒,由于釆用了备份第一阶段引导代码,以及在第一次启动时记录坏块信息 的技术手段,提高了NAND闪存中引导载入程序启动的可靠性,保证了系统 正确的引导,大大降低了系统无法启动的失败率。


图1为本发明启动NAND Flash内引导程序方法的流程示意图。
具体实施方式
以下将结合附图,对本发明启动闪存内引导程序的方法及其网络电视和 机顶盒的具体实施方式
和实施例加以详细说明。本发明的 一种启动闪存内引导程序的方法及其网络电视和机顶盒,主要 核心点在于采用了备份第一阶段引导代码,以及在第一次启动时记录坏块信 息的4支术手4殳,至于NAND Flash、块、bootloader、引导代码、网络电视以 及IPTV机顶盒等技术为本领域技术人员所熟知,在此不再赘述。本发明的一种启动闪存内引导程序的方法,包括以下步骤步骤一、将引导代码存放在闪存中,启动所述闪存内的引导程序。具体包括在所述闪存第O个块之后多个连续的块中存放所述引导程序的第一阶 段代码,且每个块中都存放一份相同的第一阶段引导代码;在所述闪存后续 的好块中存放所述? I导程序的第二阶段代码;以及依次序启动所述的第 一 阶 段代码,并自动搜寻所述的第二阶段代码。步骤二、通过所述闪存第0个块的数据标志判断当前启动是否为第 一次 启动,是则转入步骤三,否则转入步骤四。步骤三、扫描并记录所述闪存坏块信息,且读写数据时修改所述第O个 块的数据标志。具体包括扫描所述闪存,将其坏块的位置信息记录在所述 第0个块的数据中;计算环境变量的保存位置,读取系统默认的环境变量; 保存所述闪存分区信息,启动图片位置信息,写验证标志,写应用程序;以 及修改第一次启动的标志,保存数据到所述闪存第0个块的位置。步骤四、根据记录的所述闪存坏块信息读取所述第O个块的数据,荻取 所述闪存分区信息。具体包括从记录的所述闪存坏块信息中计算环境变量 的启动位置,读取环境变量到系统,取出所述闪存分区信息的同时读取所述 第0个块的数据;判断所述第O个块内最后一位数据是否为指定代码,是则系 统直接从所述闪存第O个分区获取分区信息并启动图片位置信息,否则直接 从环境变量中获取所述闪存分区信息,并开始计算该分区信息的偏移量和大 小。以在某款IPTV机顶盒中TI davinci 6443为例,结合附图,详细说明启动 NAND闪存内引导程序的具体实施方式
,具体流程如附图1所示。步骤S100、启动u-boot,启动的第一步是读入第O个块的数据,因为NAND 闪存的生产厂家保证第0个块始终是没有坏块的;步骤S101、在读取数据之后,判断前4个整数是否为0x01234567, 0x89abcdef, 0xlc8b9a01, 0x98ab0022,是则说明系统已经完成第一次的启 动,转入步骤S112;否则为第一次启动,转入步骤S122;步骤S112、扫描坏块,进行坏块的记录,第5个整lt为坏块的数目,第6个整数到4*1024的地方记录的都是坏块的位置信息;步骤S113、计算u-boot的环境变量保存位置;同时为了便于后续的代码 得知系统为第一次启动,可将读数据的最后一位设置为l,也可将读数据的 2047最后设置为0xl2;步骤S 114、把系统的默认环境变量取出进行后面的处理;步骤S115、保存mtd分区信息;步骤S116、启动图片位置信息;步骤S117、写验证标志,写应用环境信息;步骤S118、修改第l次的标志为0x34,保存数据到第O个块,直接转入步 骤S130;步骤S122、读取坏块的记录信息;步骤S 123 、从坏块的记录信息中计算环境变量的启动位置; 步骤S124、读取环境变量到系统;步骤S125、从系统的环境变量中取出mtd分区信息,同时读取第O个块的 数据;步骤S 126、判断所述第O个块数据的最后一位是否为2; 步骤S127、是则系统直接从第O个分区取得mtdpart信息和启动图片位置 信息;步骤S 128、否则直接用环境变量中的mtdpart信息和启动图片位置信息; 步骤S129、开始计算分区信息的偏移量和大小,用于在启动LINUX后提 供给mtd设备驱动作FLASH分区的参数时使用;步骤S130、开始正式启动内核,同时启动linux^:作系统。 需要说明的是,在启动引导程序之前,在NAND闪存中第1块到第5块的 位置上,存放5份相同的第一阶段的引导代码ubl,其字节数大小size小于每 一块16K的字节数。同时修改ubl程序,从第6块开始,找第2阶段的引导代码 u-boot.bin,每个u-boot.bin字节数占256k,共16个块。假设u-boot.Bin的代码在10进行存放的时候,遇到了坏块,则将数据往后面的好块存放;然后ubl进行自 动的搜索,找到一个完整的u-boot.Bin,如果其启动第一个u-boot不成功,则 启动后面的u-boot, 一共4个u-boot。如果系统都启动不成功,则停止系统启 动。而本发明的 一种启动闪存内引导程序的网络电视或机顶盒,包括一 闪存 芯片,所述闪存芯片中存放有引导代码,用于启动系统的引导程序,此外, 所述的网络电视或机顶盒还包括一启动判断模块,用于通过所述闪存芯片第 O个块的数据标志判断当前启动是否为第一次启动;是则扫描并记录所述闪 存芯片坏块信息,且读写数据时修改所述第O个块的数据标志;否则根据记 录的所述闪存芯片坏块信息读取所述第0个块的数据,获取所述闪存芯片分 区信息。进一步地,位于所述网络电视或机顶盒的闪存芯片中的引导代码,包括 所述引导程序的第一阶段引导代码和第二阶段引导代码,在所述第0个块之 后多个连续的块中存放所述第 一阶段代码,且每个块中都存放一份相同的第 一阶段引导代码;在所述闪存芯片后续的好块中存放所述第二阶段代码。更进一步地,所述的网络电视或机顶盒还包括一代码判断模块,用于判 断所述第0个块内最后一位数据是否为指定代码;是则系统直接从所述闪存 芯片第0个分区获取分区信息并启动图片位置信息;否则直接从环境变量中 获取所述闪存芯片分区信息,并开始计算该分区信息的偏移量和大小。以上优选实施例中备份第 一阶段《1导代码,以及在第 一次启动时记录坏 块信息的技术根据实际应用可以釆用现有各种可能的方案,为本领域技术人 员所熟知,在此也不再赘述。本发明的具体实施方式
所描述的 一种启动闪存内引导程序的方法及其 网络电视和机顶盒,由于采用了备份第一阶段引导代码,以及在第一次启动 时记录坏块信息的技术手段,提高了NAND闪存中引导载入程序启动的可靠 性,保证了系统正确的引导,大大降低了系统无法启动的失败率。应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改 进或变换,例如备份引导代码的份数变化,变换第一次启动的标志代码等, 而所有这些改进和变换都本应属于本发明所附权利要求的保护范围。
权利要求
1、一种启动闪存内引导程序的方法,包括以下步骤A、将引导代码存放在闪存中,启动所述闪存内的引导程序;B、通过所述闪存第0个块的数据标志判断当前启动是否为第一次启动,是则转入步骤C,否则转入步骤D;C、扫描并记录所述闪存坏块信息,且读写数据时修改所述第0个块的数据标志;D、根据记录的所述闪存坏块信息读取所述第0个块的数据,获取所述闪存分区信息。
2、 根据权利要求1所述的方法,其特征在于,所述步骤A具体包括 Al、在所述第0个块之后多个连续的块中存放所述引导程序的第一阶段代码,且每个块中都存放一份相同的第 一 阶段引导代码;A2 、在所述闪存后续的好块中存放所述引导程序的第二阶段代码; A3、依次序启动所述的第一阶段代码,并自动搜寻所述的第二阶段代码。
3、 根据权利要求所述的方法,其特征在于,所述步骤C具体包括 Cl、扫描所述闪存,将其坏块的位置信息记录在所述第0个块的数据中;C2、计算环境变量的保存位置,读取系统默认的环境变量; C3、保存所述闪存分区信息,启动图片位置信息,写验证标志,写 应用程序;C4、修改第一次启动的标志,保存数据到所述闪存第O个块的位置。
4、 根据权利要求1所述的方法,其特征在于,所述步骤D具体包括 Dl、从记录的所述闪存坏块信息中计算环境变量的启动位置,读取环境变量到系统,取出所述闪存分区信息的同时读取所述第0个块的数据; D2、判断所述第0个块内最后一位数据是否为指定代码,是则转入步骤D3,否则转入步骤D4;D3、是则系统直接从所述闪存第0个分区获取分区信息并启动图片位置信息;D4、否则直接从环境变量中获取所述闪存分区信息,并开始计算该 分区信息的偏移量和大小。
5、 一种启动闪存内引导程序的网络电视,包括一闪存芯片,所述闪存 芯片中存放有引导代码,用于启动系统的引导程序,其特征在于,所述的 网络电视还包括一启动判断模块,用于通过所述闪存芯片第0个块的数据 标志判断当前启动是否为第 一次启动;是则扫描并记录所述闪存芯片坏块 信息,且读写数据时修改所述第0个块的数据标志;否则根据记录的所述 闪存芯片坏块信息读取所述第0个块的数据,获取所述闪存芯片分区信息。
6、 根据权利要求5所述的网络电视,其特征在于,所述闪存芯片中的 引导代码包括所述引导程序的第一阶段引导代码和第二阶段引导代码,在 所述第0个块之后多个连续的块中存放所述第一阶段代码,且每个块中都 存放一份相同的第 一阶段引导代码;在所述闪存芯片后续的好块中存放所 述第二阶段代码。
7、 根据权利要求5或6所述的网络电视,其特征在于,所述的网络电 视还包括一代码判断模块,用于判断所述第0个块内最后一位数据是否为 指定代码;是则系统直接从所述闪存芯片第0个分区获取分区信息并启动图片位置信息;否则直接从环境变量中获取所述闪存芯片分区信息,并开 始计算该分区信息的偏移量和大小。
8、 一种启动闪存内引导程序的机顶盒,包括一闪存芯片,所述闪存芯 片中存放有引导代码,用于启动系统的引导程序,其特征在于,所述的机 顶盒还包括一启动判断模块,用于通过所述闪存芯片第0个块的数据标志 判断当前启动是否为第一次启动;是则扫描并记录所述闪存芯片坏块信息, 且读写数据时修改所述第o个块的数据标志;否则根据记录的所述闪存芯 片坏块信息读取所述第0个块的数据,获取所述闪存芯片分区信息。
9、 根据权利要求8所述的机顶盒,其特征在于,所述闪存芯片中的引 导代码包括所述引导程序的第一阶段引导代码和第二阶段引导代码,在所 述第0个块之后多个连续的块中存放所述第一阶段代码,且每个块中都存 放一份相同的第 一阶段S1导代码;在所述闪存芯片后续的好块中存放所述 第二阶段代码。
10、 根据权利要求8或9所述的机顶盒,其特征在于,所述的机顶盒 还包括一代码判断模块,用于判断所述第0个块内最后一位数据是否为指 定代码;是则系统直接从所述闪存芯片第0个分区获取分区信息并启动图 片位置信息;否则直接从环境变量中获取所述闪存芯片分区信息,并开始 计算该分区信息的偏移量和大小。
全文摘要
本发明公开了一种启动闪存内引导程序的方法及其网络电视和机顶盒,所述的方法包括以下步骤将引导代码存放在闪存中,启动所述闪存内的引导程序;通过所述闪存第0个块的数据标志判断当前启动是否为第一次启动,是则扫描并记录所述闪存坏块信息,且读写数据时修改所述第0个块的数据标志;否则根据记录的所述闪存坏块信息读取所述第0个块的数据,获取所述闪存分区信息。由于采用了备份第一阶段引导代码,以及在第一次启动时记录坏块信息的技术手段,提高了NAND闪存中引导载入程序启动的可靠性,保证了系统正确的引导,大大降低了系统无法启动的失败率。
文档编号G06F12/06GK101520735SQ20081024165
公开日2009年9月2日 申请日期2008年12月18日 优先权日2008年12月18日
发明者王丛华 申请人:康佳集团股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1