当前位置: 代码迷 >> WinCE >> 基于WINCE6.0系统的I.MX515和S3C2451 UUID不一样有关问题
  详细解决方案

基于WINCE6.0系统的I.MX515和S3C2451 UUID不一样有关问题

热度:518   发布时间:2016-04-28 11:50:01.0
基于WINCE6.0系统的I.MX515和S3C2451 UUID不一样问题

1. 获取UUID的方法
同一个APP,调用GetDeviceUniqueId()获取UUID,传递的应用参数一样。

调用GetDeviceUniqueID(),最后会调用到底层的OALIoCtlHalGetDeviceInfo()--->GetUUID()--->OALArgsQuery(OAL_ARGS_QUERY_UUID)
在OALArgsQuery函数中把下面的值传递出去
pData = &pArgs->uuid;
pArgs->uuid指向的值在OEMInit()函数中会调用OALArgsInit((BSP_ARGS *) IMAGE_SHARE_ARGS_UA_START)函数来初始化化,代码如下:
VOID OALArgsInit(BSP_ARGS* pArgs)
{
    OALMSG(1,(TEXT("+OALArgsInit()\r\n")));
    // Check the BSP Args area
    //
    if (pArgs->header.signature  != OAL_ARGS_SIGNATURE ||
        pArgs->header.oalVersion != OAL_ARGS_VERSION   ||
        pArgs->header.bspVersion != BSP_ARGS_VERSION)
    {
        S3C2450_IOPORT_REG *v_IOPRegs;
        DWORD count, code, j;
        UCHAR d;

        // Zero out the current contents of the structure
        memset(pArgs, 0, sizeof(BSP_ARGS));

        // Setup header
        pArgs->header.signature = OAL_ARGS_SIGNATURE;
        pArgs->header.oalVersion = OAL_ARGS_VERSION;
        pArgs->header.bspVersion = BSP_ARGS_VERSION;

        //Set-up dummy uuid for SMDK2450. Actually, uuid can be acquired from NAND id. 
        pArgs->uuid[0] = (UCHAR)0x00;
        pArgs->uuid[1] = (UCHAR)0x11;
        pArgs->uuid[2] = (UCHAR)0x22;
        pArgs->uuid[3] = (UCHAR)0x33;
        pArgs->uuid[4] = (UCHAR)0x44;
        pArgs->uuid[5] = (UCHAR)0x55;
        pArgs->uuid[6] = (UCHAR)0x66; 
        pArgs->uuid[7] = (UCHAR)0x77;  
        pArgs->uuid[8] = (UCHAR)0x88;
        pArgs->uuid[9] = (UCHAR)0x99;
        pArgs->uuid[10] = (UCHAR)0xaa;
        pArgs->uuid[11] = (UCHAR)0xbb;
        pArgs->uuid[12] = (UCHAR)0xcc;
        pArgs->uuid[13] = (UCHAR)0xdd;
        pArgs->uuid[14] = (UCHAR)0xee;
        pArgs->uuid[15] = (UCHAR)0xff;

        ………..

        // Can Add code for cleanboot, hiveclean, formatpartion

        OALMSG(1,(TEXT("Arguments area is initialized.\r\n")));
    }
    else
    {
        RETAILMSG(1,(TEXT("Arguments area has some values.\r\n")));
    }
    OALMSG(1,(TEXT("-OALArgsInit()\r\n")));

    return;
}


2. 问题背景
客户要求我们采用CPU为S3C2451的设备调用GetDeviceUniqueId()获取的ID是一样的,现在我们这个设备做了升级,改为采用飞思卡尔的CPU I.MX515,他们也要求升级后的设备取出的ID和S3C2451的一样。

S3C2451和I.MX515上面的实现是一样的,但实际上S3C2451平台下读取出来的是C26….,在I.MX515平台上读出来的是8f9…,不一样,如何才能读出出来的一样,在此请教大家了。
------解决思路----------------------
你再仔细研读一下,GetDeviceUniqueID()这个最终是否是调用了pArgs指向的全局参数,还是去读CPU的ID了。
------解决思路----------------------
我们的id通过专业芯片获取,每个设备都有唯一的id,跟你们的不一样。我们不需要用uuid。
1.你可以确认uuid初始化后没有被改变。
2.两份bsp读取时是否一样?
我看你读取处理的提示也跟初始化不一致啊。