首页> 中国专利> 一种向Linux内核传递内存大小参数的方法及系统

一种向Linux内核传递内存大小参数的方法及系统

摘要

本发明公开了一种向Linux内核传递内存大小参数的方法及系统,该方法包括:根据CPU平台,静态设置可支持的最大内存和最小内存;静态配置bootargs环境变量;在U?Boot引导程序运行过程中,以最大内存和最小内存为参数动态测定得到动态内存大小参数;根据动态测定得到的动态内存大小参数,重新动态生成bootargs环境变量。本发明可以减少维护麻烦,容易出错的情况发生。

著录项

  • 公开/公告号CN105785824A

    专利类型发明专利

  • 公开/公告日2016-07-20

    原文格式PDF

  • 申请/专利权人 上海斐讯数据通信技术有限公司;

    申请/专利号CN201610224257.4

  • 发明设计人 钟捷群;

    申请日2016-04-12

  • 分类号G05B19/04(20060101);

  • 代理机构上海硕力知识产权代理事务所;

  • 代理人郭桂峰

  • 地址 201616 上海市松江区思贤路3666号

  • 入库时间 2023-06-19 00:06:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-09-27

    专利权的转移 IPC(主分类):G05B19/04 专利号:ZL2016102242574 登记生效日:20220915 变更事项:专利权人 变更前权利人:杭州吉吉知识产权运营有限公司 变更后权利人:北京国科环宇科技股份有限公司 变更事项:地址 变更前权利人:310000 浙江省杭州市滨江区西兴街道江淑路260号10242室 变更后权利人:100000 北京市海淀区知春路63号北京卫星制造厂51号楼(卫星大厦)16层

    专利申请权、专利权的转移

  • 2020-02-11

    授权

    授权

  • 2017-04-12

    实质审查的生效 IPC(主分类):G05B19/04 申请日:20160412

    实质审查的生效

  • 2016-07-20

    公开

    公开

说明书

技术领域

本发明涉及操作系统领域,尤其涉及一种向Linux内核传递内存大小参数的方法及系统。

背景技术

现有技术中,常常需要采用命令行传递参数给Linux内核的U-Boot,命令行参数来源于bootargs环境变量,在bootargs中通常包含Linux可用的内存大小参数mem。

但是,在具体使用过程中,例如,出现使用同样CPU平台,但内存大小不同的产品时,静态配置bootargs存在如下问题:(1)需要对不同的产品静态配置不同的bootargs(因为mem不同),维护麻烦;(2)一旦bootargs被破坏,则内存参数丢失,可能导致产品运行出错。

由于其中内存大小参数尤为重要,因而若能够更好地向Linux内核传递内存大小参数,将能够很好的改善现有技术的缺陷,而这一目标也是本领域技术人员正在研究的方向。

发明内容

本发明所要解决的技术问题是维护麻烦,容易出错。

为了解决上述问题,本发明提供了一种向Linux内核传递内存大小参数的方法,包括步骤:

根据CPU平台,静态设置可支持的最大内存和最小内存;

静态配置bootargs环境变量;

在U-Boot引导程序运行过程中,以最大内存和最小内存为参数动态测定得到动态内存大小参数;

根据动态测定得到的动态内存大小参数,重新动态生成bootargs环境变量。

可选的,所述在U-Boot引导程序运行过程中,以最大内存和最小内存为参数动态测定内存大小参数的步骤包括:

在内存初始地址处写入预设魔术字;

将内存大小参数取初值为最小内存;

判断内存大小参数是否小于最大内存;

若小于,则读取内存初始地址加上内存大小参数处的变量;

判断变量是否等于魔术字,若等于,则动态内存大小参数取值为当前的内存大小参数,测定结束。本方案首选在动态测定过程中,限制了内存大小参数的取值范围,若超出最小内存和最大内存限定的范围,因而不会出现动态内存大小参数超出范围而出现异常的情况;另外,通过预设魔术字的设置,可以使得测定得到的动态内存大小参数符合当前产品的需要。

可选的,若在判断变量是否等于魔术字的步骤中,变量不等于魔术字,则内存大小参数乘以2;

并以新的内存大小参数,重新判断内存大小参数是否小于最大内存。循环判断,直至找到最适合的动态内存大小参数。

可选的,若在判断内存大小参数是否小于最大内存的步骤中,内存大小参数等于最大内存,则动态内存大小参数等于最大内存,测定结束。

可选的,若在判断内存大小参数是否小于最大内存的步骤中,内存大小参数大于最大内存,则反馈内存大小参数异常的警告,测定结束。若动态测定步骤出现异常,则将该异常反馈给系统,以便根据异常进行修复,帮助更好地进行维护。

可选的,所述根据动态测定得到的动态内存大小参数,重新动态生成bootargs环境变量的步骤包括:

读取环境变量bootargs,解析其中静态配置的静态内存大小参数;

判断静态内存大小参数是否存在,若存在且静态内存大小参数与动态内存大小参数不同,则使用动态内存大小参数,重新生成bootargs环境变量;

若静态内存大小参数不存在,则使用动态内存大小参数,重新生成bootargs环境变量。以动态内存大小参数为基础,重新生成的bootargs环境变量可以更好地使用当前产品的需求。

可选的,若在判断静态内存大小参数是否存在的步骤中,静态内存大小参数不存在,则在使用动态内存大小参数,重新生成bootargs环境变量的同时,返回静态内存大小参数不存在的警告。动态内存大小参数的存在使得静态内存大小参数即使丢失也不会影响到系统的正常运行,而将静态内存大小参数不存在的检测和警告,则可以帮助用户知道当前存在的异常情况,而更好地进行修复和维护,若出现该问题时,无需对机器进行全面检查即可快速得到问题存在,继而解决问题,节约时间,提高工作效率。

可选的,所述最大内存的取值等于所使用的DDR内存控制器支持访问的最大内存;

所述方法只使用一个DDR内存控制器;

将该最小内存设置为256MByte。

本方案的方法,对于内存地址的连续性要求较高,只使用一个DDR内存控制器可以减少多个内存控制器之间进行算法补偿才能够进行对应的步骤,减少工作量;当然,若多个DDR内存控制器之间内存地址连续,也可以直接使用本方法;若内存地址不连续,则在进行补偿后也可以使用本方案的方法进行内存大小参数的传递。现在市面上主要的平台中,256MByte是其中比较小的内存,直接以取最小内存值为256MByte,则无需针对各个平台不同分别进行最小内存的设置;当然,无论最小内存取值多少,该最小内存必须能够保证U-Boot的工作。

本发明还提供了一种向Linux内核传递内存大小参数的系统,包括:

CPU平台,用于运行Linux系统和U-Boot引导程序;

U-Boot引导程序,用于向所述Linux系统的Linux内核传递内存大小参数;

所述U-Boot引导程序包括:

静态配置模块,用于根据CPU平台静态设置可支持的最大内存和最小内存、以及静态配置bootargs环境变量;

动态测定模块,用于在所述U-Boot引导程序运行过程中,以最大内存和最小内存为参数动态测定得到动态内存大小参数;

bootargs环境变量重新生成模块,用于根据所述动态测定模块得到的动态内存大小参数,重新动态生成bootargs环境变量。

可选的,所述动态测定模块还用于:

在内存初始地址处写入预设魔术字;将内存大小参数取初值为最小内存;判断内存大小参数是否小于最大内存;若等于,则动态内存大小参数等于最大内存,测定结束;

若小于,则读取内存初始地址加上内存大小参数处的变量;判断变量是否等于魔术字,若等于,则动态内存大小参数取值为当前的内存大小参数,测定结束;若不等于,则内存大小参数乘以2,并以新的内存大小参数,重新判断内存大小参数是否小于最大内存;

所述bootargs环境变量重新生成模块还用于:

读取环境变量bootargs,解析其中静态配置的静态内存大小参数;

判断静态内存大小参数是否存在,若存在且静态内存大小参数与动态内存大小参数不同,则使用动态内存大小参数,重新生成bootargs环境变量;若静态内存大小参数不存在,则使用动态内存大小参数,重新生成bootargs环境变量。

与现有技术相比,本发明的技术方案具有以下优点:

由于预先依据工作平台的不同,配置和最大内存和最小内存,并将最大内存和最小内存作为参数动态测定动态内存大小参数,并以该动态内存大小参数重新动态生成bootargs环境变量;这使得即使使用同一平台,也可以通过动态内存大小参数很好的使用各种产品的需求,而无须对不同的产品静态配置不同的bootargs,避免维护麻烦的问题;另外,由于bootargs环境变量主要依靠的是动态内存大小参数生成的,初始静态配置的bootargs不再渠道决定性的作用,及时该bootargs被破坏,内存参数丢失,也不会导致产品运行出错的问题。

附图说明

图1是现有技术中U-Boot引导Linux的概略流程图;

图2是本发明向Linux内核传递内存大小参数的方法流程图;

图3是本发明运用本发明方法后U-Boot引导Linux的概略流程图;

图4是本发明实施例二的一种向Linux内核传递内存大小参数的系统示意图。

具体实施方式

在下面的描述中阐述了很多具体细节以便于充分理解本发明。但是本发明能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施的限制。

其次,本发明利用示意图进行详细描述,在详述本发明实施例时,为便于说明,所述示意图只是实例,其在此不应限制本发明保护的范围。

图1是现有技术中,U-Boot引导Linux的概略流程图,参考图1可知,常常采用到通过命令行传递参数给Linux内核的U-Boot的情况,该命令行参数来源于bootargs环境变量,在bootargs中通常包含Linux可用的内存大小参数mem;

但是,在具体操作过程中,常常会出现使用同样CPU平台,但内存大小不同的产品。碰到这类情景,静态配置bootargs存在如下问题:(1)需要对不同的产品静态配置不同的bootargs(因为mem不同),维护麻烦;(2)一旦bootargs被破坏,则内存参数丢失,可能导致产品运行出错。

下面结合附图和具体实施例对本发明的技术方案做进一步说明。

实施例一:

为了解决背景技术中的技术问题,本发明提供了一种向Linux内核传递内存大小参数的方法,如图2所示,该方法包括步骤:

S1:根据CPU平台,静态设置可支持的最大内存和最小内存;

S2:静态配置bootargs环境变量;

S3:在U-Boot引导程序运行过程中,以最大内存和最小内存为参数动态测定得到动态内存大小参数;

S4:根据动态测定得到的动态内存大小参数,重新动态生成bootargs环境变量。

与现有技术相比,本发明的技术方案具有以下优点:

由于预先依据工作平台的不同,配置和最大内存和最小内存,并将最大内存和最小内存作为参数动态测定动态内存大小参数,并以该动态内存大小参数重新动态生成bootargs环境变量;这使得即使使用同一平台,也可以通过动态内存大小参数很好的使用各种产品的需求,而无须对不同的产品静态配置不同的bootargs,避免维护麻烦的问题;另外,由于bootargs环境变量主要依靠的是动态内存大小参数生成的,初始静态配置的bootargs不再渠道决定性的作用,及时该bootargs被破坏,内存参数丢失,也不会导致产品运行出错的问题。

图3是本发明实施例U-Boot引导Linux内核的概略流程图,结合图3可知:

本实施例可选的,在U-Boot引导程序运行过程中,以最大内存和最小内存为参数动态测定内存大小参数的步骤包括:

在内存初始地址处写入预设魔术字;

将内存大小参数取初值为最小内存;

判断内存大小参数是否小于最大内存;

若小于,则读取内存初始地址加上内存大小参数处的变量;

判断变量是否等于魔术字,若等于,则动态内存大小参数取值为当前的内存大小参数,测定结束。本方案首选在动态测定过程中,限制了内存大小参数的取值范围,若超出最小内存和最大内存限定的范围,因而不会出现动态内存大小参数超出范围而出现异常的情况;另外,通过预设魔术字的设置,可以使得测定得到的动态内存大小参数符合当前产品的需要。

本实施例可选的,若在判断变量是否等于魔术字的步骤中,变量不等于魔术字,则内存大小参数乘以2;

并以新的内存大小参数,重新判断内存大小参数是否小于最大内存。循环判断,直至找到最适合的动态内存大小参数。

本实施例可选的,若在判断内存大小参数是否小于最大内存的步骤中,内存大小参数等于最大内存,则动态内存大小参数等于最大内存,测定结束。

本实施例可选的,若在判断内存大小参数是否小于最大内存的步骤中,内存大小参数大于最大内存,则反馈内存大小参数异常的警告,测定结束。若动态测定步骤出现异常,则将该异常反馈给系统,以便根据异常进行修复,帮助更好地进行维护。

本实施例可选的,根据动态测定得到的动态内存大小参数,重新动态生成bootargs环境变量的步骤包括:

读取环境变量bootargs,解析其中静态配置的静态内存大小参数;

判断静态内存大小参数是否存在,若存在且静态内存大小参数与动态内存大小参数不同,则使用动态内存大小参数,重新生成bootargs环境变量;

若静态内存大小参数不存在,则使用动态内存大小参数,重新生成bootargs环境变量。以动态内存大小参数为基础,重新生成的bootargs环境变量可以更好地使用当前产品的需求。

本实施例可选的,若在判断静态内存大小参数是否存在的步骤中,静态内存大小参数不存在,则在使用动态内存大小参数,重新生成bootargs环境变量的同时,返回静态内存大小参数不存在的警告。动态内存大小参数的存在使得静态内存大小参数即使丢失也不会影响到系统的正常运行,而将静态内存大小参数不存在的检测和警告,则可以帮助用户知道当前存在的异常情况,而更好地进行修复和维护,若出现该问题时,无需对机器进行全面检查即可快速得到问题存在,继而解决问题,节约时间,提高工作效率。

本实施例可选的,最大内存的取值等于所使用的DDR内存控制器支持访问的最大内存。

本实施例可选的,方法只使用一个DDR内存控制器。本方案的方法,对于内存地址的连续性要求较高,只使用一个DDR内存控制器可以减少多个内存控制器之间进行算法补偿才能够进行对应的步骤,减少工作量;当然,若多个DDR内存控制器之间内存地址连续,也可以直接使用本方法;若内存地址不连续,则在进行补偿后也可以使用本方案的方法进行内存大小参数的传递。

本实施例可选的,将该最小内存设置为256MByte。现在市面上主要的平台中,256MByte是其中比较小的内存,直接以取最小内存值为256MByte,则无需针对各个平台不同分别进行最小内存的设置;当然,无论最小内存取值多少,该最小内存必须能够保证U-Boot的工作。

结合图3所示,在根据测定的动态内存大小参数重新动态声测很难过bootargs环境变量后,还需要把boottargs拷贝到指定地址,并调用引导脚本搬移Linux,最后跳转知悉Linux,后续步骤与现有技术类似,主要区别在于,该bootargs里面包含有动态内存大小参数,这是现有技术所没有的。

实施例二:

图4是本发明实施例二的一种向Linux内核传递内存大小参数的系统示意图,包括:

CPU平台100,用于运行Linux系统20和U-Boot引导程序10;

U-Boot引导程序10,用于向Linux系统20的Linux内核21传递内存大小参数;

U-Boot引导程序10包括:

静态配置模块11,用于根据CPU平台静态设置可支持的最大内存和最小内存、以及静态配置bootargs环境变量;

动态测定模块12,用于在U-Boot引导程序运行过程中,以最大内存和最小内存为参数动态测定得到动态内存大小参数;

bootargs环境变量重新生成模块13,用于根据动态测定模块得到的动态内存大小参数,重新动态生成bootargs环境变量。

与现有技术相比,本发明的技术方案具有以下优点:

由于预先依据CPU平台的不同,运用U-Boot引导程序、静态配置模块、动态测定模块和bootargs环境变量重新生成模块的协调工作,配置和最大内存和最小内存,并将最大内存和最小内存作为参数动态测定动态内存大小参数,并以该动态内存大小参数重新动态生成bootargs环境变量;这使得即使使用同一平台,也可以通过动态内存大小参数很好的使用各种产品的需求,而无须对不同的产品静态配置不同的bootargs,避免维护麻烦的问题;另外,由于bootargs环境变量主要依靠的是动态内存大小参数生成的,初始静态配置的bootargs不再渠道决定性的作用,及时该bootargs被破坏,内存参数丢失,也不会导致产品运行出错的问题。

本实施例可选的,动态测定模块还用于:

在内存初始地址处写入预设魔术字;将内存大小参数取初值为最小内存;判断内存大小参数是否小于最大内存;若等于,则动态内存大小参数等于最大内存,测定结束;

若小于,则读取内存初始地址加上内存大小参数处的变量;判断变量是否等于魔术字,若等于,则动态内存大小参数取值为当前的内存大小参数,测定结束;若不等于,则内存大小参数乘以2,并以新的内存大小参数,重新判断内存大小参数是否小于最大内存;

bootargs环境变量重新生成模块还用于:

读取环境变量bootargs,解析其中静态配置的静态内存大小参数;

判断静态内存大小参数是否存在,若存在且静态内存大小参数与动态内存大小参数不同,则使用动态内存大小参数,重新生成bootargs环境变量;

若静态内存大小参数不存在,则使用动态内存大小参数,重新生成bootargs环境变量。通过预设魔术字的设置,可以使得测定得到的动态内存大小参数符合当前产品的需要;以动态内存大小参数为基础,重新生成的bootargs环境变量可以更好地使用当前产品的需求。

本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号