精华内容
下载资源
问答
  • [转]DCSM模块使用说明

    2018-12-05 16:01:30
    最新28004x、2837x等芯片增加了双码安全模块(DCSM),该功能支持将芯片中的memory划为两个独立区域,并设置各自独立的的128位CSM密码。该功能可以阻止未授权人员访问加密内容,进而有效防止您代码被重复或...

    一、功能描述:

    CSM加密是C2000系列芯片最基础的加密方式,也是在前代产品(如F2803x/F2806x)中广泛采用的加密方式。在最新的28004x、2837x等芯片中增加了双码安全模块(DCSM),该功能支持将芯片中的memory划为两个独立区域,并设置各自独立的的128位CSM密码。该功能可以阻止未授权人员访问加密内容,进而有效防止您的代码被重复或逆向编译;与此同时,需要维护与升级的代码可以存储于另一个独立区域内,并授权给相关人员使用。合理运用此功能,可以进一步地提高产品的安全性以及易用性。

     

    二、功能使用:

    2.1 芯片存储的分区设置

    下面以Control Suite中TMS320F28377S的 blinky_with_DCSM工程为例,讲解DCSM模块的用法:

    首先必须明确,虽然DCSM模块中设计了相关机制允许用户反复设置和使用该功能,但对于DCSM模块的不当操作仍然可能锁死芯片,因此建议您在工程开发的末尾阶段再进行DCSM模块的相关设置和操作。

    为了充分发挥双码安全模块的作用,需要根据工程需要对MCU中的资源进行分区配置。通过配置GRABRAMx/GRABSECTx寄存器,按需求将RAM/FLASH分别划入不同的Zone中,从而实现用两套独立密码对不同区域分别进行安全管理。

     

    图1 GRABRAMx/GRABSECTx寄存器设置

    以工程blinky_with_DCSM为例,假如我们想要将FLASH A 分配至Zone1进行保护,FLASH B分配至Zone2进行保护。参考手册中关于Zx_GRABSECTR Register及Zx_GRABSECTR Register,需要对DCSM_Zx_ZoneSelectBlock.asm进行如下修改。将Zone 1GRABSECT中FLASH A对应的[1:0]位改为01或10;将Zone 2 GRABSECT中FLASH B对应的[3:2]位改为01或10;特别需要注意的是,由于.asm中一个section是按位写入的,因此在对.asm文件进行修改时,必须以section为单位进行修改,即便有reserve的部分也需要将注释删掉进行编译,否则写入时只会按位写入已编译的内容,发生错位,难以修改。

    •       .sect "dcsm_zsel_z1"
    •      .long 0xFFFFFFFF      ;Z1-EXEONLYRAM
    •      .long 0xFFFFFFFF      ;Z1-EXEONLYSECT
    •      .long 0xFFFFFFFF      ;Z1-GRABRAM
    •      .long 0xFFFFFFFE      ;Z1-GRABSECT


     

    •       .sect "dcsm_zsel_z2"  
    •      .long 0xFFFFFFFF      ;Z2-EXEONLYRAM
    •      .long 0xFFFFFFFF      ;Z2-EXEONLYSECT
    •      .long 0xFFFFFFFF      ;Z2-GRABRAM
    •      .long 0XFFFFFFF7      ;Z2-GRABSECT


     

    2.2分区的基本设置

    在完成了对要保护存储的分区之后,我们需要了解如何给两个区域设置不同的密码。

    对于两个保护Zone,每个都有一个专属的OTP Block,以对各Zone进行安全设置,具体包含的资源及作用如下:

    Zx-LINKPOINTER1-3

    配置Zx OTP中Zone Select Block的位置

    Zx-PSWDLOCK

    用于使能Password Lock

    Zx-CRCLOCK

    用于使能Safe CRC

    ZoneSelectBlock(0x20-0x1F0)

    Zone Select Block 预留位置

    Zx-EXEONLYRAM

    用于使能RAM的Execute-only 保护

    Zx-EXEONLYSECT

    用于使能FLASH的Execute-only 保护

    Zx-GRABRAM

    用于配置RAM的所在分区

    Zx-GRABSECT

    用于配置FLASH的所在分区

    Zx-CSMPASSWORD

    用于配置分区的CSM密码


     

    为了能够让用户多次使用该功能、设置不同的密码,如图2,28004x系列MCU在USERS OTP中设置了多个存储密码及相关信息的位置(ZoneSelect Block),用户可以通过LINKPOINTER自由选择当前使用哪一个Zone Select Block。

    LINKPOINTER与Zone Select Block 对应关系如图3所示。作为一种校验措施三个LINKERPOINTER的值设为相同,若LINKERPOINTER1/2/3值不相同,则LINKPOINTER的值将被置为全1,系统将默认选择Zone-Select Block 1(0x20)。此外,由于Zx-LINKERPOINTER位于OTP区域,因此该寄存器的各位只能由1写成0,而不能逆向操作。因此,只有Zx-LINKPOINTER的值从“全F”写起,并在每次重新设置时按照下表顺序逐位写0,才能够充分利用到OTP中的所有Zone-Select Block。

     

    图2 Zonex OTP Flash

    图3 Zx-LINKPOINTER与Zone Select Block对应关系

    以工程blinky_with_DCSM为例,假如是第一次使用DCSM功能,为了充分利用所有Blocks,选取Zone_Select Block0作为当前使用的Block,在DCSM_Zx_ZoneSelectBlock.asm中保证Z1-LINKPOINTER值为全F,此时选取的Zone_Select Block起始地址为0x70820。

    •   .sect "dcsm_otp_z1_linkpointer"
    • .long 0x1FFFFFFF     ;Z1-LINKPOINTER1
    • .long 0xFFFFFFFF     ;Reserved
    • .long 0x1FFFFFFF     ;Z1-LINKPOINTER2
    • .long 0xFFFFFFFF     ;Reserved
    • .long 0x1FFFFFFF     ;Z1-LINKPOINTER3
    • .long 0xFFFFFFFF     ;Reserved

     

    类似地,如果后续工程需要对密码以及分区情况进行修改,我们可以启用Zone_Select Block1,将LINKERPOINTER的最后一位写0,对应的修改如下:

    •   .sect "dcsm_otp_z1_linkpointer"
    • .long 0x1FFFFFFE     ;Z1-LINKPOINTER1
    • .long 0xFFFFFFFF     ;Reserved
    • .long 0x1FFFFFFE     ;Z1-LINKPOINTER2
    • .long 0xFFFFFFFF     ;Reserved
    • .long 0x1FFFFFFE     ;Z1-LINKPOINTER3
    • .long 0xFFFFFFFF     ;Reserved


     

    此时需要注意还需要将CMD文件中对应Zone Select Block地址的内容进行修改,保证写入的Flash地址与当前的Zone Select Block正确对应。

    • /* DCSM Z1 Zone Select Contents (!!Movable!!) */  
    • /* Z1 OTP.  Z1 password locations / Flash and RAM partitioning */  
    • DCSM_ZSEL_Z1_P0         : origin = 0x78030, length = 0x000010


     

    最后在SECTIONS中将要写入区域对应处的type=DSECT 删除,否则FLASH写入不会进行。

    • SECTIONS
    • {
    •    b0_dcsm_otp_z1_linkpointer   : > B0_DCSM_OTP_Z1_LINKPOINTER   PAGE = 0, type = DSECT
    • /* Delete type=DSECT when writing in OTP */    


     

    特别需要注意的是:由于以上涉及到的寄存器都位于OTP(One-Time Programmable)FLASH中,不能进行反复更改,因此建议在开发后期代码以及内存分配确定之后,再进行相关的设置。

     

    2.3 加密功能及其使用

    在完成了对MCU中memory的分区以及Zone Select Block位置的设置后,下面来看DCSM所支持的几种加密模功能:

    1)CSM密码加密与解密:

    CSM加密是DCSM加密的基础,在完成对MCU 存储的分区之后,需要为分区设置各自的密码才能使能加密功能。密码寄存器Zx-CSMPSWD0/1/2/3位于各自的OTP的Zone Select Block中,具体位置由该区域的LINKPOINTER决定。对于2837x系列,当Zx-CSMPSWD0/1/2/3的值为默认值1,该区域处于解锁状态。当寄存器值为全0,该区域会被锁死,因此用户不应当使用全0密码。

    以工程blinky_with_DCSM为例,要设置Zone1的密码,我们需要在DCSM_Zx_ZoneSelectBlock.asm中将Zx-CSMPSWDx寄存器改为想要设置的密码:

    • .sect "dcsm_zsel_z1"  
    •       .long 0xFFFFFFFF      ;Z1-EXEONLYRAM
    •       .long 0xFFFFFFFF      ;Z1-EXEONLYSECT
    •       .long 0xFFFFFFFF      ;Z1-GRABRAM
    •       .long 0xFFFFFFBF      ;Z1-GRABSECT
    •       .long 0x11223344      ;Z1-CSMPSWD0 (LSW of 128-bit password)
    •       .long 0x11223344      ;Z1-CSMPSWD1
    •       .long 0x55667788      ;Z1-CSMPSWD2
    •       .long 0x55667788      ;Z1-CSMPSWD3 (MSW of 128-bit password)


     

    同样需要在CMD中对相应的dcsm_zsel_zx 的sections 进行修改,删除type=DSECT,对FLASH的操作才能够进行。这样就完成了Zonex 密码的设置工作。

    •      b0_dcsm_zsel_z1      : > B0_DCSM_ZSEL_Z1_P0            PAGE = 0

     

    进行加密后,通过仿真器读取Zone 1 OTP Flash结果如下:

    图3 加密后的OTP区域

    可以看到此时Zone 1 OTP Flash中除了 CSMPSWDx寄存器中的密码,其它部分均进行了加密操作。之所以采用这样的设计,是为了在开发初期开发者可以利用这一特性随时查看CSM,避免因为密码遗忘或者写入操作造成芯片被锁死。对于密码区域的加密需要通过Password Lock 功能进行,将在后文进行进一步描述。

    此时,如果试图通过仿真器读取加密区域Flash B,可以看到Flash区域也进行了加密(返回全0):

    图3 未加密的Flash(左)与加密后的Flash(右)

    要对CSM进行解密,需要经过Password match flow(PMF)流程,程序将从两个Zone读取CSM PWL并与写入CSMKEYx寄存器的密码进行比对,若密码完全一致,则为该区域解密,否则解密失败。

    图4 Password Match Flow 流程图

    解密操作可以通过几种方法进行,首先可以在debug界面单击tools -> on chip flash -> 在对应位置处输入密码,点击Unlock:

    图5在On chip flash中进行密码匹配

    也可以在.gel文件中找到写入csmkey寄存器的代码段,并自行修改密码:

    • *(unsigned long *)0x5F010 = 0x11223344;  // Virtual password
    • *(unsigned long *)0x5F012 = 0x55667788;
    • *(unsigned long *)0x5F014 = 0x11223344;
    • *(unsigned long *)0x5F016 = 0x55667788;


     

    另外,也可以通过在芯片内部执行一段解密程序完成解密操作,具体代码可参照.gel文件。

    以blinky_with_DCSM为例,如果把代码段写入FLASH A,并将FLASH A划入Zone1设置密码保护。在正确输入密码时,烧录操作可以正常进行。

    而在不输入正确密码时,会出现解锁失败的提示,烧录也会报错。

    图6 未解锁状态下进行烧录报错

    NOTE:特别需要注意的是,在使用280049系列芯片时,与传统C2000系列芯片不同,其ZxOTP_CSMPSWD1寄存中写入的默认密码不是全“1”。由于OTP寄存器的特殊性,只能在默认设置的基础上将1改成0,否则可能发生FLASH写入错误。

    图8 28004x CSMPWSD1默认密码表(部分)

    2)仿真代码保密逻辑 Emulation Code Security Logic(ECSL)

    在CSM的基础上,芯片利用CSM密码的后64位设计了仿真加密逻辑。如果试图在加密代码中Halt就会触发该保护,断开仿真连接。用户需要在CSMKEY(0/1)中写入正确的64位密码才能启用仿真,但此时并不会解锁CSM保护,对CSMKEY(0/1)的写入方法可以参考上一条。

    图8 在加密代码中Halt触发仿真保护

    特别注意,在debug一个加密MCU时,仿真器需要一些时间控制CPU,但此时CPU可能已经运行并触发ECSL保护导致断连。要解决此问题,请使用Wait Boot Mode boot选项,在此模式中,CPU会运行在一个循环中而不进入应用程序,从而避免触发保护。具体设置方法请参考技术手册Boot Rom部分,Launchpad可以通过拨动相应的开关进入此模式。

     

    3)CPU加密逻辑 CPU Secure Logic(CPUSL)

    CPU加密逻辑可以防止未授权者通过Watch Window读取CPU寄存器,在程序指针指向保护区域时,所有对于CPU寄存器的访问都被禁止(程序指针除外)。在此情况下,最好不要对CPU寄存器进行写入。另外,如果CSM被解锁,此外,CPUSL也将被关闭。

    图8 加密代码运行过程中CPU Registers不可见

    4)仅执行保护 Execute-Only Protection

    对于存储关键数据的RAM或FLASH,TI提供了Execute-Only Protection。当该逻辑启用,任何对该区域数据的读取都将被禁止。例如如果试图使用另一个加密区域中的代码对Execute-Only Protection加密区域中的代码进行复制、读取等操作都将被禁止。通过写入EXEONLYSECT以及EXEONLYRAM寄存器对应位的值,可以启用该功能。

    5)密码锁 Password Lock

    如前文所述,若只采用CSM加密,可以通过Memory Browser发现此时对应CSM密码的位置并没有进行加密。在开发完成后,开发者需要通过Password Lock功能对此区域进行加密,以防他人读取密码并进行解密。启用该保护的方法是向对应区域的PSWDLOCK寄存器0:3位写入0xF以外的值。

    图9 未开启Password Lock时的ZSB0寄存器值

    以blinky_with_DCSM为例,要设置Zonex的密码,需要在DCSM_Zx_ZoneSelectBlock.asm中将Zx-PSWDLOCK[3:0]该为非全1,并在CMD中删去相应部分的.DSECT:

    • .sect "dcsm_otp_z1_pswdlock"  
    • .long 0xFFFFFFFE     ;Z1-PSWDLOCK
    • .long 0xFFFFFFFF     ;Reserved

     

    图10开启Password Lock时的ZSB0寄存器值

    至此,我们就完成了DCSM中各种安全功能的介绍和设置,特别注意,由于PSWDLOCK等寄存器并不位于Zone Select Block当中,因此只能进行一次写入,不能进行更改,因此应该在程序开发后期再加此类保护。

     

    三、小结

    DCSM加密相较于传统的CSM加密具有更完善的保密措施和更灵活的使用方法。双密码的引入允许用户用不同密码管理不同部分的代码,为产品的代码安全以及后期的升级维护都带来了极大的便利。本实例以2837x系列芯片为对象,描述了DCSM模块常见的使用方法。28004x系列芯片仅在DCSM OTP区域的数量和使用方法上与2837x略有不用,也可参照此说明进行相应操作。

    另外部分C2000芯片也可以使用Unique ID作为种子进行进一步的加密,具体方法不在此展开。

    转自:http://bbs.21ic.com/icview-2575368-1-1.html?fromuser=

    展开全文
  • 流入了不清单中的模块。 (异常来自 HRESULT:0x80131043) 说明: 执行当前 Web 请求期间,出现未经处理异常。请检查堆栈跟踪信息,以了解有关该错误以及代码导致错误出处详细信息。 异常详细信息: System...
  • 流入了不清单中的模块。 (异常来自 HRESULT:0x80131043) 源错误: 执行当前 Web 请求期间生成了未经处理异常。可以使用下面异常堆栈跟踪信息确定有关异常原因和发生位置信息。 程序集加载跟踪: ...
  • 驱动模块的最终目的是读取和写入卡数据处理,所以规范整齐的数据结构是必须的。可以定义一个数据结构体来实现卡数据的存储区域、数据地址索引、控制标志位等,如:  这样驱动模块,只需要struct ICDATA ...
  • 本文将IP-MIB.txt主干提取出来,对其中的的宏定义进行了说明IP-MIB DEFINITIONS ::= BEGIN --DEFINITIONS:该宏前是MIB文件名,所有MIB file都以 ...--IMPORTS:MIB开始关键字后,即是模块引用区域,利用IM

    本文将IP-MIB.txt的主干提取出来,对其中的的宏定义进行了说明

    IP-MIB DEFINITIONS ::= BEGIN
    --DEFINITIONS:该宏前是MIB文件名,所有的MIB file的都以
    --DEFINITIONS ::= BEGIN关键字开始,以END结束。我们所有添加的节点均
    --应在此之间。
    IMPORTS
    --IMPORTS:在MIB开始关键字后,即是模块引用区域,利用IMPORTS标识,所
    --有的模块引用及群组的引用均使用FROM关键字说明其出处,引用使用分号
    --(;)结束。
    ipMIB MODULE-IDENTITY
    ::= { mib-2 48}
    --MODULE-IDENTITY主要用于描述模块的更新历史,定义该模块的组织、企业
    --、作者及相关的联系信息,以便于模块维护。需要注意的是定义SMIv2模块时
    --,MODULE-IDENTITY宏定义语句必须紧跟在IMPORTS子句后。模块每次更新
    --时应该同步更新REVISION、LAST-UPDATED等子句。
    IpAddressOriginTC ::= TEXTUAL-CONVENTION
    --TEXTUAL-CONVENTION:定义基于标准类型的扩展类型
    IpAddressStatusTC ::= TEXTUAL-CONVENTION
    IpAddressPrefixOriginTC ::= TEXTUAL-CONVENTION
    Ipv6AddressIfIdentifierTC ::= TEXTUAL-CONVENTION
    ip       OBJECT IDENTIFIER ::= { mib-2 4 }
    --OBJECT IDENITIFIER :定义辅助节点,用来将一类功能的对象结合起来,
    --展开或折叠此对象标识即可展开或折叠此类功能的所有对象
    ipForwarding OBJECT-TYPE
        ::= { ip 1 }
    --OBJECT-TYPE:用于定义被管理的对象节点
    ipDefaultTTL OBJECT-TYPE
        ::= { ip 2 }
    ipReasmTimeout OBJECT-TYPE
        ::= { ip 13 }
    ipv6IpForwarding OBJECT-TYPE
        ::= { ip 25 }
    ipv6IpDefaultHopLimit OBJECT-TYPE
        ::= { ip 26 }
    ipv4InterfaceTableLastChange OBJECT-TYPE
        ::= { ip 27 }
    ipv4InterfaceTable OBJECT-TYPE
        ::= { ip 28 }
    ipv6InterfaceTableLastChange OBJECT-TYPE
        ::= { ip 29 }
    ipv6InterfaceTable OBJECT-TYPE
        ::= { ip 30 }
    ipTrafficStats OBJECT IDENTIFIER ::= { ip 31 }
    ipSystemStatsTable OBJECT-TYPE
        ::= { ipTrafficStats 1 }
    ipIfStatsTableLastChange OBJECT-TYPE
        ::= { ipTrafficStats 2 }
    ipIfStatsTable OBJECT-TYPE
        ::= { ipTrafficStats 3 }
    ipAddressPrefixTable OBJECT-TYPE
        ::= { ip 32 }
    ipAddressSpinLock OBJECT-TYPE
        ::= { ip 33 }
    ipAddressTable OBJECT-TYPE
        ::= { ip 34 }
    ipNetToPhysicalTable OBJECT-TYPE
        ::= { ip 35 }
    ipv6ScopeZoneIndexTable OBJECT-TYPE
        ::= { ip 36 }
    ipDefaultRouterTable OBJECT-TYPE
        ::= { ip 37 }
    ipv6RouterAdvertSpinLock OBJECT-TYPE
        ::= { ip 38 }
    ipv6RouterAdvertTable OBJECT-TYPE
        ::= { ip 39 }
    icmp     OBJECT IDENTIFIER ::= { mib-2 5 }
    icmpStatsTable OBJECT-TYPE
        ::= { icmp 29 }
    icmpMsgStatsTable OBJECT-TYPE
        ::= { icmp 30 }
    ipMIBConformance OBJECT IDENTIFIER ::= { ipMIB 2 }
    ipMIBCompliances OBJECT IDENTIFIER ::= { ipMIBConformance 1 }
    ipMIBGroups      OBJECT IDENTIFIER ::= { ipMIBConformance 2 }
    ipMIBCompliance2 MODULE-COMPLIANCE
    --MODULE-COMPLIANCE:它用于描述MIB中需要实现的管理对象的最小集合,
    --这些集合可以是由OBJECT-GROUP和NOTIFICATION-GROUP定义的。
        MODULE -- this module
        MANDATORY-GROUPS { ipSystemStatsGroup,   ipAddressGroup,
                           ipNetToPhysicalGroup, ipDefaultRouterGroup,
                           icmpStatsGroup }
    --MANDATORY-GROUPS子句定义了该MIB中必须实现的管理对象,即当某个
    --Agent宣称支持某个MIB时,必须实现该MIB中MANDATORY-GROUPS定义的管
    --理对象。
        GROUP ipSystemStatsHCOctetGroup
        GROUP ipSystemStatsHCPacketGroup
        GROUP ipIfStatsGroup
        GROUP ipIfStatsHCOctetGroup
        GROUP ipIfStatsHCPacketGroup
        GROUP ipv4GeneralGroup
        GROUP ipv4IfGroup
        GROUP ipv4SystemStatsGroup
        GROUP ipv4SystemStatsHCPacketGroup
        GROUP ipv4IfStatsGroup
        GROUP ipv4IfStatsHCPacketGroup
        GROUP ipv6GeneralGroup2
        GROUP ipv6IfGroup
        GROUP ipAddressPrefixGroup
        GROUP ipv6ScopeGroup
        GROUP ipv6RouterAdvertGroup
        GROUP ipLastChangeGroup
        --GROUP子句说明条件必须或条件可选的组。
        OBJECT     ipv6IpForwarding
        OBJECT     ipv6IpDefaultHopLimit
        OBJECT     ipv4InterfaceEnableStatus
        OBJECT     ipv6InterfaceEnableStatus
        OBJECT     ipv6InterfaceForwarding
        OBJECT     ipAddressSpinLock
        OBJECT     ipAddressIfIndex
        OBJECT     ipAddressType
        OBJECT     ipAddressStatus
        OBJECT     ipAddressRowStatus
        OBJECT     ipAddressStorageType
        OBJECT     ipNetToPhysicalPhysAddress
        OBJECT     ipNetToPhysicalType
        OBJECT     ipv6RouterAdvertSpinLock
        OBJECT     ipv6RouterAdvertSendAdverts
        OBJECT     ipv6RouterAdvertMaxInterval
        OBJECT     ipv6RouterAdvertMinInterval
        OBJECT     ipv6RouterAdvertManagedFlag
        OBJECT     ipv6RouterAdvertOtherConfigFlag
        OBJECT     ipv6RouterAdvertLinkMTU
        OBJECT     ipv6RouterAdvertReachableTime
        OBJECT     ipv6RouterAdvertRetransmitTime
        OBJECT     ipv6RouterAdvertCurHopLimit
        OBJECT     ipv6RouterAdvertDefaultLifetime
        OBJECT     ipv6RouterAdvertRowStatus
        --OBJECT子句说明了代理实现这些对象的访问限制
        ::= { ipMIBCompliances 2 }
    ipv4GeneralGroup OBJECT-GROUP
    --OBJECT-GROUP:将有一致性陈述相关需求的管理对象描述在一个组中,便于
    --一致性说明、管理和实现。
        ::= { ipMIBGroups 3 }
    ipv4IfGroup OBJECT-GROUP
        ::= { ipMIBGroups 4 }
    ipv6GeneralGroup2 OBJECT-GROUP
        ::= { ipMIBGroups 5 }
    ipv6IfGroup OBJECT-GROUP
        ::= { ipMIBGroups 6 }
    ipLastChangeGroup OBJECT-GROUP
        ::= { ipMIBGroups 7 }
    ipSystemStatsGroup OBJECT-GROUP
        ::= { ipMIBGroups 8 }
    ipv4SystemStatsGroup OBJECT-GROUP
        ::= { ipMIBGroups 9 }
    ipSystemStatsHCOctetGroup OBJECT-GROUP
        ::= { ipMIBGroups 10 }
    ipSystemStatsHCPacketGroup OBJECT-GROUP
        ::= { ipMIBGroups 11 }
    ipv4SystemStatsHCPacketGroup OBJECT-GROUP
        ::= { ipMIBGroups 12 }
    ipIfStatsGroup OBJECT-GROUP
        ::= { ipMIBGroups 13 }
    ipv4IfStatsGroup OBJECT-GROUP
        ::= { ipMIBGroups 14 }
    ipIfStatsHCOctetGroup OBJECT-GROUP
        ::= { ipMIBGroups 15 }
    ipIfStatsHCPacketGroup OBJECT-GROUP
        ::= { ipMIBGroups 16 }
    ipv4IfStatsHCPacketGroup OBJECT-GROUP
        ::= { ipMIBGroups 17 }
    ipAddressPrefixGroup OBJECT-GROUP
        ::= { ipMIBGroups 18 }
    ipAddressGroup OBJECT-GROUP
        ::= { ipMIBGroups 19 }
    ipNetToPhysicalGroup OBJECT-GROUP
        ::= { ipMIBGroups 20 }
    ipv6ScopeGroup OBJECT-GROUP
        ::= { ipMIBGroups 21 }
    ipDefaultRouterGroup OBJECT-GROUP
        ::= { ipMIBGroups 22 }
    ipv6RouterAdvertGroup OBJECT-GROUP
        ::= { ipMIBGroups 23 }
    icmpStatsGroup OBJECT-GROUP
        ::= { ipMIBGroups 24 }
    --
    -- Deprecated objects
    --
    ipInReceives OBJECT-TYPE
        ::= { ip 3 }
    ipInHdrErrors OBJECT-TYPE
        ::= { ip 4 }
    ipInAddrErrors OBJECT-TYPE
        ::= { ip 5 }
    ipForwDatagrams OBJECT-TYPE
        ::= { ip 6 }
    ipInUnknownProtos OBJECT-TYPE
        ::= { ip 7 }
    ipInDiscards OBJECT-TYPE
        ::= { ip 8 }
    ipInDelivers OBJECT-TYPE
        ::= { ip 9 }
    ipOutRequests OBJECT-TYPE
        ::= { ip 10 }
    ipOutDiscards OBJECT-TYPE
        ::= { ip 11 }
    ipOutNoRoutes OBJECT-TYPE
        ::= { ip 12 }
    ipReasmReqds OBJECT-TYPE
        ::= { ip 14 }
    ipReasmOKs OBJECT-TYPE
        ::= { ip 15 }
    ipReasmFails OBJECT-TYPE
        ::= { ip 16 }
    ipFragOKs OBJECT-TYPE
        ::= { ip 17 }
    ipFragFails OBJECT-TYPE
        ::= { ip 18 }
    ipFragCreates OBJECT-TYPE
        ::= { ip 19 }
    ipRoutingDiscards OBJECT-TYPE
        ::= { ip 23 }
    ipAddrTable OBJECT-TYPE
        ::= { ip 20 }
    ipNetToMediaTable OBJECT-TYPE
        ::= { ip 22 }
    -- the deprecated ICMP group
    icmpInMsgs OBJECT-TYPE
        ::= { icmp 1 }
    icmpInErrors OBJECT-TYPE
        ::= { icmp 2 }
    icmpInDestUnreachs OBJECT-TYPE
        ::= { icmp 3 }
    icmpInTimeExcds OBJECT-TYPE
        ::= { icmp 4 }
    icmpInParmProbs OBJECT-TYPE
        ::= { icmp 5 }
    icmpInSrcQuenchs OBJECT-TYPE
        ::= { icmp 6 }
    icmpInRedirects OBJECT-TYPE
        ::= { icmp 7 }
    icmpInEchos OBJECT-TYPE
        ::= { icmp 8 }
    icmpInEchoReps OBJECT-TYPE
        ::= { icmp 9 }
    icmpInTimestamps OBJECT-TYPE
        ::= { icmp 10 }
    icmpInTimestampReps OBJECT-TYPE
        ::= { icmp 11 }
    icmpInAddrMasks OBJECT-TYPE
        ::= { icmp 12 }
    icmpInAddrMaskReps OBJECT-TYPE
        ::= { icmp 13 }
    icmpOutMsgs OBJECT-TYPE
        ::= { icmp 14 }
    icmpOutErrors OBJECT-TYPE
        ::= { icmp 15 }
    icmpOutDestUnreachs OBJECT-TYPE
        ::= { icmp 16 }
    icmpOutTimeExcds OBJECT-TYPE
        ::= { icmp 17 }
    icmpOutParmProbs OBJECT-TYPE
        ::= { icmp 18 }
    icmpOutSrcQuenchs OBJECT-TYPE
        ::= { icmp 19 }
    icmpOutRedirects OBJECT-TYPE
        ::= { icmp 20 }
    icmpOutEchos OBJECT-TYPE
        ::= { icmp 21 }
    icmpOutEchoReps OBJECT-TYPE
        ::= { icmp 22 }
    icmpOutTimestamps OBJECT-TYPE
        ::= { icmp 23 }
    icmpOutTimestampReps OBJECT-TYPE
        ::= { icmp 24 }
    icmpOutAddrMasks OBJECT-TYPE
        ::= { icmp 25 }
    icmpOutAddrMaskReps OBJECT-TYPE
        ::= { icmp 26 }
    -- deprecated conformance information
    -- deprecated compliance statements
    ipMIBCompliance MODULE-COMPLIANCE
    
        MODULE  -- this module
            MANDATORY-GROUPS { ipGroup,
                               icmpGroup }
        ::= { ipMIBCompliances 1 }
    ipGroup OBJECT-GROUP
        ::= { ipMIBGroups 1 }
    icmpGroup OBJECT-GROUP
        ::= { ipMIBGroups 2 }
    END
    
    展开全文
  • 说明 : 指定一个共享服务器环境可同时运行共享服务器进程最大数量。 值范围: 根据操作系统而定。 默认值 : 20 dispatchers: 说明 : 为设置使用共享服务器共享环境而设置调度程序数量和类型。可以为该...
  • 以客户管理为例,说明一个模块的目录结构。目录结构图片如下: 一、目录结构由四层组成,分别是:区域、模块,代码分区、代码类别。 二、kh代表是的客户区域,该区域下面放的都是客户管理相关的模块。 三...

    以客户管理为例,说明一个模块的目录结构。目录结构图片如下:

    目录结构

    一、目录结构由四层组成,分别是:区域、模块,代码分区、代码类别。

    二、kh代表是的客户区域,该区域下面放的都是客户管理相关的模块。

    三、模块说明。

    (1)main代表一个模块,在此是代表客户中的主模块。在图中可看到,客户区域下面还有两个模块:notpad和outBox,分别代表客户记事和邮箱帐户,此处我们以main模块作详细讲解。

    (2)此处的模块,指的是物理模块,即对一个或一组bo对象相关操作功能的代码实现。分模块的原则是:一个bo对象或一组紧密关联的bo对象定义成一个模块。例如:此处的客户、联系人、客户分类、客户来源等一系列和客户紧密相关的一组对象,定义在的一模块内。

    (3)逻辑模块指的是一块逻辑功能的调用入口。如:我的客户管理、联系人管理等,逻辑模块可以被菜单引用。可将一个action定义成一个逻辑模块,也可定义成多个,但最好一一对应,这样整个程序结构显的比较清晰。一个物理模块中,可以定义多个逻辑模块。具体逻辑模块的定义参见“模块的定义”中的说明。

    四、inside和jk分别代表代码分区,表示一个模块的内部和对外接口。

    五、inside内部分区中的代码分类:

    (1)action:struts2框架中的action定义。一个action可以代表一个逻辑模块,一个定义成多个逻辑模块,详参见“模块的定义”中的讲解。

    (2)bean:细粒度的业务逻辑处理,被service调用,用来实现业务代码重用。

    (3)bo:bo对象定义,和数据库一一对应

    (4)other:其他,如:DWR对象、常量定义、对其他模块的接口(其他模块/jk/inf)的实现(例如:在某个用户被删除时,我们希望该用户的所有客户,全部转入部门库,就可以去实TriggerUserDeleteInf接口,将客户划转的逻辑写在该实现中,并将该实现加入到接口中的常量列表中,就可以保证,在用户被删除之前,该实现被调用。这样一方面实现了不同模块代码之间的解耦合,也避免因为数据库表外键而导至用户信息删除报错。)

    (5)service:业务逻辑处理,有时可能调用bean

    展开全文
  • “省份“模块的进一步完善  上面几节讲了一些导入数据,图表的功能,在说明导出功能之前,先把模块完善一下。可以完善的地方有: 1.给面积,人口,GDP加上单位; 2.GDP的文字写错了,写与GPD了,把他...

    “省份“模块的进一步完善

            上面几节讲了一些导入数据,图表的功能,在说明导出功能之前,先把模块完善一下。可以完善的地方有:

    1.给面积,人口,GDP加上单位;

    2.GDP的文字写错了,写与GPD了,把他改正过来;

    3.设置”所属区域“字段,可以进行分组;

    4.设置”记录明细“中显示的字段,可以在右侧显示当前选中记录的明细。


            由于本系统是全解释配置的,因此每一个模块的名称,权限,每个字段的字段名,单位(比如面积是万平方公里),是否可以修改等等属性全是自由设置。所有的grid列和form样式,图表,导航,可分组字段的定义,以后数据的多条记录导出和单条记录导出,都是自定义的。当前还只有一个模块,所有的定义都是比较简单的,等到模块一多,定义会更加复杂。还有综合查询,也是完全自定义的。设置的过程这里不贴图了,以前小节里面有过修改字段和截图了,哪些可以修改可以参考一下。

            下面看一下修正结束后的模块的样子:




            这样看起来作为一个单个模块的功能已经比较饱满了。还有什么需要改进的地方,请跟贴讨论,多谢。

    加入了单位以后,form 窗口也需要重新展示一下。




          

           数据筛选:在功能栏里有一个筛选的输入框,这个输入框中输入的筛选条件的作用范围是当前grid的所有字段。比如你输入一个“东”,查找到的记录如下图。




    这里我贴一下sql语句中的where子句。

       where
            (
                _t7010.tf_provinceId like '%东%' 
                or  _t7010.tf_name like '%东%' 
                or  _t7010.tf_shortname like '%东%' 
                or  _t7010.tf_district like '%东%'
            ) 
    这里会判断筛先条件如果是字符,那么就对当前grid 的所有字符字段加上条件。

    如果录入了一个2012,则会对所有的字符和数值,日期型的加上条件。sql 语句 where 子句如下


        where
            (
                _t7010.tf_provinceId like '%2012%' 
                or  _t7010.tf_name like '%2012%' 
                or  _t7010.tf_shortname like '%2012%' 
                or  _t7010.tf_district like '%2012%' 
                or  _t7010.tf_area=2012    //数值字段
                or  _t7010.tf_numberOfPeople=2012    //数值字段
                or  _t7010.tf_GDP=2012     //数值字段
                or  (    //因为输入了4位数,判断是年份,
                    year(_t7010.tf_createDate)=2012    
                ) 
            ) 
    下面是一个输入了 ‘2012-07’的sql where 子句

        where
            (
                _t7010.tf_provinceId like '%2012-07%' 
                or  _t7010.tf_name like '%2012-07%' 
                or  _t7010.tf_shortname like '%2012-07%' 
                or  _t7010.tf_district like '%2012-07%' 
                or  _t7010.tf_GDP=2012-07          //这里不对了,发现了一个bug 要修正一下
                or  (
                    year(_t7010.tf_createDate)=2012 
                    and month(_t7010.tf_createDate)=07      //这里比较年份和月份了
                ) 
            ) 

            对于录入的数据作各种判断来生where 子句,可以根据用户的需求和业务需求来增加,比如说用 ‘,'号分隔,可以并列的条件,用空格分隔二个必须满足的条件等等。查询的时候不允许输入单引号,要防止SQL注入还要做一些工作。




    也可以对每个字段附加条件,这个我加在综合查询里面了,模块里没有加入。


    下一节介绍数据导出的种种方式。

    展开全文
  • MatlabSimulink汽车空调系统中的应用二-Matlab(汽车)空调系统中的应用.rar 附件一:简要介绍汽车空调模糊控制原理及控制过程 附件二(汽车空调系统仿真体系研究):汽车空调系统仿真为汽车空调设计、...
  • 第1章 FCB数据结构(文件控制块) 1. 目录项 相当于FCB次部,包括两个内容: 即文件名和inode编号, 不同... UNIX文件系统, 有一个固定的区域, 用于保存所有文件inode.每个inode有一个唯一编号,称为i_numbe
  • 其中用于修饰类静态成员时,则不论该类对象有多少,所有对象公用一份存在于公用内存中的静态成员(注意:这个内存区域既不是,也非栈,而是编译过程由编译器创建)。使用时需要注意是类静态数据成员...
  • python2提供了PIL基础图像数据出来模块python3更名为了pillow模块,名字虽然发生了改变,但是提供方法和功能都是一样,对于日常基础图像数据处理分析来说是足够用了,现在正好有一个需求点就是要...
  • C++ 获取线程入口地址、所在模块

    千次阅读 2019-08-20 14:57:14
    今天检测特征是向 YY语音 里插入了一段自己代码(创建了新线程),而这个新线程不原有的模块内,所以思路就是遍历 YY.exe 这个进程中的所有线程,如果这个线程没有对应的模块,那么就说明这个线程是可疑...
  • SUI汉化模块

    2013-09-16 01:37:01
    [#]优化窗口动画的在Win7 Aero开启情况下可能出现不完整情况 [#]优化窗口最大化速度 [-]修正SUIDrawpGraphicFrameBorder()调用时提示错误Bug 感谢[永恒の承诺]提交此Bug [-]修正SUI_Remove()销毁引擎后SUI_...
  • 13.5.1径向基函数网络散布设计中的影响 13.5.2用于模式分类RBF网络 13.5.3用于网络逼近 13.6基于RBF网络非线性滤波 13.7RBF网络与多层感知器比较 第14章MIMOOFDM通信系统设计与实现 14.1MIMO...
  • 交互模块说明:由于交互功能和原型制作的粘合性较高,所以交互模块就不做过多详细的说明,主要案例进行串讲。所以本章只是做简要说明。通过结合笔者使用程度高低进行标注。页面交互事件【高】页面载入时...
  • Python车道线检测模块

    千次阅读 2018-11-30 21:56:52
    代码只是对大佬代码进行了封装。 模型基本思路:  基于Opencv库,采用基本图形学算法来实现车道线检测。首先将普通RGB图片转化为灰度图片,通过高斯... main方法给出了接口使用方法: Ld=L...
  • 最近项目升级改版,项目本来应用了苹果自带定位模块,但升级改版有需要应用到高德地图的模块,参考别app地图相关模块实现过程,自己产生了一些想法。首先说明要实现功能需求。类似支付宝app内跑腿功能,...
  • 易语言 茶凉专用模块

    2010-05-04 12:26:36
    子程序 超级截图, 字节集, 公开, 截取窗口或屏幕指定区域图片(返回图片字节集,失败返回空字节集) .参数 窗口句柄, 整数型, 可空, 默认为屏幕.指定窗口句柄,则以窗口客户区内坐标点 .参数 左上顶点_X, 整数型, 可...
  • 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块区域中的“DR1-DR8”端口上; (2). 把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块区域中的“DC1-DC8”端口上; 4. 程序设计内容 (1...
  • 机械故障产生机理比较多...首先论述了概率粗糙集模型并引进了概率粗糙集模型属性约简,然后介绍了机械故障诊断有关Bayes决策问题概率粗糙集模型,最后用一个实例说明概率粗糙集模型机械故障诊断中的应用。
  • layui选项卡使用

    千次阅读 2019-06-27 21:45:39
    作者:张铭标 撰写时间:2019年6月 27日 第一步当然是需要引入layui插件:layui.css和layui.js,最主要是还要依赖element模块才能进行正常功能性操作,如果没有...然后下面内容区域放入你需要显示内容就可...
  • 百度地图iOS SDK v2.10.0 Sample共有23个Demo,每个Demo的说明如下: ------------------------------------------------------------------------------------- 一、 Demo名称:基本地图功能 文件名: ...
  • EV_SDK说明

    2020-08-18 22:55:28
    EV_SDK 说明 ...应用层服务:此模块ev_sdk,比如视频处理服务、算法对外通讯http服务等 开发者需要做什么 模型训练和调优 实现ji.h约定接口,同时包括授权、支持分析区域等功能 实现
  • STM32RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即系统复位或从待机模式唤醒后, RTC设置和时间维持不变。 STM32F0RTC模块和F3RTC模块最大区别在于F0模块中有“DATE”和“TIME...
  • Highcharts是一款纯...本文,我将向您展示一个简单方法,说明如何使用HTML表中的数据创建交互式图表。 多亏了Highcharts数据模块,很容易和直接装载一个HTML表作为数据源。 下面演示将1935年至2020年日本
  • 要求就是看到图片中的1,从1开始进行排序,而且需要首尾相接,意思就是标号1(就是起点)已经定好,排序2标号一定要和1最近位置(图方框为所需要编排的区域),排到第4坐标位置要3下两格,以此类推。...
  • 您可以在模块列表下面文本框输入要查找模块进行查找。 B:该区域显示我们可以进行漏洞测试活跃主机。 C:该区域显示多个Metasploit标签,可以让运行多个Meterpreter或控制台会话能够同时显示。 (2)...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 223
精华内容 89
关键字:

在模块的说明区域中