반응형

* 테스트해본 OS: Ubuntu 12.04 LTS (64bit)

* 컴퓨터: 조립PC(Intel Core i7, 16GB RAM), 노트북(Intel Core i5, 4GB RAM)

* OpenWRT version: backfire (10.03.1)

* 장비(액세스 포인트): Buffalo WZR-HP-G300NH



OpenWRT를 라우터/액세스 포인트에 설치할 때, 원하는 대로 소스코드를 고쳐서 올리려면 사용자가 직접 소스코드를 빌드해서 펌웨어 이미지를 만들어야 한다. OpenWRT 소스로부터 펌웨어 이미지를 직접 만들기 위한 교차 개발환경(Cross compile environment) 구축 방법은 아래와 같다.


우선 교차 개발환경을 구축할 컴퓨터에 SVN (Subversion)이 설치되어 있어야 한다. SVN이 없으면 아래와 같이 설치하고, 이미 설치되어 있으면 다음 단계로 넘어간다.

$ sudo apt-get install subversion



개발 환경을 저장하기 위한 적당한 디렉토리를 하나 만들고, OpenWRT 사이트에서 SVN을 통해서 소스(정확히 말하면, 소스코드 다운로드 받기 위한 Makefile 모음)를 받는다. 참고로 이 글에서 이용한 버전은 2014년 2월 기준에서 최신 버전은 아니다. 최신 버전의 이름은 Attitude_Adjuestment (12.09)이며, SVN 주소는 svn://svn.openwrt.org/openwrt/branches/attitude_adjustment 이다.

$ mkdir openwrt

$ cd openwrt

$ svn co svn://svn.openwrt.org/openwrt/branches/backfire


이 명령을 치면 금방 SVN 체크아웃이 끝나게 되는데, 왜냐하면 실제 소스코드를 모두 받지 않았기 때문이다. 용량도 약 37.6MB밖에 안된다. 실제로 소스코드를 받기 위해서는 make 명령을 실행해야 하며, 이 과정은 매우 오래 걸린다. (필자의 노트북을 기준으로 약 1시간) 그리고 make가 끝이 나면 패키지 옵션에 따라 차이가 있겠지만, Buffalo WZR-HP-G300NH 장비를 기준으로 소소한 옵션을 조금 추가해서 빌드했더 약 4.2GB 정도를 차지했다. ;;;


우분투(Ubuntu)를 기준으로 교차 개발환경을 위해 필요한 패키지를 아래와 같이 설치한다.

$ sudo apt-get install build-essential asciidoc autoconf binutils bison bzip2 flex gawk gettext libncurses5-dev libz-dev patch unzip zlib1g-dev


참고로 build-essential과 asciidoc 등을 포함한 몇몇 패키지는 꽤 많은 용량(수백 MB)을 필요로 한다.



SVN을 통해서 내려받은 OpenWRT backfire 소스에서 추가 패키지를 업데이트하고 다운로드받기 위해서 아래와 같은 명령을 수행한다.

$ cd backfire

$ ./scripts/feeds update -a

$ ./scripts/feeds install -a



여기까지 했으면 이제 실제로 소스를 얻어서 빌드를 하기 직전 단계까지 온 것이다. 실제로 소스를 얻고 빌드하는 make 명령을 수행하기에 앞서서 중요한 옵션을 설정할 필요가 있으며, make menuconfig를 통해서 설정할 수 있다.

$ make menuconfig


잠시(수 초~수십 초) 기다리면 콘솔에 아래와 같은 설정 화면이 나타난다.

(make menuconfig 명령어 실행 시의 첫 화면)


중요한 옵션은 Target System과 Target Profile이다. 각각 엔터를 눌러서 진입하면 칩셋과 모델의 목록이 나오는데, 원하는 모델을 선택하려면 키보드 방향키로 해당하는 항목 위에서 스페이스 키 또는 S 키를 누른다.


Buffalo WZR-HP-G300NH모델은 Atheros 계열 칩셋을 써야 하므로 Target System은 Atheros AR71xx/AR7240/AR913x를 선택하였다. Target Profile은 Buffalo WZR-HP-G300NH를 선택하였다.

(Target System과 Target Profile을 WZR-HP-G300NH에 맞게 설정한 화면)



이제 본격적으로 펌웨어 이미지를 빌드할 차례다. 아래와 같은 순서로 명령어를 친다. make에서 가장 시간이 오래 걸린다.

$ make defconfig

$ make prereq

$ make


빌드가 완료되면 backfire/bin/ar71xx/ 디렉토리에서 펌웨어 이미지를 찾을 수 있다. WZR-HP-G300NH의 경우 openwrt-ar71xx-wzr-hp-g300nh-squashfs-tftp.bin 파일을 펌웨어 설치에 이용한다.


Buffalo 액세스 포인트에 OpenWRT 펌웨어 설치 방법 > 추후 작성 예정




반응형
블로그 이미지

Bryan_

,
반응형

(환경) QualNet 5.0.1, Windows 7 64bit, Visual Studio 2008


경험으로 볼 때, 리눅스에서는 gcc에서 디버그 옵션을 지정하기 때문에 별다른 설정 없이 그냥 빌드해도 gdb qualnet 명령으로 디버그가 가능했다. 하지만 윈도우 환경에서는 QualNet Makefile에서 기본 설정으로 디버깅 옵션이 꺼져 있다. 매뉴얼에는 runtime efficiency를 위해서 그렇게 했다고 적혀 있다.


윈도우 환경에서 디버깅 옵션을 켜려면, [QUALNET_HOME]\main\Makefile을 열고 아래와 같이 고쳐 준다.

[QUALNET_HOME]\main\Makefile 중에서...


#DEBUG = /Zi  ---------->  DEBUG = /Zi

OPT = /Ox /Ob2  ---------->  #OPT = /Ox /Ob2


만약 main 폴더 안에 Makefile이 없을 경우, 윈도우 버전 및 Visual Studio 버전별로 호환되는 Makefile 예시가 여러 개 있으니(Makefile-windows-vc8, Makefile-windows-x64-vc9 등) 그 중에서 현재 시스템과 호환되는 파일을 복사해서 Makefile로 이름을 변경한다.


추가로, Visual Studio에서 "빌드 > 솔루션 빌드"를 눌렀을 때 수행되는 Makefile은 위의 것이 아니고 [QUALNET_HOME]\Makefile이다. (Programmer's guide에 적힌 visual studio 연동 방법대로 진행한다면 이 위치에 텍스트파일을 만들게 된다.) 그 파일에서 nmake 명령 뒤에 참고하는 파일 이름이 방금 main 폴더에서 새로 복사해서 만든 Makefile인지 확인할 것. 내용이 아래와 같아야 한다.

[QUALNET_HOME]\Makefile

all:

cd main

nmake -f Makefile

rebuild: clean

nmake -f Makefile

clean:

cd main

nmake -f Makefile clean



그리고 Visual Studio에서 다시 빌드하고 나서 "프로젝트 ---> [QualNet 프로젝트 이름] 속성..."에 들어간다.

왼쪽 메뉴에서 "구성 속성 > 디버깅"으로 들어간다.

작업 디렉터리는 실행하고자 하는 시나리오 config 파일이 있는 폴더 위치,

명령 인수에서는 시나리오 config 파일의 이름을 입력한다.



이제 Visual Studio 메뉴에서 "디버그 > 디버깅 시작(F5)" 으로 특정 시나리오에 대해서 디버그할 수 있다.




반응형
블로그 이미지

Bryan_

,
반응형

QualNet 5.0에서 propagation fading model을 None 대신 Rayleigh, Fast Rayleigh 등 다른 것을 선택하고 시뮬레이션을 돌리면  아래 그림과 같이 "PROPAGATION-FADING-GAUSSIAN-COMPONENTS-FILE is missing" 에러가 발생한다.




이 때는 config 파일을 열어서 "Channel Properties" 영역에 아래와 같이 propagation fading model이 필요로 하는 파일을 명시해 주면 되며, 이것은 퀄넷 설치시 테스트용으로 들어 있는 default 시나리오에서 가져올 수 있다.

PROPAGATION-CHANNEL-FREQUENCY[0] 2400000000

PROPAGATION-MODEL[0] STATISTICAL

PROPAGATION-PATHLOSS-MODEL[0] TWO-RAY

PROPAGATION-SHADOWING-MODEL[0] CONSTANT

PROPAGATION-SHADOWING-MEAN[0] 4.0

PROPAGATION-FADING-MODEL[0] FAST-RAYLEIGH

PROPAGATION-LIMIT[0] -111.0

PROPAGATION-MAX-DISTANCE[0] 0

PROPAGATION-COMMUNICATION-PROXIMITY[0] 400

PROPAGATION-PROFILE-UPDATE-RATIO[0] 0.0

PROPAGATION-FADING-GAUSSIAN-COMPONENTS-FILE [QualNet의 home directory]/5.0/scenarios/default/default.fading



또는 QualNet GUI 환경에서 좌측 상단의 Scenario Properties를 눌러서 나오는 대화상자에서 "Channel Properties"에 들어간 후 맨 아래의 "Specify Gaussian Components File" 메뉴 선택을 Yes로 변경하고 default.fading 파일을 선택해 주면 된다.



반응형
블로그 이미지

Bryan_

,
반응형

QualNet License Server는 윈도우용과 UNIX (Linux)용이 있으며, 윈도우에서는 lmadmin, 유닉스 계열에서는 lmgrd를 통해서 실행된다. 윈도우용 라이센스 서버는 설치 및 실행이 비교적 쉽게 되지만, 리눅스에서는 (Ubuntu desktop 12.04 64bit) 잘 안되는 경우가 더러 있다.


경험상, 리눅스에서 라이센스 서버가 실행되지 않는 경우와 해결 방법을 나열해 보겠다.

(Note: 아래 나열된 경우 외의 문제도 충분히 있을 수 있지만 여기서는 Ubuntu를 새로 설치하고 처음 license server를 실행하는 과정에서 겪는 문제들 위주로만 작성하였다.)


1. 32bit 프로그램을 실행할 수 없는 경우

  lmgrd를 쓰는 소프트웨어가 퀄넷 외에도 MATLAB 등 여럿이 있는 것 같은데, lmgrd가 64bit 프로그램이 있는지는 아직 모르겠다. 아무튼 Qualnet에서는 (정확히 말해서 퀄넷 제조사인 Scalable networks에서는) 32bit 버전의 lmgrd를 제공하고 있다. (2013년 3월 19일 기준)

이로 인해 64bit Ubuntu에서 lmgrd가 "no such file or directory" 메세지를 내면서 실행되지 않는 문제가 있는데, 이 때는 예전 포스팅 (http://skylit.tistory.com/entry/Linux-64bit-%ED%94%8C%EB%9E%AB%ED%8F%BC%EC%97%90%EC%84%9C-32bit%EA%B8%B0%EB%B0%98-%EC%8B%A4%ED%96%89-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%B4-%EC%8B%A4%ED%96%89%EB%90%98%EC%A7%80-%EC%95%8A%EC%9D%84-%EB%95%8C)에서 작성한 것과 같이 64bit Ubuntu에서 32bit 프로그램을 실행하도록 하는 몇 가지 라이브러리를 설치한다.


2. 권한이 제대로 주어지지 않는 경우

  QualNet에서 제공하는 라이센스 서버 설치 매뉴얼대로 따라하면 /usr/qlm/ 디렉토리에 라이센스 서버 프로그램 및 라이센스 파일이 위치하게 되면서 루트, 관리자 권한으로 실행하지 않으면 필요한 임시 파일 생성이나 로그 파일 생성이 안돼서 진행하지 못하는 경우가 있다.

/usr/qlm/linux/ 디렉토리로 가서 "sudo ./qlmd" 또는 "sudo /usr/bin/nohup ./lmgrd -c .. -l ../lmgrd.log -x lmdown" 명령을 수행해서 문제없이 실행되는지 확인해볼 것. 만약 관리자 권한에서 실행이 잘 된다면 리눅스 시작시 자동 실행도 이상없이 되어야 정상이다. (아직 자동 실행이 정상적으로 되는지는 테스트하지 못함...ㅜㅜ)


/usr/qlm/ 디렉토리에서 lmgrd.log 파일이 새로 생성되었다면 라이센스 서버가 정상 실행중임을 의미한다.

반응형
블로그 이미지

Bryan_

,
반응형

QualNet은 라이센스 서버에 접근해서 일종의 토큰 같은 것을 얻어서 시뮬레이션을 수행하고, 시뮬레이션이 끝나면 반환하는 방식으로 동작한다. 라이센스 서버에서는 QualNet을 실행하기 위해서 접근하는 client들의 IP주소를 확인해서, 자기 라이센스의 범위에 해당되는지 (IP 주소의 범위가 143.248.55.* 와 같이 subnet으로 지정됨) 확인해 보고 할당되지 않은 토큰을 넘겨 준다.


QualNet 프로그램에서는 [QUALNET_HOME 디렉토리]/license_dir/ 하위에 있는 .lic 파일을 읽어서 라이센스 서버에 접속하는데, (lic 파일 이름과 내용이 모두 라이센스 서버의 IP 주소로 되어 있음) 이 때 아래와 같은 에러가 발생할 수도 있다.


usera@usera-Linux:~/qualnet/5.0/scenarios/default$ qualnet default.config 

QualNet Version 5.0

QUALNET_HOME = /home/usera/qualnet/5.0

Attempting license checkout (should take less than 2 seconds) ...

Error code:    -8

               Invalid (inconsistent) license key. The license-key and data for

Error message: the feature do no match. This usually happens when a license

               file has been altered

               Follow the instructions posted on the online scalable-

Solution:      networks.com knowledge-base:


               http://www.scalable-networks.com/kb/questions.php?questionid=2


Detailed Report::

checkout failed: Invalid (inconsistent) license key.

 The license key and data for the feature do not match.

 This usually happens when a license file has been altered.

Feature:       qualnet-full

License path:  /home/usera/qualnet/5.0/license_dir/client-143.248.55.121.lic:

FLEXnet Licensing error:-8,544

For further information, refer to the FLEXnet Licensing End User Guide,

available at "www.macrovision.com".


QualNet의 포럼에 올라와 있는 글을 보면 여러 가지 이유로 발생할 수 있다고 나온다.

http://www.scalable-networks.com/snt-support/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=19


그 중에 내가 겪은 문제는 7. Other Common Causes에 해당되는 것으로, /etc/hosts 파일 세팅 문제이다. 추측하기로는, 라이센스 서버와의 문제는 아니지만, QualNet 시뮬레이션을 시작하려고 하는 시점에서 hostname과 IP 주소를 올바로 매칭하지 못해서 라이센스 요건을 충족하지 못하는 것으로 판단하는 것이 아닐까 생각한다.


이 경우 아래와 같이 /etc/hosts 파일을 수정하면 해결된다.

127.0.0.1    localhost.localdomain localhost

ip-address   [my-full-DNS-name] [my-hostname]


참고로 기존의 /etc/hosts 파일에

"127.0.1.1  [my-hostname]"

위와 같은 라인이 있으면 안된다. 해당 라인이 있다면 반드시 삭제할 것.

(저 라인을 남겨둔 채 왜 시키는 대로 했는데도 해결이 안되냐며 한시간 넘게 고민했다 ㅠㅠ)

즉, 호스트네임이 localhost 주소로 매핑되지 않도록 해야 한다.


반응형
블로그 이미지

Bryan_

,