labtool 관련 이슈를 대응하기 위해 필요한 사항들을 정리했다.

PC(X64) 용으로 포팅하기

PC 상에서 labtool 을 실행해야 하는 경우는 evalution board 를 사용할 때이다.
기존의 labtool 소스코드에서 makefile 파일만 수정하면 된다. 만일 빌드 도중 libbluetooth.so 파일을 찾지 못한다면, build pc 에서 관련 라이브러리를 설치해야 한다.

#apt-get install libbluetooth-dev
#find / -name libbluetooth.so

위 명령 결과로 나오는 경로를 makefile 에 수정한다.

ifeq (0, $(USE_MRVL_BTSTACK)) 
#DRVR_STACK = /build/peach_pit/usr/lib/libbluetooth.so
DRVR_STACK = /usr/lib/x86_64-linux-gnu/libbluetooth.so           # 수정
endif

빌드하면 labtool 바이너리가 생성된다.

FAQ

opendut 함수에 다음과 같이 수정했다.
CATs 와 연동할 때는 rfTest.sh 의 5 번을 사용한다. labtool 에 bridge 옵션을 추가하여 실행하게 되는데, opendut 함수를 수행한다.
따라서 'MRVL_RFT_OpenDUT()' 함수를 아래와 같이 추가했다.

/*
 *      function : MRVL_RFT_OpenDUT
 *      escription : Initialize all variable for DUT test with MFG F/W 
 *      ss at command : AT+WIFITEST=0,1,1,0
*/
int MRVL_RFT_OpenDUT()
{
    int             status=0,xtal_status=0;
    unsigned long   cmd=0, parm1=0, parm2=0, cnt=0,Cnt=0;
    unsigned long   dparm1=0, dparm2=0;
    BOOL            extern_LDO = 0;
    int             lnaMode = 0;
 
    int     g_TesterOption=2;
    int     g_RSSI_DataRate[22];
    int     NumDataRate=0;
    double  g_RSSI_CalPwrLevelStart=-45.0;
    double  g_InsertionLoss[MAXNUM_TXPATH][NUM_BAND][NUM_SUBBAND_A_REVD];
        char    line[MAX_LENGTH]="", buff[_MAX_PATH] = "";
 
    char INIFileName[_MAX_PATH]="";
 
    int vgcCtrl=0;
    int BandAG=0;
 
    if(gTxStart==1){
        DebugLogRite("===[MARVELL]=== Txstop is not called ===\n");
        MRVL_RFT_TxStop();
    }
 
    if(gOpenDut == 1){
        DebugLogRite("===[MARVELL]=== CloseDut is not called, already opendut state===\n");
        return 0;
    }
 
    gOpenDut = 1;
    gTxStart=1;
 
    init_PcktPifsSettings();
 
#if 1
    DebugLogRite("===[MARVELL]=== start DutIf_InitConnection() ===\n");
    status = DutIf_InitConnection(&memberVariables.mDutWlanApiClssObj);
 
    DebugLogRite("===[MARVELL]=== end DutIf_InitConnection() ===\n");
 
    if (status)
    {
        //DebugLogRite("open dut fail: 0x%X\n", status);
        DebugLogRite("open dut fail: 0x%X\n", status);
        return ERROR_DRIVER_NG;
    }
#endif
 
 
    strcpy(INIFileName, "SetUp.ini");
 
        sprintf(line, "RSSI_CalPwrLevelStart");
        GetPrivateProfileString("RSSI_CAL", line, "-45.0", buff, 256, INIFileName);
        sscanf(buff, "%lf", &g_RSSI_CalPwrLevelStart);
 
        sprintf(line, "RSSI_CAL");
        NumDataRate = GetPrivateProfileInt (line, "RSSI_CalDataRate_Nb", NumDataRate, INIFileName);
        for(Cnt = 0; Cnt < NumDataRate; Cnt++)
        {
                sprintf (line, "RSSI_CalDataRate_%d", Cnt);
                g_RSSI_DataRate[Cnt] = GetPrivateProfileInt ("RSSI_CAL", line, g_RSSI_DataRate[Cnt], INIFileName);
        }
 
    //printf("--------*****---------------------------!%d**\n",status);
#if 1
    DebugLogRite("===[MARVELL]=== when first time, shoot tx power one time  ===");
    DutIf_SetBandAG(gBand);     // jeremy 추가 
    MRVL_RFT_Channel(6);
    MRVL_RFT_TxDataRate(6);
    //MRVL_RFT_TxGain(17);
    MRVL_RFT_TxGain(16);        // jeremy 추가
    MRVL_RFT_TxStart();
    DebugLogRite("===[MARVELL]=== JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ  ===");
    usleep(500000);
    DebugLogRite("===[MARVELL]=== RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR ===");
    MRVL_RFT_TxStop();
    usleep(200000);
    DebugLogRite("===[MARVELL]=== MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM  ===");
#endif
 
    return status;
 
}

추가한 부분은 신호를 쏘기 전에 band 및 채널 대역, data rate, gain 을 설정한 후 tx 를 출력하게끔 했다. 따라서 opendut 만 하더라도 tx 를 출력하게 되는 것이다.
실제 위와 같이 수정한 후, 11ac 만 측정할 때 발생하던 문제가 사라졌다.

  • computer/marvell/labtool_핵심가이드.txt
  • Last modified: 3 years ago
  • by likewind