강좌 & 팁
Plx9030카드를 장착한 후, PLX-technologytm으로부터 받은 SDK의 설치와 사용에 대해 알아본다.
우선, PlxSdk는 http://www.plxtech.com/products/sdk/pde으로부터 내려받을 수 있다.
내려받은 파일은 PLX_SDK_Linux_v7_11_Final_2014-03-04.zip이고, linux버젼은 ubuntu-13.10에 설치된 3.10.32이다.
PLX_SDK_Linux_v7_11_Final_2014-03-04.zip을 풀면 다음 파일이 있다.
- Documentation: 설치 및 API사용에 관한 문서들
- PlxSdk.tar
PlxSdk.tar는 Windows/Linux/Dos에서 Plx디바이스를 사용하기 위한
- 드라이버 코드소스
- 라이브러리형태의 API모음
- Sample코드
설치하기 위해 다음을 실행한다.
$ tar -xf PlxSdk.tar
$ pwd
/home/falinux
$ ls -F PlxSdk
Bin/ Driver/ Include/ Makefile Makefiles/ PlxApi/ Samples/
$ ls -F Driver # 드라이버 소스코드
Makefile Source.Plx6000_NT/ Source.Plx8000_NT/ Source.PlxSvc/ builddriver*
Plx9030/ Source.Plx8000_DMA/ Source.Plx9000/ buildalldrivers*
$ ls PlxApi # Plx라이브러리
Aardvark.c Eep_8000.c Library/ PlxApi.c PlxApiI2cAa.c
Aardvark.h Eep_8000.h Makefile PlxApiDebug.h PlxApiI2cAa.h
$ ls Samples # 샘플 프로그램들
ApiTest/ LocalToPciInt/ NT_Sample/ PlxCm/ PlxDmaSglNoApi/ Shared/
DSlave/ NT_DmaTest/ PLX_Samples.txt PlxDma/ PlxEep/
DSlave_BypassApi/ NT_LinkTest/ PerfMonitor/ PlxDmaPerf/ PlxNotification/
$ ls Bin
Plx_load* Plx_unload* startlog*
** PLX SDK 홈디렉토리 설정
PLX_SDK빌드와 실행을 위해서는 그 소스와 바이너리파일이 있는 위치를 알려주어야 한다.
~/.bashrc파일 하단에 다음 줄을 추가한다.
export PLX_SDK_DIR=/home/falinux/PlxSdk
1. 설치
a) Application빌드
최상위 디렉토리에서 make를 입력하면,
PlxApi의 라이브러리 PlxApi.a와 Samples밑의 각 디렉토리에 있는 테스트/샘플 프로그램들의 빌드를 시작한다.
b) 'Driver'디렉토리로 들어가서,
$ builddriver 9030
9030은 Plx의 DevId(또는 모델?)이다. 가용한 값은
8000n, 8000d, 6000n, 9050, 9030, 9080, 9054, 9056, 9656, 8311, Svc
이다.
빌드결과로 나오는 리눅스모듈은 'Driver/Plx9030'밑에 Plx9030.ko로 있다.
debug-모드의 드라이버(Plx9030_dbg.ko)는 디버깅문을 커널메시지로 많이 내 놓는데, 다음과 같이 만들 수 있다.
$ builddriver 9030 d
2. 사용
빌드된 샘플 프로그램파일은 각 디렉토리의 App밑에 위치한다.
Samples/ApTest밑에 App을 보면, ApiTest라는 이름의 실행파일이 보인다. 이 파일을 실행시키면 Plx드라이버의 기본적인 기능을 테스트할 수 있다.
a) 테스트하기 위해서 일단 드라이버를 로딩하여야 한다.
$ cd Bin
$ sudo ./Plx_load 9030 # Admin권한이 필요하다.
b) cd Samples/ApiTest/App
$ ./AiTest
커널메시지를 보면,
"ERROR - No supported devices found" 라는 메시지가 보인다.
3. 버그?!
이 메시지의 소스에서의 위치는 'Driver/Source.Plx9000/Driver.c:#241'인데,
pGbl_DriverObject->DeviceCount의 값이 0이면 에러로 처리하게 되어 있다.
DeviceCount는 DeviceObject가 attach되면 +1되는 값으로 이전 초기값을 그대로 가지고 있기 때문에, 항상 0이 될 수 밖에 없다.문제를 해결하기 위해서는 #238부터 #244까지를 삭제하여야 한다.
4. 다시 빌드하고 Plx_load를 실행시겼을 때 다음과 같은 메시지가 나온다.
"Probe: -- Unsupported Device --"
이를 해결하기 위해서 다음을 확인하였다.
$ lspci
.....
04:0c.0 Bridge: Device 1c34:9030 (rev 01)
04:0d.0 Bridge: Device 1c34:9030 (rev 01)
04:0e.0 Bridge: Device 1c34:9030 (rev 01)
04:0f.0 Bridge: Device 1c34:9030 (rev 01)
4개의 PCI디바이스에 대한 정보를 보여주고 있다. 각 줄의 0x1c34가 VendorID를 나타내고 있다.
'Driver/Source.Plx9000/Driver.c의 #90~#92의 첫번째값 0x10B5을 0x1C34로 변경해 준다.
또한, 'Include/Plx.h:#64'의 PLX_VENDOR_ID의 값도 변경한다.
5. 다시 Plx_load를 실행한다.
[ 1314.619676] Plx9030: <========================================================>
[ 1314.619678] Plx9030: PLX driver v7.10 (32-bit) - built on May 14 2014 17:51:37
[ 1314.619680] Plx9030: Supports Linux kernel version 3.10.32
[ 1314.619681] Plx9030: Allocated global driver object (f1509840)
[ 1314.619685] Plx9030: Registered driver (MajorID = 248)
[ 1314.619699] Plx9030: --------------------
...........
드라이버가 잘 올라갔고, Device또한 인식되었다.(첨부파일 'plx9030_module_load.txt'참조바람)
6. ApiTest를 실행한다.
PLX SDK API Test
January 20071. 9030 1c34 [b:04 s:0c f:0]
2. 9030 1c34 [b:04 s:0d f:0]
3. 9030 1c34 [b:04 s:0e f:0]
4. 9030 1c34 [b:04 s:0f f:0]
0. CancelDevice selection --> 1
PLX API Test
=================================================
Selected: 9030 1c34 [b:04 s:0c f:0]PlxPci_ChipTypeGet():
Getting PLX Chip Type.......... Ok
Chip type: 9030
Revision : AA첨부파일('ApiTest결과.txt')참조바람
이상으로 Plx9030의 Driver설치와 Test방법에 대해 알아 보았다.