NX500 은 NX1 에서 11ac 와 5GHz 대역이 빠진 모델이다. 하지만, H/W Chip, Driver, Firmware 모두 NX1 과 동일하다. 하지만, 앞서 언급한 대로, 몇몇 기능을 disable 시켜야 하기에 드라이버를 수정했다.
여기서는 NX500 specific 한 내용들을 다룬다.

11ac 및 5GHz 대역 비활성화

아래와 같이 드라이버 코드를 수정한다. mlinux/moal_main.c 파일이다.

...
#else
int drv_mode = DRV_MODE_UAP;
#endif /* STA_SUPPORT */
#endif /* STA_SUPPORT & UAP_SUPPORT */
 
/** all the feature are enabled */
#define DEFAULT_DEV_CAP_MASK 0xffffcbff                  // 코드 수정
 
//#define DEFAULT_DEV_CAP_MASK 0xffffffff                   // 주석 처리
t_u32 dev_cap_mask = DEFAULT_DEV_CAP_MASK;
/********************************************************
        Global Variables
...

2.4GHz 에서 HT40 사용하기

일반적으로 기존의 채널을 본딩하여 사용하는 HT40 이라 함은 5GHz 대역에서의 경우를 의미한다. 2.4GHz 을 생각하지 않는 이유는 2.4GHz 대역에서 HT40을 사용하기에는 영역이 너무 좁기 때문이다.
외부와 차단된 쉴드룸 환경이라면, 가능하겠지만, ISM 밴드 영역(2.4GHz)을 사용하는 BT, 전자레인지 등이 함께 동작하는 실생활에서는 간섭때문에 오히려 HT20 보다도 느릴 수 있다.

이런 점 때문에 기본적으로 WiFI 드라이버에서는 2.4GHz 에서의 HT40 기능을 비활성화하여 사용한다. 하지만, 상황에 따라 사용해야 하는 경우가 생길 수 있다.
예를 들면, 2.4GHz 에서의 최대 TP 를 측정하고자 할 때이다. 별로 큰 의미는 없다.

어찌되었든, 2.4GHz 에서 HT40 사용하는 방법을 설명한다. 이를 위해 설정해주어야 하는 값은 'htcapinfo' 와 'httxcfg' 이다.

#mlanutl mlan0 htcapinfo
HT cap info:
 BG band: 0x04800000              // 기본값
   A band: 0x05820000              // 기본값
 
#mlanutl mlan0 httxcfg
HT Tx cfg:
 BG band: 0x00000020
   A band: 0x00000062

위의 값을 mlanutl 명령어로 값을 각각 수정할 수도 있다.

#mlanutl mlan0 htcapinfo 0x05820000 1         // Set value for only 2.4GHz
#mlanutl mlan0 httxcfg 0x62 1               // Set value for only 2.4GHz

다음은 드라이버 코드를 직접 수정하는 방법을 살펴보자.

mlan/mlan_fw.h 파일을 아래와 같이 수정한다.

...
#define HWSPEC_CHANBW40_SUPP     MBIT(17)
/** 40Mhz intolarent enable */
#define CAPINFO_40MHZ_INTOLARENT MBIT(8)
 
/** Default 11n capability mask for 2.4GHz */
//#define DEFAULT_11N_CAP_MASK_BG (HWSPEC_SHORTGI20_SUPP | HWSPEC_RXSTBC_SUPP)           // 주석 처리
 
#define DEFAULT_11N_CAP_MASK_BG (HWSPEC_CHANBW40_SUPP | HWSPEC_SHORTGI20_SUPP | HWSPEC_SHORTGI40_SUPP | HWSPEC_RXSTBC_SUPP)     // 수정
 
/** Default 11n capability mask for 5GHz */
#define DEFAULT_11N_CAP_MASK_A  (HWSPEC_CHANBW40_SUPP | HWSPEC_SHORTGI20_SUPP | \
        HWSPEC_SHORTGI40_SUPP | HWSPEC_RXSTBC_SUPP)
 
...

드라이버에서는 별도로 이에 대한 명령을 내려보내지 않기 때문에 firmware level 상에서 수정을 해야 한다.
드라이버의 경우, '\\swrel\swrel\' 서버에서 받을 수 있지만, firmware 의 경우 회사 정책에 의해 아무나 다운로드 할 수 없고, 특정한 프로그램과 계정 권한이 부여 되어야 한다.
다운로드 및 빌드에 대한 내용은 [Firmware 빌드하기] 문서를 참고하기 바란다.

수정할 파일은 src/dot11n/dot11n.c 이다.

void  dot11nFuncInit(cm_interface_t *intfPtr)
{
    memset((void*)&intfPtr->HtTxCap, 0x00,
            sizeof(intfPtr->HtTxCap));
 
    memset((void*)&intfPtr->HtTxInfo, 0x00,
            sizeof(intfPtr->HtTxInfo));
 
    memset((void*)&intfPtr->HtTxCap_5G, 0x00,
            sizeof(intfPtr->HtTxCap_5G));
 
    memset((void*)&intfPtr->HtTxInfo_5G, 0x00,
            sizeof(intfPtr->HtTxInfo_5G));
 
 
    intfPtr->HtTxCap.ShortGI20MHZ      = 1;
    intfPtr->HtTxCap.ShortGI40MHZ      = 1;            // 추가
    intfPtr->HtTxCap.SuppChanWidth     = 1;           // 추가 
    intfPtr->HtTxCap_5G.ShortGI20MHZ   = 1;
    intfPtr->HtTxCap_5G.ShortGI40MHZ   = 1;
    intfPtr->HtTxCap_5G.SuppChanWidth  = 1;
 
    memset ((void*)&intfPtr->HtInfoData ,0x00,
            sizeof(intfPtr->HtInfoData));
}

위와 같이 수정 후, 빌드 하여 확인해보자. 드라이버와 firmware 를 올린 후에, 아래의 명령어로 값이 변경되었는지 확인하자.

#mlanutl mlan0 httxcfg
HT Tx cfg:
 BG band: 0x00000062
   A band: 0x00000062
  • computer/marvell/2.4ghz_에서_ht40_enable_하기.txt
  • Last modified: 4 years ago
  • by likewind