如何在VxWorks 6.8上生成唯一ID?

时间:2014-08-11 19:32:15

标签: c gcc microcontroller uniqueidentifier vxworks

如何在 VxWorks 6.8 中生成关闭网中唯一的 唯一ID ?< / p>

网络中的每个设备都需要一个关联的ID,在启动时设置 一次 ,并保持到关闭状态。它们不必是随机加密安全 - 只是在封闭网络中 唯一

可用长度 6 Byte

限制:

  1. 设备可以立即启动(或非常靠近)以及及时分开
  2. 设备的类型/架构可能有所不同(但是,每个设备都支持dTSECeTSEC
  3. 使用相同(至少或类似的)VxWorks 6.8 Kernel
  4. 运行的设备
  5. ID无法手动设置或硬编码
  6. 没有第三方图书馆
  7. 无网络通讯/谈判
  8. 我使用某种“随机伏都教”进行了测试和开发目的的尝试(例如,参见下面的代码);直到现在他们没有碰撞地工作,但我不确定他们是否足够独特以保持安全。

    我需要的是一个真正的解决方案

    目前我使用CLOCK_MONOTONIC的纳秒时间和每个微控制器架构的id:

    #ifdef ARCH_1
    # define MC_ARCH_ID    0x01
    #elif defined(ARCH_2)
    # define MC_ARCH_ID    0x02
    /* ... */
    #else
    # define MC_ARCH_ID    0x00
    #endif /* MC_ARCH_ID */
    
    /* ... */
    
    char id[6];
    
    struct timespec tspec;
    clock_gettime(CLOCK_MONOTONIC, &tspec);
    
    UINT32 t = htonl(tspec.tv_nsec); /* consistent endian */
    
    id[0] = MC_ARCH_ID; /* 1 Byte ID set for each arch. */
    id[1] = (UINT8) ((UINT8*) &t)[0];
    id[2] = (UINT8) ((UINT8*) &t)[1];
    id[3] = (UINT8) ((UINT8*) &t)[2];
    id[4] = (UINT8) ((UINT8*) &t)[3];
    id[5] = 0x00; /* Not used yet */
    

    (希望)网络中的单调纳秒是不同的(请记住:这些ID在启动时设置一次) - 因此ID是“唯一的”。但正如“希望”表明:他们有可能没有。这里的时间是not the best choice

    作为更好,更安全的解决方案,我考虑使用MAC地址。不幸的是

    char mac[6];
    muxIoctl(muxCookie, EIOCGADDR, mac);
    

    只返回垃圾。

0 个答案:

没有答案
相关问题