一种嵌入式设备软件防改装方法及系统与流程

文档序号:18466234发布日期:2019-08-17 02:29阅读:142来源:国知局
一种嵌入式设备软件防改装方法及系统与流程

本发明涉及嵌入式设备技术领域,尤其涉及一种嵌入式设备软件防改装方法及系统。



背景技术:

嵌入式设备一般都是附带软件整机销售给客户,整机中一般包括电源、连接器、嵌入式设备,传感器和其他一些功放设备。随着市场的推广,不同领域的客户对嵌入式设备的具体要求会略有不同,在性能高低、整机大小、外部接口、数据回传通道上都会有各自的独特要求,这就要求嵌入式设备在生产时考虑产品系列化,对同一类产品的结构形式和主要参数指标进行合理规划。

为了合理利用资源,减少人力投入,系列化产品一般都采用标准化部件接口,比如在系列化的整机中,可使用统一的电源、连接器,嵌入式设备单盘等,仅需要调整外部接口、整机尺寸大小或者单盘堆叠等来实现产品系列化。

但是客户可能会购买低价低端设备,拆解出核心器件,比如具有高软件附加值的嵌入式设备单盘,外购同款其他器件,比如连接器、电源等,自行组装高价高端设备进行二次销售,扰乱市场秩序,影响市场稳定。因此,现在亟需一种嵌入式设备软件防改装方法来解决上述问题。



技术实现要素:

为了解决上述问题,本发明实施例提供一种克服上述问题或者至少部分地解决上述问题的一种嵌入式设备软件防改装方法及系统。

第一方面本发明实施例提供一种嵌入式设备软件防改装方法,包括:

在设备首次启动时,从总线获取mcu外设地址;

基于所述mcu外设地址,确定嵌入式设备所属整机的产品类型;

将所述产品类型对应的标识信息写入uboot分区的预设隐藏区域。

第二方面本发明实施例提供了嵌入式设备软件防改装系统,包括:

地址获取模块,用于在设备首次启动时,从总线获取mcu外设地址;

产品类型确定模块,基于所述mcu外设地址,确定嵌入式设备所属整机的产品类型;

标识写入模块,用于将所述产品类型对应的标识信息写入uboot分区的预设隐藏区域。

第三方面本发明实施例提供了一种电子设备,包括:

处理器、存储器、通信接口和总线;其中,所述处理器、存储器、通信接口通过所述总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行上述嵌入式设备软件防改装方法。

第四方面本发明实施例提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述嵌入式设备软件防改装方法。

本发明实施例提供的一种嵌入式设备软件防改装方法及系统,能够在设备首次启动时自动识别产品整机的外设,并生成相对应的产品标识存储到uboot分区的隐藏区域,以实现对产品型号标识的有效保护,产品型号标识写入的整个授权过程不可介入,不能复制和窃取信息,增加了安全性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种嵌入式设备软件防改装方法流程示意图;

图2是本发明实施例提供的嵌入式设备总线示意图;

图3是本发明实施例提供的系列化产品的不同型号的外设示意图;

图4是本发明实施例提供的一种嵌入式设备软件防改装系统结构示意图;

图5是本发明实施例提供的电子设备的结构框图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

现有技术中,对于嵌入式设备的防改装方法主要有三种方式进行。

第一种是在整机硬件设计上实现防改装,整机生产过程中通过不可拆解设计保障不被改装,使用不可拆解的螺钉、锁紧机构进行整机生产,暴力拆除会破坏内部结构。但这种方式在同领域人员和专业工具的协助下,仍然可以无损破解;且当设备需要维修时,给原厂维修人员带来了很大的麻烦。

第二种是对系列化产品采用非标准设计,在高软件附加值的嵌入式设备硬件设计上,不同的产品采用不同的硬件单盘,但这种方式在研发、生产上会造成人力、成本浪费,硬件单盘随着产品系列化而系列化,会造成开发的浪费,并且在整机组装更容易出错。

第三种是系列化产品采用标准的嵌入式设备设计,在单盘的一块存储区,比如e2prom上存储产品序列号sn信息,在产品生产制造过程中,根据嵌入式设备安装到的不同整机,烧写不同的sn信息。通过sn信息标识不同的产品系列,嵌入式软件程序读取sn信息,根据不同的sn信息做差异化的业务启动。但这种方法需要在产品生产阶段烧写sn,如果烧写sn错误就会造成单盘不可用。另外嵌入式软件判断sn信息是在设备的基础系统启动完成之后进行,如果系列化产品在软件控制上需要在设备启动阶段区分不同的产品,此方法无法区分。

针对上述现有技术方法中存在的问题,图1是本发明实施例提供的一种嵌入式设备软件防改装方法流程示意图,如图1所示,包括:

101、在设备首次启动时,从总线获取mcu外设地址;

102、基于所述mcu外设地址,确定嵌入式设备所属整机的产品类型;

103、将所述产品类型对应的标识信息写入uboot分区的预设隐藏区域。

需要说明的是,本发明实施例提供的方法应用在系列化产品中对于嵌入式设备单盘存在的改装情况的防护。该方法以计算机程序的方式设置在嵌入式设备内部,自动执行。

具体的,在步骤101中,首次启动是指该嵌入式设备硬件生产完成后的第一次启动,图2是本发明实施例提供的嵌入式设备总线示意图,以图2所示的嵌入式设备为例,其业务板(i2c主设备)通过i2c总线连接有三个风扇(i2c从设备),那么本发明实施例提供的方法会在嵌入式设备首次启动时,从总线获取i2c从设备的地址,即图2中每个风扇的地址。

进一步的,在步骤102中,通过步骤101中获取的设备地址,能够判断当前的嵌入式整机属于哪一类别的产品,可以理解的是,本发明实施例针对的环境是系列化产品,对于系列化产品而言,其不同的系列具有的从设备数量和类型会有所差异,图3是本发明实施例提供的系列化产品的不同型号的外设示意图,如图3所示,产品1中从设备只包含一个风扇,产品2中从设备包含两个风扇,产品3中从设备包含有两个风扇,但使用了3个spi网口。那么通过步骤101中读取的从设备地址,即能够确定出该嵌入式设备所属的产品类型。具体到图3中即可以根据获取的风扇的个数和每个风扇对应的设备地址,确定出该嵌入式设备属于产品1或产品2或产品3。

最后,在步骤103中,本发明实施例会根据产品类型生成相应的标识信息,并将该标识信息写入嵌入式设备的可存储空间中。该可存储空间本发明实施例采用的是uboot分区的隐藏区域,因为在嵌入式设备的系统启动完成后,uboot分区的环境变量段是不可写入的,故而即使单盘改装者知道存储标识信息的区域,也不能修改该区域的环境变量,从而无法改变该产品的标识信息。

那么实质上本发明实施例提供了一种嵌入式设备软件防改装程序,能够自动识别嵌入式产品的外设,并将标识信息写到预设的隐藏存储区域。

例如:产品1具有1个风扇1个网口、产品2具有2个风扇2个网口,产品3具有2个风扇3个网口,那么相应的嵌入式设备回在uboot程序中定义产品标识变量:

structproduct_id

{

intfan_num;

intphy_num;

};

#definemin_product1

#definenor_product2

#definehigh_product3

structproduct_idg_product[]={{1,1},{2,2},{2,3}};

在uboot启动阶段,通过cpu的i2c总线和spi总线,分别获取到风扇个数和网口个数,依次遍历g_product数组成员,当风扇个数和网口个数与某一个数组成员匹配时,即确定已经识别到产品型号。

当产品型号识别完成后,将产品型号对应的标识信息写入预设的隐藏区域中,例如在地址ff7e0064下写10000标识信息为1,并且在bootargs环境变量中,增加“productid=3”的变量:

其中,bootargs的作用是传递给内核的启动参数,在linux内核commandline参数解析过程中,内核在start_kernel函数调用start_arch获取tag参数地址后,再调用parse_tags完成了tag参数解释,从而帮助linux内核commandline参数解析,最终在linux内核刚启动的过程中,能够识别到“productid=3”,linux内核解析到产品id号为3,会根据产品型号执行不同的业务分支。

本发明实施例提供的一种嵌入式设备软件防改装方法,能够在设备首次启动时自动识别产品整机的外设,并生成相对应的产品标识存储到uboot分区的隐藏区域,以实现对产品型号标识的有效保护,产品型号标识写入的整个授权过程不可介入,不能复制和窃取信息,增加了安全性。

在上述实施例的基础上,在所述将所述产品类型对应的标识信息写入uboot分区的预设隐藏区域后,所述方法还包括:

若设备再次启动时,从总线识别的产品标识和写入预设隐藏区域中的标识信息不同时,则强制反复重启设备。

由上述实施例的内容可知,本发明实施例在嵌入式设备首次启动时会将标识信息写入uboot分区的预设隐藏区域中,那么当再次启动该嵌入式设备时,本发明实施例会执行检测功能。

具体的,本发明实施例当再次给嵌入式设备上电时,通过总线重新获取设备地址,那么通过该设备地址能够判断当前嵌入式设备的整机属于哪个类型的产品。然后将预先存储在隐藏区域中的标识信息和本次读取的标识信息进行比对,可以理解的是,如果该设备被改装过,那么本次读取的标识信息和预先存储在隐藏区域中的标识信息会不同,即标识信息表明不是同一类型的产品。那么本发明实施例会使得其在uboot阶段反复重启,该嵌入式整机无法进入linux系统,改装者无法登陆到嵌入式系统做任何的破解动作,也加强了软件防改装的安全性。

在上述实施例的基础上,所述方法还包括:

在所述uboot分区的预设隐藏区域中擦除所述标识信息。

由上述实施例的基础的内容可知,本发明实施例能够在嵌入式设备的隐藏存储空间预先写入标识信息来防止改装者进行改装。那么对于生产厂家而言,对于嵌入式单盘的改装是合法且必须的,那么本发明实施例会针对生产厂家设置有擦除标识信息的功能。

具体的,本发明实施例首先会使用硬件jtag烧录一个启动过程可被打断的uboot版本在嵌入式设备中,然后对嵌入式设备上电启动,使用被打断的uboot版本打断uboot启动过程,进入到uboot命令行模式,在uboot命令行模式下,使用erase命令擦除uboot分区内的产品标识信息,最后通过硬件jtag再烧录回正常业务版本的uboot,完成标识信息的擦除。

在上述实施例的基础上,所述从总线获取mcu外设地址,包括:

通过i2c总线驱动查询i2c总线上的i2c从设备地址,并通过网口的控制总线spi查询总线上的所有网口phy地址。

由上述实施例的内容可知,本发明实施例需要从总线获取连接嵌入式设备的设备地址,具体的,本发明实施例在给设备上电后,在uboot启动阶段,启用i2c总线驱动和网络驱动,然后通过i2c驱动查询i2c总线上的i2c从设备的地址,并通过网口的控制总线spi查询总线上的所有网口phy地址,由于系列化产品的风扇数和对外网口数都是固定的,且风扇i2c地址固定,网口phy地址固定,那么uboot程序从真实的总线上获取到设备地址后,可以判断当前的整机是属于哪一个产品类型。

在上述实施例的基础上,所述述将所述产品类型对应的标识信息写入uboot分区的预设隐藏区域,包括:

将所述标识信息写入norflash的uboot分区预设区域。

优选的,本发明实施例所使用存储的隐藏区域为norflash的uboot分区预设区域。可以理解的是,norflash是嵌入式设备中所使用的非易失闪存技术,应用程序可以直接在flash闪存内运行,不必再把代码读到系统ram中。norflash的传输效率很高,在小容量存储时具有很大优势。

在上述实施例的基础上,在所述将所述产品类型对应的标识信息写入uboot分区的预设隐藏区域之后,所述方法还包括:

在启动设备linux内核时,根据uboot分区的标识信息,生成相应的proc文件;

在设备的业务软件启动时,读取所述proc文件对应的标识信息,启动所述标识信息对应的产品类型,在整个软件启动及运行阶段,识别产品标识,进行差异化设计。

由上述实施例的内容可知,本发明实施例在嵌入式设备首次启动时会在uboot分区的预设隐藏区域存储一个标识信息,从而防止改装者进行改装。

进一步的,为了使得嵌入式设备在linux内核启动和业务程序启动时,内核和业务程序有差异化的进行启动,本发明实施例优选的会在linux内核启动和业务程序启动时传递产品型号的参数。

具体的,本发明实施例会在将标识信息写入uboot分区的预设隐藏区域之后,设置本次启动的uboot环境变量bootargs,linux内核启动时解析uboot环境变量,生成内核的proc文件,并根据不同的产品形态加载不同的驱动。然后当业务软件启动时,读取proc文件判断所标识的产品系列,根据不同的产品形态启动不同的业务。

具体的,当linux的启动脚本开始运行后,通过linux内核的proc文件“cmdline”可以读取出productid值:

在启动脚本中根据不同的产品id走不同的分支流程,加载不同的驱动,启动不同的业务进程:

执行上述步骤后即能在linux内核的启动阶段,直到业务程序加载的整个过程,都可以知道当前的产品的标识信息,进而根据不同的产品类型做出不同的业务处理。

图4是本发明实施例提供的一种嵌入式设备软件防改装系统结构示意图,如图4所示,包括:地址获取模块401、产品类型确定模块402、标识写入模块403,其中:

地址获取模块401用于在设备首次启动时,从总线获取mcu外设地址;

产品类型确定模块402基于所述mcu外设地址,确定嵌入式设备所属整机的产品类型;

标识写入模块403用于将所述产品类型对应的标识信息写入uboot分区的预设隐藏区域。

具体的如何通过地址获取模块401、产品类型确定模块402、标识写入模块403进行嵌入式设备软件防改装可用于执行图1所示的嵌入式设备软件防改装方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

本发明实施例提供的一种嵌入式设备软件防改装系统,能够在设备首次启动时自动识别产品整机的外设,并生成相对应的产品标识存储到uboot分区的隐藏区域,以实现对产品型号标识的有效保护,产品型号标识写入的整个授权过程不可介入,不能复制和窃取信息,增加了安全性。

在上述实施例的基础上,所述系统还包括:

防护模块,用于若设备再次启动时,从总线识别的产品标识和写入预设隐藏区域中的标识信息不同时,则强制反复重启设备。

在上述实施例的基础上,所述系统还包括:

擦除模块,用于在所述uboot分区的预设隐藏区域中擦除所述标识信息。

在上述实施例的基础上,所述地址获取模块具体用于:

通过i2c总线驱动查询i2c总线上的i2c从设备地址,并通过网口的控制总线spi查询总线上的所有网口phy地址。

在上述实施例的基础上,所述标识写入模块具体用于:

将所述标识信息写入norflash的uboot分区预设区域。

在上述实施例的基础上,所述系统还包括:

内核启动模块,用于在启动设备linux内核时,根据uboot分区的标识信息,生成相应的proc文件;

业务启动模块,用于在设备的业务软件启动时,读取所述proc文件对应的标识信息,启动所述标识信息对应的产品类型,在整个软件启动及运行阶段,识别产品标识,进行差异化设计。

本发明实施例提供一种电子设备,包括:至少一个处理器;以及与所述处理器通信连接的至少一个存储器,其中:

图5是本发明实施例提供的电子设备的结构框图,参照图5,所述电子设备,包括:处理器(processor)501、通信接口(communicationsinterface)502、存储器(memory)503和总线504,其中,处理器501,通信接口502,存储器503通过总线504完成相互间的通信。处理器501可以调用存储器503中的逻辑指令,以执行如下方法:在设备首次启动时,从总线获取mcu外设地址;基于所述mcu外设地址,确定嵌入式设备所属整机的产品类型;将所述产品类型对应的标识信息写入uboot分区的预设隐藏区域。

本发明实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:在设备首次启动时,从总线获取mcu外设地址;基于所述mcu外设地址,确定嵌入式设备所属整机的产品类型;将所述产品类型对应的标识信息写入uboot分区的预设隐藏区域。

本发明实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:在设备首次启动时,从总线获取mcu外设地址;基于所述mcu外设地址,确定嵌入式设备所属整机的产品类型;将所述产品类型对应的标识信息写入uboot分区的预设隐藏区域。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行每个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1