嵌入式设备参数配置方法、电子设备和存储介质与流程

文档序号:33461323发布日期:2023-03-15 03:56阅读:26来源:国知局
嵌入式设备参数配置方法、电子设备和存储介质与流程

1.本技术涉及嵌入式设备技术领域,特别涉及嵌入式设备参数配置方法、电子设备和存储介质。


背景技术:

2.在嵌入式设备研发过程中,厂家通常会研发一系列的产品,如面向高端、中端、低端以及面向特定场景的定制产品。属于同一系列的产品通常基于同一套核心固件代码,仅仅在启动引导程序、内核子系统和驱动程序、用户空间子模块和应用的部分处理逻辑不一样(如使用不同的外设,一些特定的定制逻辑)。现有方法通常需要静态编译出所有不同产品的固件进行单独维护,开发和维护工作量大。同时已有的参数配置方法,要么其参数无法在内核初始化的早期访问,如无法在内核空间的存储介质驱动(如emmc驱动)加载之前使用;要么不支持从启动程序到用户空间的统一的全流程配置参数访问;要么无法与现有的kernel dtb访问方式无缝融合;要么不支持在设备端进行实时参数配置。


技术实现要素:

3.本技术提供了嵌入式设备参数配置方法、电子设备和存储介质,其能够解决现有的嵌入式设备的参数配置方法中,无法实现配置参数在内核初始化的早起访问以及不支持从启动程序到用户空间的统一的全流程配置参数访问的问题。
4.在一个方面,提供了一种嵌入式设备参数配置方法。该方法包括:响应于嵌入式设备的启动,根据设备分区表中的配置参数分区的启动引导程序参数区内的配置参数,对前级启动引导程序各功能模块和外设驱动的参数进行配置;根据所述配置参数分区的内核参数区内的配置参数,由启动引导程序引导操作系统内核,并且传递内核二进制设备树的内存加载地址到操作系统内核;以及根据所述配置参数分区的用户空间参数区内的配置参数,对用户空间内的各个功能模块进行初始化,并且访问所述内核二进制设备树中的参数值。
5.在一些实施例中,该方法还包括:在所述嵌入式设备的所述设备分区表中增加所述配置参数分区,所述配置参数分区包括所述启动引导程序参数区、所述内核参数区和所述用户空间参数区;以及将配置参数烧录到所述配置参数分区中。
6.在一些实施例中,将配置参数烧录到所述配置参数分区中包括:将各个固件之间的差异部分以所述配置参数的形式放置在所述配置参数分区中,使得启动引导程序、内核子系统和驱动程序、以及用户空间子模块和应用程序通过读取所述配置参数来完成差异化逻辑的处理。
7.在一些实施例中,将各个固件之间的差异部分以所述配置参数的形式放置在所述配置参数分区中包括:将所述差异部分作为普通参数与其他可能的各种参数一起以所述配置参数的形式进行配置。
8.在一些实施例中,将配置参数烧录到所述配置参数分区中包括:将配置参数转化
为二进制文件后烧录至所述配置参数分区中,所述二进制文件包括固定大小的文件头、所述启动引导程序参数区、所述内核参数区和所述用户空间参数区,所述文件头包括配置文件魔幻数、校验和、启动引导程序参数区偏移地址、启动引导程序参数区长度、内核参数区偏移地址、内核参数区长度、用户空间参数区偏移地址和用户空间参数区长度。
9.在一些实施例中,根据所述配置参数分区的内核参数区内的配置参数,由启动引导程序引导操作系统内核,并且传递内核二进制设备树的内存加载地址到操作系统内核包括:通过所述启动引导程序将所述内核参数区内的配置参数动态插入传递给操作系统内核使用的二进制设备树空间,使得所述操作系统内核按标准方式直接进行访问来实现初始化。
10.在一些实施例中,该方法还包括:通过用户空间的配置参数修改模块来对所述配置参数分区中的配置参数进行实时修改。
11.在一些实施例中,通过用户空间的配置参数修改模块来对所述配置参数分区中的配置参数进行实时修改包括:通过只读方式访问所述配置参数分区的块设备节点,读取文件头到临时数临时缓冲区;检查临时数临时缓冲区中的文件头的配置文件魔幻数是否与预期一致;若一致,则检查启动引导程序参数区长度是否大于0,如果是,则根据临时数临时缓冲区中文件头的启动引导程序参数区偏移地址和启动引导程序参数区长度从配置参数分区的块设备节点文件中读取对应的数据存储到启动引导程序参数临时缓冲区,否则设置启动引导程序参数临时缓冲区为空;检查内核参数区长度是否大于0,如果是,则根据临时数临时缓冲区中文件头的内核参数区偏移地址和内核参数区长度,从配置参数分区块设备节点文件中读出对应的数据存储到内核参数临时缓冲区,否则设置内核参数临时缓冲区为空;检查用户空间参数区长度是否大于0,如果是,则根据临时数临时缓冲区中文件头的用户空间参数区偏移地址和用户空间参数区长度,从配置参数分区块设备节点文件中读出对应的数据存储到用户空间参数临时缓冲区,否则设备用户空间参数临时缓冲区为空;若不一致,则设置启动引导程序参数临时缓冲区、内核参数临时缓冲区及设备用户空间参数临时缓冲区为空;将启动引导程序参数临时缓冲区、内核参数临时缓冲区及设备用户空间参数临时缓冲区中的二进制数据转换为对应的临时文本文件格式;接收对临时文本文件进行修改;将修改后的临时文本文件转换成新配置参数的二进制数据。
12.在一些实施例中,嵌入式设备启动时,在启动程序中读取出配置参数分区中的文件头;查看文件头中的配置文件魔幻数是否和预期的一致;若一致,则在启动引导程序的对应模块和外设驱动中,查看文件头的启动引导程序参数区长度是否为0;若为0,则使用预设的默认参数值完成对应功能模块和外设驱动的初始化;若不为0,则根据文件头的启动引导程序参数区偏移地址的值,定位到配置参数分区偏移地址处,读出启动引导程序参数区长度大小的数据,按照对应的配置参数完成对应的功能模块和驱动的初始化;从物理存储介质的预设位置加载内核二进制设备树dtb到预设的内存加载地址;然后查看文件头中的内核参数区长度是否大于0,如果大于0,则遍历内核参数区中的所有配置参数,根据内核参数区中的所有配置参数对代表内核二进制设备树dtb的预设内存地址空间进行修改;若不一致,则使用预设的默认参数值完成对应功能模块和外设驱动的初始化,然后从物理存储介质的预设位置加载内核二进制设备树dtb到预设的内存加载地址。
13.在一些实施例中,根据内核参数区中的所有配置参数对代表内核二进制设备树
dtb的预设内存地址空间进行修改包括:若内核参数区中的配置参数的路径为非空,则查找对应的配置参数在内核二进制设备树dtb中是否存在相应的节点,若存在,则使用内核参数区中值字段的配置参数修改内核二进制设备树dtb中的对应节点的值,若不存在,则根据内核参数区中路径字段的配置参数创建对应的节点,并使用值字段的配置参数设置该节点的取值;若内核参数区中的配置参数的路径为空,检查内核二进制设备树dtb的根路径下是否存在预定义的配置参数子树,若不存在,则创建一棵配置参数子树,同时将内核参数区中的配置参数直接写入该配置参数子树,若存在,则直接将内核参数区中的配置参数直接写入该配置参数子树。
14.在一些实施例中,根据所述配置参数分区的用户空间参数区内的配置参数,对用户空间内的各个功能模块进行初始化,并且访问所述内核二进制设备树中的参数值包括:进入用户空间系统后,通过只读方式访问配置参数分区的块设备节点读取文件头;检测文件头的用户空间参数区长度是否大于0;若大于0,则定位配置参数分区块设备节点的用户空间参数分区偏移地址处,读出用户空间参数区长度的数据到用户空间参数临时缓冲区,否则设置用户空间参数临时缓冲区为空;确认配置文件魔幻数是否和预期是否一致,若不一致,则设置用户空间参数临时缓冲区为空;若用户空间内的系统子模块或应用程序使用位于用户空间参数区内的配置参数时,检测用户空间参数临时缓冲区是否为空,若为空,则使用预设的默认参数值完成对应系统子模块或应用程序初始化,若不为空,则从用户空间参数临时缓冲区内读取出预期的配置参数完成对应系统子模块或应用程序初始化;若用户空间内的系统子模块或应用程序使用位于内核参数区的配置参数,则通过访问sysfs节点来访问对应的内核二进制设备树dtb中的参数值。
15.在另一个方面,提供了一种电子设备。该电子设备包括:存储器,被配置为存储计算机程序;以及处理器,被配置为执行所述计算机程序以实现如上述所述的嵌入式设备参数配置方法。
16.在另一个方面,还提供了一种计算机可读存储介质,其上存储有计算机程序。所述计算机程序被执行以实现根据上述所述的嵌入式设备参数配置方法。
17.根据上述技术方案,响应于嵌入式设备的启动,根据嵌入式设备的设备分区表中的配置参数分区的启动引导程序参数内的配置参数,实现对前级启动程序各功能模块和外设驱动的参数进行配置,根据配置参数分区的内核参数区内的配置参数,实现由启动引导程序引导操作参数内核,并传递内核二进制设备树的内存加载地址到操作系统内核;根据配置参数分区的用户空间参数区内的配置参数,实现对用户空间的各个功能模块进行初始化,并且访问内核二进制设备树中的参数。实现了配置参数在内核初始化的早期访问,支持从启动程序到用户空间的统一的全流程配置参数访问。
18.上述发明内容相关记载仅是本技术技术方案的概述,为了让本领域普通技术人员能够更清楚地了解本技术的技术方案,进而可以依据说明书的文字及附图记载的内容予以实施,并且为了让本技术的上述目的及其它目的、特征和优点能够更易于理解,以下结合本技术的具体实施方式及附图进行说明。
附图说明
19.附图仅用于示出本技术具体实施方式以及其他相关内容的原理、实现方式、应用、
特点以及效果等,并不能认为是对本技术的限制。
20.在说明书附图中:
21.图1为具体实施方式所述嵌入式设备参数配置方法的一种流程示意图;
22.图2为具体实施方式所述嵌入式设备参数配置方法的另一种流程示意图;
23.图3为具体实施方式所述配置参数修改步骤的一种流程示意图;
24.图4为具体实施方式所述步骤s110的一种流程示意图
25.图5为具体实施方式所述电子设备的一种结构示意图;
26.图6为具体实施方式所述计算机可读取存储介质的一种结构示意图
具体实施方式
27.为详细说明本技术可能的应用场景,技术原理,可实施的具体方案,能实现目的与效果等,以下结合所列举的具体实施例并配合附图详予说明。本文所记载的实施例仅用于更加清楚地说明本技术的技术方案,因此只作为示例,而不能以此来限制本技术的保护范围。
28.在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中各个位置出现的“实施例”一词并不一定指代相同的实施例,亦不特别限定其与其它实施例之间的独立性或关联性。原则上,在本技术中,只要不存在技术矛盾或冲突,各实施例中所提到的各项技术特征均可以以任意方式进行组合,以形成相应的可实施的技术方案。
29.除非另有定义,本文所使用的技术术语的含义与本技术所属技术领域的技术人员通常理解的含义相同;本文中对相关术语的使用只是为了描述具体的实施例,而不是旨在限制本技术。
30.在本技术的描述中,用语“和/或”是一种用于描述对象之间逻辑关系的表述,表示可以存在三种关系,例如a和/或b,表示:存在a,存在b,以及同时存在a和b这三种情况。另外,本文中字符“/”一般表示前后关联对象是一种“或”的逻辑关系。
31.在本技术中,诸如“第一”和“第二”之类的用语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何实际的数量、主次或顺序等关系。
32.在没有更多限制的情况下,在本技术中,语句中所使用的“包括”、“包含”、“具有”或者其他类似的表述,意在涵盖非排他性的包含,这些表述并不排除在包括所述要素的过程、方法或者产品中还可以存在另外的要素,从而使得包括一系列要素的过程、方法或者产品中不仅可以包括那些限定的要素,而且还可以包括没有明确列出的其他要素,或者还包括为这种过程、方法或者产品所固有的要素。
33.与《审查指南》中的理解相同,在本技术中,“大于”、“小于”、“超过”等表述理解为不包括本数;“以上”、“以下”、“以内”等表述理解为包括本数。此外,在本技术实施例的描述中“多个”的含义是两个以上(包括两个),与之类似的与“多”相关的表述亦做此类理解,例如“多组”、“多次”等,除非另有明确具体的限定。
34.图1是示出根据本发明实施例的嵌入式设备参数配置方法的流程图。如图1所示,该嵌入式设备参数配置方法包括以下步骤s110至步骤s130。
35.在步骤s110,响应于嵌入式设备的启动,根据设备分区表中的配置参数分区的启动引导程序参数区内的配置参数,对前级启动引导程序各功能模块和外设驱动的参数进行配置。
36.在步骤s120,根据所述配置参数分区的内核参数区内的配置参数,由启动引导程序引导操作系统内核,并且传递内核二进制设备树的内存加载地址到操作系统内核。
37.在步骤s130,根据所述配置参数分区的用户空间参数区内的配置参数,对用户空间内的各个功能模块进行初始化,并且访问所述内核二进制设备树中的参数值。
38.响应于嵌入式设备的启动,根据嵌入式设备的设备分区表中的配置参数分区的启动引导程序参数内的配置参数,实现对前级启动程序各功能模块和外设驱动的参数进行配置,根据配置参数分区的内核参数区内的配置参数,实现由启动引导程序引导操作参数内核,并传递内核二进制设备树的内存加载地址到操作系统内核;根据配置参数分区的用户空间参数区内的配置参数,实现对用户空间的各个功能模块进行初始化,并且访问内核二进制设备树中的参数。实现了配置参数在内核初始化的早期访问,支持从启动程序到用户空间的统一的全流程配置参数访问。
39.图2是示出根据本发明实施例的嵌入式设备参数配置方法的流程图。如图2所示,在某些实施例中,嵌入式设备参数配置方法还包括以下步骤s210和步骤s220。
40.在步骤s210,在所述嵌入式设备的所述设备分区表中增加所述配置参数分区,所述配置参数分区包括所述启动引导程序参数区、所述内核参数区和所述用户空间参数区。
41.在步骤s220,将配置参数烧录到所述配置参数分区中。
42.在嵌入式设备的设备分区表中增加一个配置参数分区,所有的配置参数最终转换为一个二进制文件在设备出厂前烧录到该配置参数分区。其中,配置参数分区包括启动引导程序参数区、内核参数区及用户空间参数区,将所有的配置参数在设备出厂前烧录到该配置参数分区中;其中启动引导程序参数区中的参数用于实现对前级启动引导程序各功能模块和外设驱动的参数配置。内核参数区中的参数在启动引导程序中根据每个参数的路径是否非空,来决定是将对应的参数插入内核二进制设备树dtb中的对应路径节点,还是插入内核二进制设备树dtb中的一个专门的配置参数子树,然后启动引导程序引导操作系统内核,并传递内核二进制设备树dtb的内存加载地址到操作系统内核,从而在操作系统内核的各子系统和驱动程序中可以按照统一流程使用标准fdt接口访问内核二进制设备树dtb中的对应节点来获取参数值进行正常的初始化。用户空间中的各功能模块可以同时使用用户空间参数区中的参数和sysfs节点来访问对应的内核二进制设备树dtb中的参数值。
43.在某些实施例中,将配置参数烧录到所述配置参数分区中包括:将各个固件之间的差异部分以所述配置参数的形式放置在所述配置参数分区中,使得启动引导程序、内核子系统和驱动程序、以及用户空间子模块和应用程序通过读取所述配置参数来完成差异化逻辑的处理。
44.通过将各个固件差异部分以配置参数的形式放置在配置参数分区中,启动引导程序、内核子系统和驱动程序、以及用户空间子模块和应用程序通过读取配置参数来完成差异化逻辑的处理,从而可以使得属于同一系列的产品使用同一套固件,只需要配置不同的参数即可,从而提高产品研发效率和减少产品维护成本。同时对于内核子系统和驱动程序可以使用统一的fdt机制来访问对应的配置参数,与现有的kernel dtb访问方式无缝融合。
45.在一些实施例中,将各个固件之间的差异部分以所述配置参数的形式放置在所述配置参数分区中包括:将所述差异部分作为普通参数与其他可能的各种参数一起以所述配置参数的形式进行配置。
46.本方案实现将不同设备之间的差异部分作为普通的参数配置,和所有可能的各种参数一起配置。同时针对设备系统各个组成部分提供差异化配置支持,包括启动引导程序(如uboot,loader)、内核和用户空间程序。此外启动引导程序有多级,如一级loader,二级uboot,并不是所有级别都支持dtb(如需要dtb相关配套软件库libfdt,在一级loader中通常不支持),本方案通过在前级引导时使用普通参数则能支持全部级别的启动引导程序。本方案通过普通参数可以对uboot中的任意子系统的任意部分进行不同的客制化。本方案可以实时配置参数,重启生效,对开发调试尤其有用,这样就意味着对不同设备可能只需要烧录一个固件和参数,然后通过配置,重启来生效,而不需要针对不同设备都要烧一次对应的配置,如现有技术的单独分区(uboot-dydrv)或在boot-res分区。
47.在某些实施例中,将配置参数烧录到所述配置参数分区中包括:将配置参数转化为二进制文件后烧录至所述配置参数分区中,所述二进制文件包括固定大小的文件头、所述启动引导程序参数区、所述内核参数区和所述用户空间参数区,所述文件头包括配置文件魔幻数、校验和、启动引导程序参数区偏移地址、启动引导程序参数区长度、内核参数区偏移地址、内核参数区长度、用户空间参数区偏移地址和用户空间参数区长度。
48.该配置参数转换后的二进制文件由4个部分组成,分别是固定大小的文件头、启动引导程序参数区、内核参数区和用户空间参数区。其中,固定大小的文件头包括预定义的配置文件魔幻数、校验和、启动引导程序参数区偏移地址、启动引导程序参数区长度、内核参数区偏移地址、内核参数区长度、用户空间参数区偏移地址和用户空间参数区长度。其中配置文件魔幻数、校验和、启动引导程序参数区偏移地址是文件头中最开始的三个字段,并且校验和是对从启动引导程序参数区偏移地址开始到文件结尾的所有数据计算的校验和。内核参数区中的每个配置参数包括两个字段,分别是路径字段和值字段,其中,路径字段指明对应配置参数在内核设备树中的路径(如display-subsystem/route/route-dsi0/video,vdisplay)。该路径字段可以为空,值字段指明对应的配置参数值。
49.在某些实施例中,根据所述配置参数分区的内核参数区内的配置参数,由启动引导程序引导操作系统内核,并且传递内核二进制设备树的内存加载地址到操作系统内核包括:通过所述启动引导程序将所述内核参数区内的配置参数动态插入传递给操作系统内核使用的二进制设备树空间,使得所述操作系统内核按标准方式直接进行访问来实现初始化。
50.本方案在传递给kernel的设备差异参数时,通过在启动引导程序(如uboot)中将内核参数里的内容动态插入传递给内核使用的dtb空间,从而内核可以按标准方式直接访问来实现差异设备的初始化,需要对uboot的驱动模型进行重构,对uboot的驱动开发模型没有限制。
51.在某些实施例中,还包括配置参数修改步骤,配置参数修改步骤包括:通过用户空间的配置参数修改模块来对所述配置参数分区中的配置参数进行实时修改。
52.用户空间的配置参数修改模块支持在设备端对配置参数分区中的参数进行实时修改,该模块可以用于对所有配置参数进行修改、删除、并增加新的参数。修改后的参数将
在设备重启后生效,因此便于实时优化调整固件的定制化参数配置,方便固件调试并提高用户体验。参数修改模块在进行参数修改时,首先将二进制数据转化为文本文件,然后在文本文件上进行参数修改(增、删、改),完成参数的修改后,保存时再将文本文件转化为实际存储的二进制文件。通过这种方式使得在对参数进行修改时,可以基于文本格式进行方便灵活地进行修改。由于转化为文本文件后,可以使用任何基于文本的工具对参数进行修改,实际存储时以二进制数据存储,因此同时兼顾了参数修改时的用户用好性和实际存储的高效性。
53.请参阅图3,具体的,通过用户空间的配置参数修改模块来对所述配置参数分区中的配置参数进行实时修改包括以下步骤。
54.在步骤s310,通过只读方式访问配置参数分区的块设备节点,读取文件头到文件头临时缓冲区。
55.在步骤s320,检查文件头临时缓冲区中的文件头的配置文件魔幻数是否与预期一致。
56.若一致,则执行步骤s330:检查启动引导程序参数区长度是否大于0。如果是,则执行步骤s341:根据文件头临时缓冲区中文件头的启动引导程序参数区偏移地址和启动引导程序参数区长度从配置参数分区的块设备节点文件中读取对应的数据存储到启动引导程序参数临时缓冲区。否则执行步骤s342:设置启动引导程序参数临时缓冲区为空。
57.执行步骤s350:检查内核参数区长度是否大于0。如果是,则执行步骤s361:根据文件头临时缓冲区中文件头的内核参数区偏移地址和内核参数区长度,从配置参数分区块设备节点文件中读出对应的数据存储到内核参数临时缓冲区。否则执行步骤s362:设置内核参数临时缓冲区为空。
58.在步骤s370,检查用户空间参数区长度是否大于0。如果是,则执行步骤s381:根据文件头临时缓冲区中文件头的用户空间参数区偏移地址和用户空间参数区长度,从配置参数分区块设备节点文件中读出对应的数据存储到用户空间参数临时缓冲区。否则执行步骤s382:设备用户空间参数临时缓冲区为空。
59.若不一致,则执行步骤s390:设置启动引导程序参数临时缓冲区、内核参数临时缓冲区及设备用户空间参数临时缓冲区为空。
60.在步骤s3100,将启动引导程序参数临时缓冲区、内核参数临时缓冲区及设备用户空间参数临时缓冲区中的二进制数据转换为对应的临时文本文件格式。
61.在步骤s3110,接收对临时文本文件进行修改。
62.在步骤s3120,将修改后的临时文本文件转换成新配置参数的二进制数据。
63.用户空间的配置参数修改模块可以用于对所有配置参数进行修改、删除、并增加新的参数。修改后的参数将在设备重启后生效。当触发配置参数修改模块时,对应的执行流程如下:
64.(1)首先以只读方式访问配置参数分区的块设备节点(如/dev/block/by-name/vendor_param),读取固定大小的文件头到文件头临时缓冲区,检查文件头临时缓冲区中文件头的配置文件魔幻数是否和预期的一致,如果不一致,设置启动引导程序参数临时缓冲区、内核参数临时缓冲区和用户空间参数临时缓冲区全部为空,并关闭打开的块设备节点文件,然后跳转到如下步骤(2)执行。如果配置文件魔幻数和预期的一致,则执行如下步骤a
到d:
65.a、检查启动引导程序参数区长度是否大于0,如果是,则根据临时数临时缓冲区中文件头的启动引导程序参数区偏移地址和启动引导程序参数区长度,从配置参数分区块设备节点文件中读出对应的数据存储到启动引导程序参数临时缓冲区。否则设置启动引导程序参数临时缓冲区为空。
66.b、检查内核参数区长度是否大于0,如果是,则根据临时数临时缓冲区中文件头的内核参数区偏移地址和内核参数区长度,从配置参数分区块设备节点文件中读出对应的数据存储到内核参数临时缓冲区。否则设置内核参数临时缓冲区为空。
67.c、检查用户空间参数区长度是否大于0,如果是,则根据临时数临时缓冲区中文件头的用户空间参数区偏移地址和用户空间参数区长度,从配置参数分区块设备节点文件中读出对应的数据存储到用户空间参数临时缓冲区。否则设置用户空间参数临时缓冲区为空。
68.d、关闭打开的块设备节点文件。
69.(2)分别将引导程序参数文件头临时缓冲区、内核参数临时缓冲区和用户空间参数临时缓冲区中的二进制数据按照预定义的结构格式转换为对应的临时文本文件格式(如ini或json格式等),并导出到可读写文件系统中,然后释放对应的文件头临时缓冲区。如果对应的文件头临时缓冲区为空,则创建对应的空临时文本文件即可。
70.(3)当需要对引导程序参数进行增、删、改操作时,对应修改引导程序参数临时文本文件。
71.当需要对内核参数进行增、删、改操作时,对应修改内核参数临时文本文件。
72.当需要对用户空间参数进行增、删、改操作时,对应修改用户空间参数临时文本文件。
73.(4)当完成配置参数的增、删、改操作之后:
74.a、以读写方式访问配置参数分区的块设备节点文件,读取固定大小的文件头到临时文件头临时缓冲区。同时获取配置参数分区的块设备节点文件的长度。
75.b、读取修改后的引导程序参数临时文本文件,分配引导程序参数文件头临时缓冲区,按照预定义的二进制结构格式将文本文件的内容重组到引导程序参数文件头临时缓冲区。
76.c、读取修改后的内核参数临时文本文件,分配内核参数临时缓冲区,按照预定义的二进制结构格式将文本文件的内容重组到内核参数临时缓冲区。
77.d、读取修改后的用户空间参数临时文本文件,分配用户空间参数临时缓冲区,按照预定义的二进制结构格式将文本文件的内容重组到用户空间参数临时缓冲区。
78.e、设置新配置参数二进制文件大小等于“固定大小的文件头+引导程序参数文件头临时缓冲区大小+内核参数临时缓冲区大小+用户空间参数临时缓冲区大小”。
79.判断新配置参数二进制文件大小是否大于块设备节点文件的长度,如果是,提示配置参数超出配置参数分区大小,释放所有文件头临时缓冲区,关闭打开的块设备节点文件,提示是否继续编辑修改,如果是则跳转到如上步骤(3),否则退出配置参数修改模块。否则新配置参数二进制文件大小不大于块设备节点文件的长度,则执行如下步骤e-1直到e-4:
80.e-1、在临时数临时缓冲区中,设置配置文件魔幻数为非法的随机数,并将临时数临时缓冲区中的数据写入配置参数分区块设备节点的起始位置。
81.e-2、在临时数临时缓冲区中,设置启动引导程序参数区偏移地址为固定大小的头部之后,设置启动引导程序参数区长度为引导程序参数文件头临时缓冲区的大小,设置内核参数区偏移地址为“启动引导程序参数区偏移地址+启动引导程序参数区长度“,设置内核参数区长度为内核参数临时缓冲区的大小,设置用户空间参数区偏移地址为"内核参数区偏移地址+内核参数区长度",用户空间参数区长度为用户空间参数临时缓冲区的大小。
82.然后定位配置参数分区块设备节点到启动引导程序参数区偏移地址处,将引导程序参数文件头临时缓冲区、内核参数临时缓冲区、用户空间参数临时缓冲区中的数据按顺序写入到配置参数分区。
83.e-3、按顺序拼接如下四个部分的数据并计算其校验和:临时数临时缓冲区启动引导程序参数区偏移地址开始的全部临时数临时缓冲区的数据+引导程序参数文件头临时缓冲区中的全部数据+内核参数临时缓冲区中的全部数据+用户空间参数临时缓冲区中的全部数据。
84.e-4、在临时数临时缓冲区中,设置配置文件魔幻数为预定的合法魔幻数值,同时设置校验和字段为上述计算出的校验和。最后将临时数临时缓冲区中的数据写入配置参数分区块设备节点的起始位置,释放所有文件头临时缓冲区,关闭打开的块设备节点文件,退出配置参数修改模块。
85.请参阅图4,在某些实施例中,步骤s110包括以下步骤。
86.在步骤s410,嵌入式设备启动时,在启动程序中读取出配置参数分区中的文件头。
87.在步骤s420,查看文件头中的配置文件魔幻数是否和预期的一致。
88.若一致,则执行步骤s430:在启动引导程序的对应模块和外设驱动中,查看文件头的启动引导程序参数区长度是否为0。
89.若为0,则执行步骤s440:使用预设的默认参数值完成对应功能模块和外设驱动的初始化。
90.若不为0,则执行步骤s450:根据文件头的启动引导程序参数区偏移地址的值,定位到配置参数分区偏移地址处,读出启动引导程序参数区长度大小的数据,按照对应的配置参数完成对应的功能模块和驱动的初始化。
91.在步骤s460,从物理存储介质的预设位置加载内核二进制设备树dtb到预设的内存加载地址。
92.然后执行步骤s470:查看文件头中的内核参数区长度是否大于0。如果大于0,则执行步骤s480:遍历内核参数区中的所有配置参数,根据内核参数区中的所有配置参数对代表内核二进制设备树dtb的预设内存地址空间进行修改。
93.若不一致,则执行步骤s490:使用预设的默认参数值完成对应功能模块和外设驱动的初始化,然后从物理存储介质的预设位置加载内核二进制设备树dtb到预设的内存加载地址。
94.设备启动,在启动引导程序中读出配置参数分区中固定大小的文件头:
95.(1)查看文件头的配置文件魔幻数是否和预期的一致,如果一致,继续执行如下步骤(2),
96.(2)在启动引导程序的对应模块和外设驱动中,查看文件头中的启动引导程序参数区长度是否为0,如果为0,则使用预设的默认参数值完成对应模块和驱动的初始化;否则,根据文件头的启动引导程序参数区偏移地址的值,定位到配置参数分区的启动引导程序参数区偏移地址处,读出启动引导程序参数区长度大小的数据,然后按照对应的配置参数来完成对应模块和驱动的初始化。
97.(3)从物理存储介质(如emmc)的预设位置加载内核二进制设备树dtb到预设的内存加载地址,然后查看配置参数分区中固定大小的文件头中的内核参数区长度是否大于0,如果大于0,则遍历内核参数区中的所有配置参数,根据配置参数对代表内核二进制设备树dtb的预设内存地址空间进行修改。
98.其中,根据内核参数区中的所有配置参数对代表内核二进制设备树dtb的预设内存地址空间进行修改包括:
99.若内核参数区中的配置参数的路径为非空,则查找对应的配置参数在内核二进制设备树dtb中是否存在相应的节点,若存在,则使用内核参数区中值字段的配置参数修改内核二进制设备树dtb中的对应节点的值,若不存在,则根据内核参数区中路径字段的配置参数创建对应的节点,并使用值字段的配置参数设置该节点的取值;
100.若内核参数区中的配置参数的路径为空,检查内核二进制设备树dtb的根路径下是否存在预定义的配置参数子树,若不存在,则创建一棵配置参数子树,同时将内核参数区中的配置参数直接写入该配置参数子树,若存在,则直接将内核参数区中的配置参数直接写入该配置参数子树。
101.具体来说,对于内核参数区中的每个参数:
102.a\如果配置参数的路径非空,则查找对应的配置参数在内核二进制设备树dtb中是否存在相应的节点,如果存在则使用值字段的配置参数值修改内核二进制设备树dtb中的对应节点的值(如fdt_setprop);如果对应的配置参数在内核二进制设备树dtb中不存在相应的节点,则根据路径值创建对应的节点(如fdt_add_subnode),并使用值字段的配置参数值设置该节点的取值(如fdt_setprop)。
103.b\如果配置参数的路径为空,检查内核二进制设备树dtb的根路径下是否存在预定义的配置参数子树。如果不存在,则新建一颗配置参数子树,同时将配置参数直接写入该配置参数子树中;如果配置参数子树已经存在,则直接将配置参数直接写入该配置参数子树中。
104.如果文件头的配置文件魔幻数是否和预期的不一致,则使用预设的默认参数值完成启动引导程序中对应模块和驱动的初始化,然后从物理存储介质(如emmc)的预设位置加载内核二进制设备树dtb到预设的内存加载地址,最后跳到步骤:启动引导程序引导操作系统内核,并传递内核二进制设备树dtb的内存加载地址到操作系统内核。
105.在某些实施例中,根据所述配置参数分区的用户空间参数区内的配置参数,对用户空间内的各个功能模块进行初始化,并且访问所述内核二进制设备树中的参数值包括以下步骤。
106.进入用户空间系统后,通过只读方式访问配置参数分区的块设备节点读取文件头。
107.检测文件头的用户空间参数区长度是否大于0。
108.若大于0,则定位配置参数分区块设备节点的用户空间参数分区偏移地址处,读出用户空间参数区长度的数据到用户空间参数临时缓冲区,否则设置用户空间参数临时缓冲区为空。
109.确认配置文件魔幻数是否和预期是否一致,若不一致,则设置用户空间参数临时缓冲区为空。
110.若用户空间内的系统子模块或应用程序使用位于用户空间参数区内的配置参数时,检测用户空间参数临时缓冲区是否为空,若为空,则使用预设的默认参数值完成对应系统子模块或应用程序初始化,若不为空,则从用户空间参数临时缓冲区内读取出预期的配置参数完成对应系统子模块或应用程序初始化。
111.若用户空间内的系统子模块或应用程序使用位于内核参数区的配置参数,则通过访问sysfs节点来访问对应的内核二进制设备树dtb中的参数值。
112.进入用户空间系统之后,对于需要使用配置参数来完成初始化的系统子模块和应用程序中,首先以只读方式访问配置参数分区的块设备节点(如/dev/block/by-name/vendor_param)获取固定大小的文件头。如果文件头中的用户空间参数区长度大于0,则定位到配置参数分区块设备节点的用户空间参数区偏移地址处,读出用户空间参数区长度的数据到用户空间参数缓冲区;否则设置用户空间参数缓冲区为空。随后关闭打开的块设备节点。最后确认配置文件魔幻数是否和预期的一致,如果不一致,设置用户空间参数缓冲区为空。
113.(1)如果需要使用的参数位于用户空间参数区,检查用户空间参数缓冲区是否为空,如果为空,则使用预设的默认参数值;否则从上述用户空间参数缓冲区中读出预期的配置参数来完成对应子模块和应用程序的初始化。
114.(2)如果需要使用到内核参数区中的参数,则通过访问sysfs节点来访问对应的内核二进制设备树dtb中的参数值(如/sys/firmware/devicetree/base/param_tree/uid)。
115.在某些实施例中,所述步骤“内核空间子系统和驱动程序初始化”具体包括以下步骤:
116.启动引导程序引导设备进入操作系统内核后,在内核空间中的各个子系统或设备驱动程序中,按照统一流程使用标准fdt接口访问内核二进制设备树dtb中的对应节点来获取参数值进行正常的初始化,如果获取不到对应的设备树节点,则使用预设的默认参数值来完成初始化。
117.请参阅图5,另一实施例中,一种电子设备500包括被配置为存储计算机程序的存储器510、以及被配置为执行所述计算机程序以实现如上述实施例中的嵌入式设备参数配置方法的处理器520。
118.响应于嵌入式设备的启动,根据嵌入式设备的设备分区表中的配置参数分区的启动引导程序参数内的配置参数,实现对前级启动程序各功能模块和外设驱动的参数进行配置,根据配置参数分区的内核参数区内的配置参数,实现由启动引导程序引导操作参数内核,并传递内核二进制设备树的内存加载地址到操作系统内核;根据配置参数分区的用户空间参数区内的配置参数,实现对用户空间的各个功能模块进行初始化,并且访问内核二进制设备树中的参数。实现了配置参数在内核初始化的早期访问,支持从启动程序到用户空间的统一的全流程配置参数访问。
119.通过在嵌入式设备的设备分区表中增加一个配置参数分区,其中,配置参数分区包括启动引导程序参数区、内核参数区及用户空间参数区,将所有的配置参数在设备出厂前烧录到该配置参数分区中;其中启动引导程序参数区中的参数用于实现对前级启动引导程序各功能模块和外设驱动的参数配置。内核参数区中的参数在启动引导程序中根据每个参数的路径是否非空,来决定是将对应的参数插入内核二进制设备树dtb中的对应路径节点,还是插入内核二进制设备树dtb中的一个专门的配置参数子树,然后启动引导程序引导操作系统内核,并传递内核二进制设备树dtb的内存加载地址到操作系统内核,从而在操作系统内核的各子系统和驱动程序中可以按照统一流程使用标准fdt接口访问内核二进制设备树dtb中的对应节点来获取参数值进行正常的初始化。用户空间中的各功能模块可以同时使用用户空间参数区中的参数和sysfs节点来访问对应的内核二进制设备树dtb中的参数值。
120.本方案实现将不同设备之间的差异部分作为普通的参数配置,和所有可能的各种参数一起配置。同时针对设备系统各个组成部分提供差异化配置支持,包括启动引导程序(如uboot,loader)、内核和用户空间程序。此外启动引导程序有多级,如一级loader,二级uboot,并不是所有级别都支持dtb(如需要dtb相关配套软件库libfdt,在一级loader中通常不支持),本方案通过在前级引导时使用普通参数则能支持全部级别的启动引导程序。本方案通过普通参数可以对uboot中的任意子系统的任意部分进行不同的客制化。本方案可以实时配置参数,重启生效,对开发调试尤其有用,这样就意味着对不同设备可能只需要烧录一个固件和参数,然后通过配置,重启来生效,而不需要针对不同设备都要烧一次对应的配置,如现有技术的单独分区(uboot-dydrv)或在boot-res分区。
121.请参阅图6,另一实施例中,一种计算机可读存储介质600,其上存储有计算机程序,所述计算机程序被执行以实现根据上述实施例中的嵌入式设备参数配置方法。
122.响应于嵌入式设备的启动,根据嵌入式设备的设备分区表中的配置参数分区的启动引导程序参数内的配置参数,实现对前级启动程序各功能模块和外设驱动的参数进行配置,根据配置参数分区的内核参数区内的配置参数,实现由启动引导程序引导操作参数内核,并传递内核二进制设备树的内存加载地址到操作系统内核;根据配置参数分区的用户空间参数区内的配置参数,实现对用户空间的各个功能模块进行初始化,并且访问内核二进制设备树中的参数。实现了配置参数在内核初始化的早期访问,支持从启动程序到用户空间的统一的全流程配置参数访问。
123.通过在嵌入式设备的设备分区表中增加一个配置参数分区,其中,配置参数分区包括启动引导程序参数区、内核参数区及用户空间参数区,将所有的配置参数在设备出厂前烧录到该配置参数分区中;其中启动引导程序参数区中的参数用于实现对前级启动引导程序各功能模块和外设驱动的参数配置。内核参数区中的参数在启动引导程序中根据每个参数的路径是否非空,来决定是将对应的参数插入内核二进制设备树dtb中的对应路径节点,还是插入内核二进制设备树dtb中的一个专门的配置参数子树,然后启动引导程序引导操作系统内核,并传递内核二进制设备树dtb的内存加载地址到操作系统内核,从而在操作系统内核的各子系统和驱动程序中可以按照统一流程使用标准fdt接口访问内核二进制设备树dtb中的对应节点来获取参数值进行正常的初始化。用户空间中的各功能模块可以同时使用用户空间参数区中的参数和sysfs节点来访问对应的内核二进制设备树dtb中的参
数值。
124.本方案实现将不同设备之间的差异部分作为普通的参数配置,和所有可能的各种参数一起配置。同时针对设备系统各个组成部分提供差异化配置支持,包括启动引导程序(如uboot,loader)、内核和用户空间程序。此外启动引导程序有多级,如一级loader,二级uboot,并不是所有级别都支持dtb(如需要dtb相关配套软件库libfdt,在一级loader中通常不支持),本方案通过在前级引导时使用普通参数则能支持全部级别的启动引导程序。本方案通过普通参数可以对uboot中的任意子系统的任意部分进行不同的客制化。本方案可以实时配置参数,重启生效,对开发调试尤其有用,这样就意味着对不同设备可能只需要烧录一个固件和参数,然后通过配置,重启来生效,而不需要针对不同设备都要烧一次对应的配置,如现有技术的单独分区(uboot-dydrv)或在boot-res分区。
125.最后需要说明的是,尽管在本技术的说明书文字及附图中已经对上述各实施例进行了描述,但并不能因此限制本技术的专利保护范围。凡是基于本技术的实质理念,利用本技术说明书文字及附图记载的内容所作的等效结构或等效流程替换或修改产生的技术方案,以及直接或间接地将以上实施例的技术方案实施于其他相关的技术领域等,均包括在本技术的专利保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1