具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明所述方案作进一步地详细说明。
本发明实施例中提出一种源代码保护方法,避免了源代码被错误修改,提高了源代码保存的可靠性。
参见图1,图1为本发明实施例中源代码保护方法流程示意图。具体步骤为:
步骤101,装置监控CPU发出的命令信号和地址总线信号。
对CPU发出的命令信号该装置一直在监控,并不因监控到命令信号为写闪存命令且指向闪存源代码存储区间而结束。
步骤102,当根据监控到的命令信号确定该命令信号为写闪存命令,且根据同时监控到的地址总线信号确定该写闪存命令指向闪存源代码存储区间时,确定所述闪存源代码的存储区间是否允许修改,如果是,执行步骤103;否则,执行步骤104。
本步骤中,根据监控到的命令信号确定该命令信号为写闪存命令,且根据同时监控到的地址总线信号确定该写闪存命令指向闪存源代码存储区间,包括:
当监控到的命令信号中的闪存片选(CE)信号和闪存写使能(WE)信号均为有效,确定该命令信号为写闪存命令,且同时监控到的地址总线信号携带的地址信息指向闪存源代码存储区间的地址空间时,确定该写闪存命令指向闪存源代码存储区间。若闪存CE信号无效、闪存WE信号无效,地址总线信号携带的地址信息未指向闪存源代码存储区间的地址空间,三条之中的任一条成立时,根据监控到的命令信号和地址总线信号的内容进行处理,同现有处理方式一致。
本步骤中,装置确定所述闪存源代码的存储区间是否允许修改的具体实现方法可以为:确定所述闪存源代码写使能寄存器值是否有效,有效时,允许修改;否则,不允许修改。通过一个寄存器提供写闪存源代码存储区间的使能标志位,当该标志位置0时表示无效,不允许写;当标志位置1时表示有效,允许写。
步骤103,该装置根据所述命令信号和地址总线信号处理闪存中的源代码,并将闪存源代码的存储区间设置为不允许修改,本流程结束。
本步骤中不对命令信号和地址总线信号进行任何处理,并根据命令信号和地址总线信号处理闪存中的源代码。
同时,将闪存源代码的存储区间设置为不允许修改,具体实现为将闪存源代码写使能寄存器值置为无效,即将寄存器提供的写闪存源代码存储区间的使能标志位置0。这样,不会因为CPU程序跑飞或外部电磁信号的干扰,而错误的修改了源代码。
步骤104,该装置修改所述地址总线信号携带的地址信息,使访问地址区间不指向闪存源代码存储区间,并根据所述命令信号,以及修改后的地址总线信号处理闪存中的数据。
本步骤中,通过强制修改地址总线信号中的地址信息,修改后使访问地址区间指向闪存源代码存储区间之外的区间。具体实现时,可以通过将某条低电平的地址信号强制置为高,使指向的地址空间发生变化。这样根据命令信号,以及修改后的地址总线信号不会对源代码执行操作。
本步骤中修改所述地址总线信号携带的地址信息,使访问地址区间不指向闪存源代码存储区间时,该方法进一步包括:产生异常修改源代码告警信息,并发送给CPU使CPU进行异常日志记录。产生的源代码告警信息至少包括错误修改了修改后的地址总线信号携带的地址信息对应的闪存区间,CPU根据该告警信息生成异常日志,以备维护人员查询。
该方法进一步包括:当需要修改所述闪存源代码时,该装置通过CPU将所述闪存源代码写使能寄存器值置为有效。由上可见,在每次正常写完成后,都会将闪存源代码写使能寄存器值置为无效,以免对源代码进行错误修改,因此,如果需要对源代码修改时,需先通过CPU将闪存源代码写使能寄存器值置为有效。
下面结合附图,详细说明本发明在具体实施例中如何实现源代码保护的。以一个存储空间为32M字节的闪存,数据总线位宽为8bit,地址空间为0x000,0000~0x1,FFF,FFF,地址总线为25根线,记为Addr[25..1]。规划源代码存放空间为1M字节,源代码地址空间为0x0,000,000~0x0,0FF,FFF,其余空间是用于存放数据。
参见图2,图2为本发明具体实施例中闪存中源代码保护方法流程示意图。具体步骤为:
步骤201,装置监控CPU发出的命令信号和地址总线信号。
步骤202,该装置监控到命令信号时,确定该命令信号中闪存CE信号是否有效,如果是,执行步骤203;否则,执行步骤209。
该步骤通过确定闪存CE信号是否有效,来确定该命令是否为发送给闪存的命令。通常CE为低电平时表示有效,高电平时表示无效,具体实现根据使用者习惯和方便设置。
步骤203,该装置确定同时监控到的命令信号中的闪存WE信号是否有效,如果是,执行步骤204;否则,执行步骤209。
当确定该命令信号是发送给闪存时,确定命令信号中的闪存WE信号是否有效,即确定该命令的操作是否为写命令。
步骤204,该装置根据同时监控到的地址总线信号中携带的地址信息是否指向闪存源代码存储区间,如果是,执行步骤205;否则,执行步骤209。
当确定该命令信号为发送给闪存的写命令时,根据同时监控到的地址总线确定该命令要访问的地址区间是否在源代码存储的区间。
由于该实施例中,源代码的存储空间为0x0,000,000~0x0,0FF,FFF,因此,只需确定一下同时监控到的地址总线信号携带的地址信息是否落入该地址区间。
步骤205,该装置确定所述闪存源代码写使能寄存器值是否有效,如果是,执行步骤206;否则,执行步骤207。
在规划源代码存储区间时,通过使用寄存器提供的标志位标识闪存源代码写使能是否有效,寄存器提供的标志位记为闪存源代码写使能寄存器值。在系统正常情况下,如果需要写闪存源代码时,需将该闪存源代码写使能寄存器值置为有效,再发送相应的命令信号和地址总线信号。如果监控到通过CPU发送的写闪存源代码的命令,而闪存源代码写使能寄存器值为无效时,可能由于CPU跑飞,或者外部电磁信号干扰造成的错误信号,这时,需通过本发明的步骤207和步骤208进行处理。
步骤206,该装置根据监控到的命令信号和地址总线信号处理闪存中的源代码,并将闪存源代码寄存器值置为无效,结束本流程。
当确定该次发送的是正常的写源代码命令时,则根据命令信号和地址总线信号修改相应的源代码,并在该次修改结束后,将闪存源代码写使能寄存器值置为无效,以防系统在非正常情况下修改了闪存中的源代码。
步骤207,该装置修改所述地址总线信号携带的地址信息,使访问地址区间不指向闪存源代码存储区间,并根据所述命令信号,以及修改后的地址总线信号处理闪存中的数据。
假设该次监控到的地址总线携带的地址信息中Addr[25..21]地址信号全部为低电平,即访问空间为0x0,000,000~0x0,0zz,zzz(“z”,表示为16进制任意数),该空间为源代码存储区间。则该装置将地址线Addr[21]强制置为高电平,这样,该访问区间不再指向源代码存储空间。
上述实现方式是将Addr[21]强制为高电平,在具体实现时,可以将Addr[22]、Addr[23]、Addr[24]或Addr[25]置为高电平,只要达到将访问地址区间指向闪存源代码存储区间之外的区间即可。
步骤208,该装置产生异常修改源代码告警信息,并发送给CPU使CPU进行异常日志记录,结束本流程。
步骤207中修改的地址按照预定的规则修改,如修改Addr[21],则可获知修改后的地址信息指向的地址访问空间。该装置产生异常修改源代码告警信息,携带本次非正常修改的地址区间,并发送给CPU使CPU进行异常日志记录,记录该次非正常修改的地址区间,以便维护人员根据该日志进行设备维护。
步骤209,该装置根据监控到的命令信号和地址总线信号的内容进行相应的处理。
当监控到的命令信号不是发送给闪存的时候,则根据命令信号的内容进行相应处理,同现有实现一致,这里不再详细赘述。
上述监控命令信号和地址总线信号,以及确定命令是否为写闪存源代码命令、如何处理地址总线信号等的实现,以及闪存源代码写使能寄存器值等,均可通过可编程逻辑器件(PLD)实现。其中,闪存源代码写使能寄存器值可通过一个1bit的寄存器,提供一个写FLASH源代码存储区间的使能标志位,允许修改和读取其当前的值。
本发明具体实施例中基于同样的发明构思,还提出一种装置。参见图3,图3为本发明具体实施例中应用于源代码保护的装置的结构示意图。该装置包括:监控单元301、确定单元302和处理单元303。
监控单元301,用于监控CPU发出的命令信号和地址总线信号。
确定单元302,用于根据监控单元301监控到的命令信号确定该命令信号为写闪存命令,且根据同时监控到的地址总线信号确定该写闪存命令指向闪存源代码存储区间,确定所述闪存源代码的存储区间是否允许修改。
处理单元303,用于当确定单元302确定所述闪存源代码的存储区间允许修改时,根据确定单元中的命令信号和地址总线信号处理闪存中的源代码,并将闪存源代码的存储区间设置为不允许修改;当确定单元302确定所述闪存源代码的存储区间不允许修改时,修改所述地址总线信号携带的地址信息,使访问地址区间不指向闪存源代码存储区间,并根据所述确定单元中的命令信号,以及修改后的地址总线信号处理闪存中的数据。
较佳地,
确定单元302,用于当监控单元301监控到的命令信号中的闪存片选CE信号和闪存写使能WE信号均为有效时,确定该命令信号为写闪存命令,且同时监控到的地址总线信号携带的地址信息指向闪存源代码存储区间的地址空间时,确定该写闪存命令指向闪存源代码存储区间。
较佳地,
处理单元303,进一步用于修改所述地址总线信号携带的地址信息时,产生异常修改源代码告警信息,并发送给CPU使CPU进行异常日志记录。
较佳地,该装置进一步包括:寄存器单元304。
寄存器单元304,用于记录闪存源代码写使能寄存器值。
确定单元302,用于确定寄存器单元304当前记录的闪存源代码写使能寄存器值是否有效。
处理单元303,用于根据所述命令信号和地址总线信号处理闪存中的源代码后,将寄存器单元304中的闪存源代码写使能寄存器值置为无效。
较佳地,
寄存器单元304,进一步用于当需要修改所述闪存源代码时,通过CPU将闪存源代码写使能寄存器值置为有效。
上述实施例中的监控单元、确定单元、处理单元和寄存器单元都可通过PLD实现。
上述实施例的单元可以集成于一体,也可以分离部署;可以合并为一个单元,也可以进一步拆分成多个子单元。
综上所述,本发明具体实施例中本申请通过监控CPU发出的命令信号和地址总线信号,当确定有写闪存源代码的命令,且当前闪存源代码区间不允许修改时,修改该地址总线信号携带的地址信息,使访问地址区间不指向闪存源代码存储区间,避免了源代码被错误修改,提高了源代码保存的可靠性。
同时,产生异常修改源代码告警信息,并发送给CPU使CPU进行异常日志记录,以便设备维护人员进行维护,进而提高了设备的稳定性。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。