一种u-boot启动过程中Linux基址动态更新方法及系统的制作方法

文档序号:9765818阅读:396来源:国知局
一种u-boot启动过程中Linux基址动态更新方法及系统的制作方法
【技术领域】
[0001 ] 本发明涉及Linux应用领域,特别是涉及一种U-boot启动过程中Linux基址动态更新的方法及系统。
【背景技术】
[0002]采用u-boot引导Linux的嵌入式产品,一般通过引导脚本来自动引导Linux。引导脚本一般负责把Linux程序从保存在flash的基址处搬移到内存中,然后跳转到内存中执行Linux程序。现有技术中,Linux-base通常需要在代码中根据产品规格,在u-boot编译前静态配置写死。每款产品都要做配置,容易出错,维护麻烦。

【发明内容】

[0003]鉴于以上所述现有技术的缺点,本发明的目的在于提供一种u-boot启动过程中Linux基址动态更新方法及系统,用于解决现有技术中不能动态更新Linux基址,而需要针对每款产品做Linux基址的静态配置的问题。
[0004]为实现上述目的及其他相关目的,本发明提供一种u-boot启动过程中Linux基址动态更新方法,包括:预先设定u-boot程序和Linux程序的约束关系;在u-boot程序启动过程中动态解析flash基址;根据所述flash基址和所述约束关系,计算Linux基址;将所述Linux基址更新到环境变量中。
[0005]于本发明的一具体实施例中,所述预先设定u和Linux程序的约束关系的步骤包括:将Linux程序和u-boot程序保存在同一flash中;其中,u-boot程序从flash基址处开始保存,Linux程序在相对flash基址的固定偏移0x100000处开始保存。
[0006]于本发明的一具体实施例中,在u-boot程序启动过程中动态解析flash基址的步骤包括:在所述u-boot程序启动过程中,将所述u-boot程序从flash搬移到内存的内存基址处。
[0007]于本发明的一具体实施例中,将所述u-boot程序从flash搬移到内存的内存基址处的步骤包括:将搬移到的内存基址保存到全局数据gd的重定位地址成员;将内存基址和flash基址的差值保存到全局数据gd的重定位偏移成员;根据flash基址计算公式解析所述flash基址;其中所述flash基址计算公式为:flash基址=(重定位地址-重定位偏移)。
[0008]于本发明的一具体实施例中,根据公式:Linux基址= (flash基址+0x100000),计算所述Linux基址。
[0009]为实现上述目的及其他相关目的,本发明还提供一种u-boot启动过程中Linux基址动态更新系统,包括:预设模块,用以预先设定u-boot程序和Linux程序的约束关系;解析模块,用以在u-boot程序启动过程中动态解析flash基址;计算模块,用以根据所述flash基址和所述约束关系,计算Linux基址;更新模块,用以将所述Linux基址更新到环境变量中。
[0010]于本发明的一具体实施例中,所述预设模块还用以将Linux程序和U-boot程序保存在同一flash中;其中,u_boot程序从flash基址处开始保存,Linux程序在相对flash基址的固定偏移Oxl OOOOO处开始保存。
[0011]于本发明的一具体实施例中,所述解析模块:用以在所述U-boot程序启动过程中,将所述u-boot程序从flash搬移到内存的内存基址处。
[0012]于本发明的一具体实施例中,将所述u-boot程序从flash搬移到内存的内存基址处的方式包括:将搬移到的内存基址保存到全局数据gd的重定位地址成员;将内存基址和flash基址的差值保存到全局数据gd的重定位偏移成员;根据flash基址计算公式解析所述flash基址;其中所述flash基址计算公式为:flash基址=(重定位地址-重定位偏移)。
[0013]于本发明的一具体实施例中,所述计算模块根据公式:Linux基址=(flash基址+0x100000),计算所述Linux基址。
[OOM]如上所述,本发明的u-boot启动过程中Linux基址动态更新方法及系统,可预先设定u-boot程序和Linux程序的约束关系;在u-boot程序启动过程中动态解析flash基址;根据所述flash基址和所述约束关系,计算Linux基址;将所述Linux基址更新到环境变量中。通过增加约束关系,实现在u-boot启动过程中对Linux基址进行动态更新,无需预先静态配置,运行灵活、简化配置、且降低系统的维护难度。
【附图说明】
[0015]图1显示为现有技术中Linux程序的引导流程示意图。
[0016]图2显示为本发明的U-boot启动过程中Linux基址动态更新方法在一具体实施例中的流程示意图。
[0017]图3显示为应用为本发明的u-boot启动过程中Linux基址动态更新方法或系统的一具体实施例的Linux程序引导的流程示意图。
[00?8]图4显示为本发明的u-boo t启动过程中L i nux基址动态更新系统在一具体实施例中的流程示意图。
[0019]元件标号说明
[°02°] IU-boot启动过程中Linux基址动态更新系统
[0021]11预设模块
[0022]12解析模块
[0023]13计算模块
[0024]14更新模块
[0025]Sll ?S14 步骤
【具体实施方式】
[0026]以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的【具体实施方式】加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
[0027]需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图示中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
[0028]采用U-boot引导Linux的嵌入式产品,一般通过引导脚本来自动引导Linux。引导脚本一般负责把Linux程序从保存在flash的基址处搬移到内存中,然后跳转到内存中执行Linux程序。现有技术的执行过程通常为如图1所示,具体为:U-boot启动,获取环境变量Linux-base (Linux基址),其中Linux基址为OXf0100000 ;以Linux基址为参数,调用引导脚本,引导脚本搬移Linux,并跳转执行Linux。
[0029]请参阅图2,显示为本发明的u-boot启动过程中Linux基址动态更新方法在一具体实施例中的流程示意图。
[°03°] 所述u-boot启动过程中Linux基址动态更新方法,包括:
[°031 ] SI 1:预先设定u-boot程序和Linux程序的约束关系;优选的,所述预先设定u和Linux程序的约束关系的步骤包括:将Linux程序和u-boot程序保存在同一 flash中;其中,u-boot程序从flash基址处开始保存,Linux程序在相对flash基址的固定偏移0x100000处开始保存。
[0032]S12:在u-boot程序启动过程中动态解析flash基址;优选的,在u-boot程序启动过程中动态解析flash基址的步骤包括:在所述u-boot程序启动过程中,将所述u_boot程序从flash搬移到内存的内存基址处。
[0033]S13:根据所述flash基址和所述约束关系,计算Linux基址;优选的,将所述u-boot程序从flash搬移到内存的内存基址处的步骤包括:将搬移到的内存基址保存到全局数据gd的重定位地址成员;将内存基址和flash基址的差值保存到全局数据gd的重定位偏移成员;根据flash基址计算公式解析所述fla
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1