달력

11

« 2019/11 »

  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

본인의 PC환경 : Win7 x64, visual Studio 2015 community 사용


<0> 해당 라이브러리 라이선스 : MPL2

<1> 소스 다운로드

     1) 다음의 경로에서 Eigen 소스코드 압축 파일을 다운로드 받는다. http://eigen.tuxfamily.org

     2) 최신판 Eigen 3.3.3을 다운 받고, 적당한 곳에 압축을 풀어 저장한다.

<2> 코딩

     1) Visual Studio 프로젝트 속성에 포함 디렉토리에 Eigen 다운로드 폴더를 지정한다.

     2) 아래와 같이 샘플 프로그램을 만들어 실행한다.


#include <iostream> #include <Eigen/Dense> #define PI 3.14159265359 using namespace Eigen; using namespace std; int main() { MatrixXd m1 = MatrixXd(8, 8); MatrixXd m2, m3; //8*8행렬 m1에 값을 넣어줍니다. double* alpha = new double[8]; for (int i = 0; i < 8; i++) { if (i == 0) alpha[i] = 1. / (2.*sqrt(2)); else { alpha[i] = 0.5; } } for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { m1(i,j) = alpha[i] * cos((PI*(2.*j + 1)*i) / 16); } } delete alpha; m2 = m1.transpose();//m2에 m1을 transpose한 값을 넣어줍니다. m3 = m1*m2;//m3에 m1과 m2를 곱한 값을 넣어줍니다. cout <<"m1"<<endl<< m1 << endl <<"m2"<<endl<< m2 << endl <<"m3"<<endl<< m3 << endl;//출력! return 0; }


<번외> CMake를 사용한 특이한 방법

     개발 프로젝트에 Eigen 소스코드를 포함시켜 어플리케이션을 개발할 수 있다. 하지만, 컴파일 시간을 단축시키기 위하여 사전에 라이브러리로 만들어 놓고 사용하면 좋을 것 같지만, Eigen 라이브러리는 템플릿이 전개하여 사용하기 때문에 라이브러리화할 수 없다.


     1) CMake를 다운받아 설치한다. https://cmake.org/

     2) CMake를 실행하여 아래와 같이 경로를 지정한다.

Where is the source code: C:\eigen-eigen-67e894c6cd8f (소스 파일 경로)

Where is build the binaries: C:\eigen-eigen-67e894c6cd8f\build (빌드가 저장될 경로)  

     3) [Configure]를 누르고 타겟으로 "Visual studio 14 2015"를 선택한다. "Visual studio 14 2015 ARM", "Visual studio 14 2015 Win64"가 있었으나, ARM은 CPU 코어 모델이 인텔이기에 ARM은 선택하지 않았고, Win64는 64비트 전용 라이브러리만 생성할 것 같아서 선택하지 않았다.

     4) 아래 설정을 확인한다.

C:\Program Files (x86)\Eigen3

​     5) Generate를 눌러 솔루션이 나오는지 확인한다.

    6) Open Project 버튼을 누르던가, C:\Program Files (x86)\Eigen3 경로에 솔루션 파일 Eigen3.sln을 열도록 한다.

    7) INSTALL 프로젝트를 빌드하면 C:\Program Files (x86)\Eigen3 경로로 소스 파일이 복사된다.

Posted by 공장장 코딩스미스

댓글을 달아 주세요

3.2.3. USB 2.0 debug cable


   디버그 가능한 USB 2.0 전용 Cable입니다일반적인 USB 2.0 케이블로는 환경 구축이


   불가능하고 별도의 물리적인 디버그 기능을 가지고 있는 장치를 포함한 디버그 전용


   케이블이 필요합니다해당 장치의 모습은 아래와 같습니다.


 


 


 


   위 그림에서 보이는 2개의 케이블을 파란색 장치에 연결한 뒤에 최종적으로 Target


  Host를 연결하는 형식입니다해당 제품명은 보통 ‘USB 2.0 Debug Cable’로 불립니다.


  해당 제품은 아래의 링크에서 구매할 수 있습니다가격이 만만치 않다고 느껴진다면


  다른 디버깅 방법을 추천합니다.


 


http://www.semiconductorstore.com/cart/pc/viewPrd.asp?idproduct=12083


 


3.3. Target PC 설정


 3.3.1. 디버그 가능한 포트 찾기


     디버그 가능한 포트를 확인하기 이전 Target 머신의 USB 2.0 호스트 컨트롤러가 디버깅


     모드를 지원하는지 여부를 알아내야 합니다. UsbView 툴을 사용하여 아래 그림과 같이


     확인할 수 있습니다아래 그림의 의미는 해당 호스트 컨트롤러에서의 디버그 포트는


     2번 포트임을 나타냅니다.


     


     


 


     USB View를 활용하면 아래의 그림과 같이 USB 호스트 컨트롤러 – Root Hob – Port의 계층을


     확인할 수 있는데위 에서 확인하기로 2번 포트에 대한 정보를 직접 확인해도 디버그가


     가능한 포트임을 확인할 수 있습니다. (Window 버전마다 보여지는 정보가 달라 질 수가


     있습니다.)


 


 


 


     UsbView 툴은 장치가 부착되면 아래와 같이 표시가 바뀌게 됩니다이러한 사실을


     이용하면 Target 머신의 수많은 USB 포트 중 어떤 포트가 디버그 가능한 포트인지 쉽게


     확인할 수 있습니다.


 


 


 


     마지막으로 기억 해 두어야 할 것이 한 가지 있습니다현재 내가 사용할 디버그 포트에


     해당하는 호스트 컨트롤러의 위치를 기억해야 합니다확인 하기 위해서 USB 2.0 Debug


     Cable이 연결되어있는 포트와 그 포트에 해당하는 호스트 컨트롤러를  USB View로 확인


     합니다.


 


 


 


    호스트 컨트롤러의 이름을 기억하고 이에 해당하는 호스트 컨트롤러의 현재 상태를


    확인하기 위해 윈도우즈 장치관리자를 이용합니다.


 


 


 


   해당 호스트 컨트롤러를 우클릭 후 속성 메뉴을 선택합니다.


 


 


 


      위와 같은 화면이 나타나는데 빨간 테두리의 내용을 잘 기억해 둬야 합니다. (0, 29, 0)


 


 3.3.2. 부팅 옵션 설정


    Target 머신이 디버그 가능한 상태로 부팅되기 위해서 명령 프롬프트를 관리자 권한으로


    실행하고 아래 박스에 있는 명령을 입력해야 합니다.


 




 


<Windows 7or later>

bcdedit /debug on

bcdedit /dbgsettings usb targetname:<any-name>

bcdedit /set {dbgsettings} busparams a.b.c (a,b and c is decimal)

<Windows Vista>

bcdedit /debug on

bcdedit /dbgsettings usb targetname: <any-name>

bcdedit /set {current} loadoptions busparams=x.y.z (x,y and z is hexadecimal)


 


    위 박스에 있는 명령을 입력할 때 Windows Vista Windows7 이상의 버전에서 서로


    차이점이 있습니다. targetname:<any-name>  <any-name>은 기억하기 쉬운 임의의


    문자열을 입력합니다. busparams에 해당하는 값으로는 3개의 정수값을 입력해야 하는데,


    3.3.1 에서 확인한 디버그 포트에 해당하는 호스트 컨트롤러의 위치를 장치관리자를 통해


    파악했었습니다이 값을 형식에 맞게 기입하면 됩니다현재 예제에서는 Windows7


    기준으로 입력하면 아래 박스와 같습니다.


 


bcdedit /debug on

bcdedit /dbgsettings usb targetname:usbdebug

bcdedit /set {dbgsettings} busparams 0.29.0


 


   Windows Vista일 경우 현재 예제에서는 아래와 같이 입력합니다.


 


bcdedit /debug on

bcdedit /dbgsettings usb targetname:usbdebug

bcdedit /set {current} loadoptions busparams=0.1d.0


 


  위와 같이 입력한 후에 재부팅 하면 Target 머신의 환경 설정은 완료된 상태입니다.


3.4. Host PC 설정


 3.4.1. Host Target화 방지


   Host 머신이 USB Debugging Target이 되면 안되기 때문에 명령 프롬프트를 관리자 권한


   으로 실행하고 아래 박스의 명령을 입력한 후 재부팅 합니다.


 


bcdedit /debug off


 


 3.4.2. USB 2.0 Debug Cable 드라이버 설치


   Host 머신에서는 USB 2.0 Debug Cable 드라이버 설치가 필요합니다장치가 Host 머신에


   장착되면 기본적으로 드라이버 설치에 실패하게 됩니다그래서 수동으로 드라이버를


   설치해야 합니다우리는 이전에 항목 1.3. 에서 기본적인 Host 환경 구축을 위해서


   Windows Driver Kit 8.1 을 설치했었는데 설치를 완료하면 아래의 경로에서 USB 2.0 Debug


   Cable 드라이버 설치를 위한 inf파일을 찾을 수 있습니다드라이버 설치를 위해 아래의


   박스를 참고하십시오.


 


64비트 운영체제를 사용하신다면 아래의 경로를..

C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\usb\usb2dbg.inf

 

32비트 운영체제를 사용하신다면 아래의 경로를..

C:\Program Files\Windows Kits\8.1\Debuggers\x86\usb\usb2dbg.inf


 


 3.4.3. Visual Studio 2013 환경 설정


    Visual Studio 2013에서 그림과 같이 DRIVER > Test > Configure Computers.. 클릭합니다.


 


 


    


아래의 그림과 같은 화면이 나타나면 ‘Add New Computer’ 버튼을 클릭합니다.


 


 


 


    아래의 그림과 같은 화면이 나타나면 Target 머신의 컴퓨터 이름을 적습니다컴퓨터 이름을


    확인하는 방법은 장치관리자에서 확인할 수 있습니다.


 


 


     


 현재 Target 머신의 이름은 ‘jh_win8_32-pc’ 입니다이제 컴퓨터 이름을 알아 냈으니 아래와


 같이 설정하고 ‘Next>’ 버튼을 클릭합니다그러면 아래와 같은 화면이 나타나는데,


 항목 3.3.1 에서 Target 머신의 USB 호스트 컨트롤러의 정보 값을 알아 냈었고 그 값을


 항목 3.3.2 에서 부팅 설정 변경을 하면서 이용했었습니다.  


 


 


 


 Target 머신에서 설정한 빨간 테두리의 값을 기준으로하여 아래와 같이 입력하고


 ‘Next>’ 버튼을 클릭합니다.


 


 


 


 정상적으로 설정되어 진행되었다면 아래와 같이 Target 머신에 접근합니다.


 Target 머신의 사용자 계정 이름과 비밀번호를 입력하고 ‘확인’ 버튼을 누릅니다.


 


 


 


 로그인에 성공했다면 Target 머신이 재부팅 되고, Target 머신이 디버깅 환경을 구축하기 위해


 필요한 프로그램을 설치하기 시작합니다모든 설정이 완료되면 아래와 같은 그림과 같은


 상태가 됩니다. ‘Next>’ 버튼을 클릭합니다.


 


 


 


  최종적으로 Visual Studio 2013에서 원격 디버깅을 위한 Target 머신의 등록 상태를


  표시해줍니다. ‘Finish’ 버튼을 누르고 완료합니다.


 


 


 


 


4. USB 3.0 Debug Cable 이용하기


4.1. 소개


  USB 3.0 Debug Cable USB 2.0 Debug Cable 환경 설정 방법과 매우 유사합니다.


  USB 2.0 Debug Cable을 활용하는 방법보다 상대적으로 전송 속도가 빠른 장점이 있습니다.


  그리고 USB 2.0 Debug Cable보다 값이 저렴한 것이 특징입니다.


 


4.2. 준비물 및 요구사항


 4.2.1. Target 머신(Debuggee)


   USB 3.0 호스트 컨트롤러가 장착되어 있어야 하며 이 debugging 기능을 지원할 수 있어야


   합니다아래의 그림은 윈도우즈 장치관리자에서 USB 3.0 Host Controller(XHCI)


   장착되어 있음 나타내고 있습니다.


 


 


 


 4.2.2.  Host 머신(Debugger)


   마찬가지로 Host 머신에서도 USB 3.0 호스트 컨트롤러가 장착되어 있어야 합니다.


 


 4.2.3. USB 3.0 Debug Cable



 


 


 


   일반적인 USB 3.0 A to A Cable은 디버깅 용도로 사용이 불가능합니다따라서 디버깅


   용도로 제작된 USB 3.0 A to A Debug Cable을 사용해야 하는데일반적인 USB 3.0 스펙을


   준수하여 제작된 케이블과는 다릅니다전원을 공급받기 위한 1(VBUS) 라인과 USB 2.0


   하위 호환을 위해서 가지고 있는 및 2(Data-), 3(Data+) 데이터 라인이 제외되어 있는


   것이 특징입니다해당 제품은 아래의 링크에서 구매 가능합니다.


 


http://www.datapro.net/products/usb-3-0-super-speed-a-a-debugging-cable.html


 


4.3. Target PC 설정


  USB 3.0 Cable을 이용한 디버그 환경 설정도 USB 2.0과 매우 비슷합니다우선 USB


  2.0에서 호스트 컨트롤러가 디버깅 모드를 지원하는지 UsbView 툴을 이용해서 Target


  머신의 USB 3.0 호스트 컨트롤러가 USB Debugging Mode를 지원하는지 확인해야 합니다.


  


 


 


   그 다음으로 장치관리자 또는 UsbView 툴을 이용하여 USB 3.0 호스트 컨트롤러의 정보를


   조사합니다. (0, 20, 0)


    



 


 


 


  마지막으로 OS 부팅 설정을 완료하고 재부팅할 수 있도록 합니다이전에 설명했던


  USB 2.0 디버깅 설정과 동일한 방식으로서 아래의 명령을 이용합니다좀 더 자세한 설명은


  항목 3.3.2. 를 참고하시기 바랍니다.


bcdedit /debug on

bcdedit /dbgsettings usb targetname:usbdebug

bcdedit /set {dbgsettings} busparams 0.20.0


 


4.4. Host PC 설정


  항목 3.4  USB 2.0 디버깅의 Host PC 설정 부분과 동일한 방식이므로 해당 항목을 참고


  하시기 바랍니다.   


 


 


5. Network Cable 이용하기


5.1. 소개


 네트워크 케이블을 이용해서 같은 로컬 네트워크 영역에 포함된 Host Target을 연결하는


 방식입니다일반적으로 우리가 인터넷 사용을 위해 사용하는 LAN Cable을 이용하기


 때문에 USB Debug Calbe을 이용하는 것 대비 가격이 매우 저렴하고어디서나 쉽게


 구할 수 있다는 장점이 있습니다하지만, Target PC에 설치된 운영체제가 윈도우즈 8 이상


 버전에서만 환경 설정이 가능하기 때문에 이전 버전의 윈도우즈를 Target으로 하지 못하는


 단점이 있습니다또한환경 설정시 방화벽과 관련된 문제로 인해서 환경 설정이 잘 되지


 않는 경우가 있습니다이런 경우 Target 머신과 Host 머신의 방화벽 설정을 바꿔줘야


 합니다다시 한번 방화벽 문제에 대해서 인지하고 있길 바랍니다.


 


5.2. 준비물 및 요구사항


 


 5.2.1. Target 머신(Debuggee)


   Windows 8 이상의 운영체제가 설치되어 있어야 합니다또한 네트워크 어뎁터가


   디버깅 모드를 지원할 수 있어야 합니다우선 Target 머신에서 사용중인 네트워크 어뎁터의


   VID(vendor id), PID(product id)를 확인하고 해당 VID PID가 아래의 링크에서 명시된


   디버깅 지원 장치 리스트에 포함 되어있는지 확인 합니다.


 


 


   


   위 사진과 같이 장치관리자에서 네트워크 어뎁터에 해당하는 VID PID를 확인합니다.


   그리고아래의 링크에서 위에서 확인한 VID/PID가 지원 리스트에 포함되는지 확인합니다.


 


http://msdn.microsoft.com/en-us/library/windows/hardware/dn337010(v=vs.85).aspx


 


 5.2.2. Host 머신(Debugger)


    Windows XP 이상의 운영체제에서 동작할 수 있으며네트워크 어뎁터가 연결되어 있어야


    합니다.


 


5.3. Target PC 설정


 부팅 모드 변경을 디버그 모드로 설정 하기 위해 Target 머신에서 명령프롬프트를 관리자


 권한으로 실행합니다그리고 아래의 명령을 입력하고 시스템을 재부팅 합니다.


 hostip의 값은 Host 머신의 네트워크 어뎁터에 해당하는 ipv4주소를 입력합니다.


 (Host 머신에서 명령프롬프트에 ipconfig 명령 입력해서 확인합니다.)


 port의 값은 49152~65535 범위 내의 값이 되어야하며로컬 내트워크 내에 다른


 머신에서 사용하지 않는 포트 값으로 선정해야 합니다그리고 Target 머신에 설치된


 네트워크 어뎁터가 2개 이상일 경우에 busparams 값을 셋팅해줘야 합니다. busparams


 값을 확인하려면 장치관리자에서 해당 네트워크 어뎁터에 대한 정보를 확인합니다.


 


 


 


bcdedit /debug on

bcdedit /dbgsettings net hostip:a,b,c,d port:49152~65535

 

//추가적으로 target 머신에 설치된 네트워크 어뎁터가 2개 이상일 경우 아래명령 입력

bcdedit /set {dbgsettings} busparams x,y,z


 


 


 


 위 그림은 명령을 입력한 화면입니다명령을 입력하면 자동으로 키 값이 생성됩니다.


 해당 키 값은 나중에 Host에서 Target으로 접근하는데 필요한 값이라 나중에 활용되므로


 잘 기록해둬야 합니다설정을 완료했으면 시스템을 재부팅 합니다.


 


5.4. Host PC 설정


 Visual Studio 2013 Target 머신을 등록하기 위해서 Visual Studio 2013 상단 메뉴바의


 Driver > Test > Configure Computers.. 를 클릭합니다.


 


 


 


 아래와 같은 창이 나타나면 ‘Add New Computer’ 버튼을 클릭합니다.


 


 


  ‘computer name’의 값으로 Target 머신의 이름을 입력해야  합니다. Target 머신의 이름을


   확인하는 방법은 3.4.3. 항목에 설명되어있기 때문에 생략하겠습니다.  아래와 같이


   설정 후 ‘Next’ 버튼을 클릭합니다.


 


 


   다음 화면이 나타나면 아래와 같이 입력하고 ‘Next’ 버튼을 클릭합니다.


 


 


 


 정상적으로 설정되어 진행되었다면 아래와 같이 Target 머신에 접근합니다.


 Target 머신의 사용자 계정 이름과 비밀번호를 입력하고 ‘확인’ 버튼을 누릅니다.


 


 


 


  다음 화면이 나타나면 Target 머신이 디버기 환경으로서의 역할을 하기 위해 필요한


  프로그램 설치가 진행됩니다과정 중에 Target 머신이 재부팅되기도 합니다.


 


 


 


   설치가 완료되면 아래와 같은 화면이 나타납니다. ‘Next’ 버튼을 클릭합니다.


 


 


 


   다음 화면은 설치가 완료되었고 Target 머신의 상태를 보여줍니다. Visual Studio 2013에서


   Target 머신을 제어할 수 있는 환경설정이 완료되었습니다. ‘Finish’ 버튼을 클릭합니다.


 


 


 


 


6. 자동화 디버깅 환경 구축


6.1. 목표


  마지막으로 Host  머신에서 Visual Studio 2013을 이용하여 작성한 드라이버를 디버그 하면


  자동으로 Target 머신으로 드라이버 패키지를 전송하고 설치하게 할 뿐 아니라 라이브


  디버깅까지 가능하도록 추가적인 환경 설정이 필요합니다.


 


6.2. Visual Studio 2013 환경 설정


   6.2.1. 빌드 가능한 드라이버 프로젝트 열기


     항목 1.3. 에서 우리는 빌드 가능한 드라이버 프로젝트를 확보 했었습니다.


     Visual Studio 2013에서 미리 확보한 빌드 가능한 드라이버 프로젝트를 엽니다.


 


   6.2.2. 드라이버 패키지 설정


     빌드 가능한 드라이버 프로젝트가 열린 상태에서 Visual Studio 상단 메뉴 중


     DEBUG > package Properties…를 클릭합니다.


 


     


 


     드라이버 페키지를 디버깅 하기 위한 수단을 설정해야 합니다이전에 우리는 Visual


     Studio에서 Target 머신에 접근 가능하도록 설정/등록 했었습니다이전에 등록했었던


     Target 머신을 디버깅에 이용할 수 있도록 아래의 그림과 같이 설정해야 합니다.


    


     


그리고 드라이버를 Target 머신에 전송하고 전송한 드라이버를 자동으로 설치할 수 있도록


설정할 수 있습니다자세한 설명은 아래 그림을 참고합니다. Driver Installation Options에서


전송한 드라이버를 자동 설치 여부를 결정할 수 있고자동으로 설치 할 경우 어떠한 방식으로


설치 할 것인지 설정할 수 있습니다.


기존에 설치했던 드라이버에 다른 장치가 매칭 될 수 있도록 하드웨어 아이디를 추가할 수도


있고별도의 스크립트를 통해 드라이버를 설치할 수도 있습니다자세한 내용은 아래의


링크에서 확인할 수 있습니다자신이 원하는 옵션으로 설정을 완료하면 ‘확인’ 버튼을


클릭합니다.


 


http://msdn.microsoft.com/en-us/library/windows/hardware/hh454834(v=vs.85).aspx


 



 


 


   6.2.3. 원격 커널 디버깅 실행


    현재 Visual Studio 2013에 열려있는 드라이버 프로젝트를 디버깅 합니다.


 


 


 


    디버깅이 진행되면 아래와 같은 화면이 나타나면서 Target 머신에 드라이버 패키지를 전송


    합니다. Target 머신에 자동으로 설치 될 수 있도록 설정 해둔 상태라면 Target 머신에서는


    드라이버 설치를 시도합니다.


 


 


 


   우리가 전송한 드라이버 패키지는 기본적으로 Target 머신의 C:\DriverTest\Drivers\ 경로에


   저장 됩니다만약 우리가 자동으로 드라이버를 설치하도록 설정하지 않았다면 독자분들이


   직접 해당 경로의 드라이버 패키지를 수동으로 설치할 수 있습니다.


 


   6.2.4. 간단한 사용 방법 확인


    디버깅이 진행 중이면 아래의 그림과 유사한 화면의 Visual Studio 구성을 확인할 수


    있습니다빨간 테두리 안에 인터페이스로 Target 머신의 동작을 정지/재개 할수 있습니다.


    커널 디버깅을 진행하고 있기 때문에 일시정지 버튼을 누르면 Target 머신의 동작은


    멈춥니다참고로 Visual Studio 2013에서 사용하는 커널 디버거는 WinDBG를 합니다.


    따라서 이미 WinDBG의 경험이 있는 독자분들은 쉽게 제어할 수 있을 것이라 생각합니다.


 


 


 


위와 같은 흰색 바탕의 인터페이스에서 직접 여러가지 명령어를 입력할 수 있을 뿐 아니라


Call Stack, Memory 정보를 확인할 수 있는 인터페이스를 활용할 수도 있습니다.


그리고 아래 그림과 같이 직접 해당 프로젝트의 소스코드 파일에서 Break Point를 설정할 수


있습니다자세한 인터페이스 셋팅과 활용 방법은 해당 칼럼 주제인 ‘환경 설정과 거리가


멀기 때문에 생략하겠습니다.

Posted by 공장장 코딩스미스

댓글을 달아 주세요

1. 소개


 


 이번 칼럼에서는 커널모드 윈도우즈 드라이버 개발을 위한 커널 디버깅 환경 구축 방법에


대한 소개입니다이 글의 목적은 우리가 익히 알고 있고 익숙한 통합 개발환경(IDE)


‘Microsoft Visual Studio 2013’ WIndows Dirver Kit 8.1을 이용한 커널 라이브 디버깅


환경을 구축 해 보는 것입니다최종적으로 이 글의 설명대로 환경 구축이 완료되면 아래의


링크의 동영상과 같은 개발 환경을 이용할 수 있게 됩니다.


 


http://msdn.microsoft.com/en-us/library/windows/hardware/ff554672(v=vs.85).aspx


 


칼럼을 쉽게 이해하려면 1항목을 읽으시고자신이 원하는 디버깅 방법을 선택해서(2~5 항목


중 하나읽으신 다음 마지막으로 자동화 디버깅 환경 구축(6번 항목)에 대해 읽으시는 것을


추천합니다.


 


1.1. 디버그 그리고 디버거


 이번 칼럼에서는 디버그(Debug)에 관련된 내용을 소개 하고자 합니다. Wikipedia에 정의된


디버그의 정의는 아래와 같습니다.


 


디버그(공학: debug), 디버깅 (공학: debugging) 혹은 수정은 컴퓨터 프로그램의 정확성이나 논리적인 오류(버그)를 찾아내는 테스트 과정을 뜻한다디버깅(debugging), 수정이라고도 한다.


 


 매우x100 뛰어난 천재 개발자가 아닌 이상 프로그램을 처음부터 논리적으로 완벽하게


작성하기란 매우 힘든 일이라 생각됩니다논리/시간적 요인 뿐 아니라 여러가지 외적인  


요인으로 인해서 버그가 발생하는데 개발자가 이 모든 상황을 예측하기란 매우 힘든 일입니다.


예상하기 힘든 버그를 해결 하기 위해 많은 개발자들은 디버그 작업을 하는데이 디버그는 항상 같이 다니는 친한 친구가 있습니다바로 디버거(Debuger)입니다마찬가지로 Wikipidia에 정의된 내용을 인용해봤습니다.


 


디버거(공학: debugger)는 디버그를 돕는 도구이다디버거는 주로 원하는 코드에 중단점을 지정하여 프로그램 실행을 정지하고메모리에 저장된 값을 살펴보며실행을 재개하거나코드를 단계적으로 실행하는 등의 동작을 한다고급 디버거들은 메모리 충돌 감지메모리 누수 감지다중 스레드 관리 등의 기능도 지원한다.


 


 위 정의대로 프로그래머가 가질 수 있는 최고의 무기 중 하나로 느껴지지 않나요?


무릇 무협의 고수가 무기를 잘 활용해 무림을 재패하는 것과 같이 개발자가 디버거라는


무기를 잘 활용 하려고 노력하는 것은 고수가 되기 위한 하나의 길이라 생각합니다.


 


1.2. 커널 디버깅 조건


 커널모드에서 동작하는 프로그램을 라이브 디버깅 할 경우통상적인 경우에는 2대의 머신을


활용하게 됩니다우리가 커널 모드 프로그램을 라이브 디버깅하는 상황을 상상하십시오.


그리고 의심스러운 코드에 직접 설정한 중단점에 의해서 Break가 걸린 상황을 상상해


보십시오그렇다면커널의 동작이 멈추면서 System이 멈춰버리는 상황을 떠올렸을 것이라


믿습니다앞선 상황이 잘 이해가 됬다면 왜 2대의 머신이 필요한가에 대해서도  이해할 수


있을 것 입니다저는 이 2대의 머신을 구별하고 싶습니다.


 


커널모드 프로그램이 동작하고 있는 머신을 디버기(Debuggee)라고 하겠습니다그리고디버거를 이용하며 디버기를 관찰하고 있는 머신을 디버거(Debugger)라고 하겠습니다.


 


굳이 이렇게 구별하는 이유는 차 후에 등장할 많은 설명들을 쉽게 하기 위해서 입니다.


때로는 좀 더 쉬운 이해를 위해  디버기를 타겟(Target), 디버거를 호스트(Host)라고


하겠습니다.


 


1.3. Host 기본 환경 구축


 우선, Microsoft Visual Studio 2013(VS2013)을 설치해야 합니다만약 독자가 학생일 경우


정식 버전을 Microsoft Dream Spark에서 무료로 제공 받을 수 있습니다. Dream Spark 혜택에


관한 구체적인 내용은 이번 주제와는 거리가 멀기 때문에 생략하도록 하겠습니다.


그 다음 준비해야 될 것은 WDK 8.1(Windows Driver Kit 8.1)을 설치해야 합니다. WDK 8.1


Update는 아래의 링크에서 제공하고 있습니다해당 업데이트를 하면 기존에 설치된


VS2013 WDK 기능이 추가됩니다. VS2013을 이용한 드라이버 개발엔 필수적입니다.


 


해당 링크에서 Visual Studio 2013  WDK8.1 Update를 제공 받을 수 있습니다.


http://msdn.microsoft.com/en-us/windows/hardware/hh852365.aspx


 


여기서 한 가지 주의해야 될 점을 위 링크에서도 명시하고 있는데 그 내용은 아래와 같습니다.


 


Important: Before installing WDK 8.1 Update, you need to install Visual Studio 2013.  …..


 


즉 WDK 8.1 설치하기 전에 반드시 먼저 VS2013을 설치해야 된다는 내용입니다해당


내용을 잘 파악해서 여러분들이 시간 낭비 하는 일이 없었으면 좋겠습니다.


 


위의 과정을 정확이 따라 설치하면 VS2013에 확장된 Driver 개발 메뉴와 기능들을 확인할 수


있는데 가장 큰 특징 중 하나는 상단 메뉴바에 ‘Driver’ 메뉴가 있는 것이 특징입니다.


 



 


 


 


그리고, Windows Driver Project를 생성할 수 있어야 합니다상단 메뉴를 이용하여 새로운


Project를 생성할 수 있습니다. File > New > Project.. 를 선택하고 생성 가능한 프로젝트


종류에 Windows Dirver가 존재하는지 확인 해야 합니다.


 


 


 


 


 


 


 


 


 


 


 


 


 


 


위와 같은 환경이 구성되어 있다면마지막으로 VS2013에서 빌드 가능한 윈도우즈 드라이버


프로젝트를 확보해야 합니다빌드 가능한 드라이버 코드가 없다면 아래의 절차를 따라


Sample Project를 생성합니다이 과정은 차후에 커널 디버깅 환경이 잘 구성되었는지


확인하기 위해서 필요한 작업입니다.


 


 


 


새로운 Project를 생성할 때 온라인에서 Sample Project를 가져와서 VS2013에서 빌드


가능한 환경을 그대로 생성할 수 있습니다자신이 원하는 드라이버 샘플을 하나 가져와서


새로운 샘플 Project를 생성하고 빌드가 가능한지 테스트 해봅니다.


 


1.3. Target 기본 환경 구축


 1.3.1. Target 머신 보안 부팅 끄기


  아래의 링크를 참고하면 어떻게 보안 부팅모드를 사용안함 설정할 수 있는지 자세한 내용을


  참고할 수 있습니다보통 컴퓨터 최초 부팅시 BIOS 설정에서 보안 부팅옵션 관련 탭에서


  ON/OFF할 수 있습니다.


   


http://technet.microsoft.com/ko-kr/library/dn481258.aspx


 


 1.3.2. Target 머신에 ‘WDK Test Target Setup’  설치하기


  ‘WDK Test Target Setup’의 경로는 Host 머신에 WDK 8.1을 설치했다면 Host 머신에서


  찾을 수 있습니다기본적으로 ‘WDK Test Target Setup’의 경로는 아래 박스를 참고하십시오.


  


Target 머신이 x64 플렛폼일 경우 Host 머신의 아래 경로에서 설치 파일을 찾습니다.

 

C:\Program Files (x86)\Windows Kits\8.1\Remote\x64\WDK Test Target Setup x64-x64_en-us.msi 또는

C:\Program Files\Windows Kits\8.1\Remote\x64\WDK Test Target Setup x64-x64_en-us.msi

 

Target 머신이 x86 플렛폼일 경우 Host 머신의 아래 경로에서 설치 파일을 찾습니다.

 

C:\Program Files (x86)\Windows Kits\8.1\Remote\x86\WDK Test Target Setup x86-x86_en-us.msi 또는

C:\Program Files (x86)\Windows Kits\8.1\Remote\x86\WDK Test Target Setup x86-x86_en-us.msi


   


   아래와 같이 Target 머신에 설치가 잘 되어있는지 확인할 수 있습니다.   


 


 


 


 1.3.3. Target 머신이 Windows N 또는 KN 버전일 경우


       Windows Media Feature Pack을 설치해야 합니다아래의 링크를 통해 설치 파일을


       다운로드하고 Target PC에 설치합니다.


 


Media Feature Pack for N and KN versions of Windows 8.1 일 경우

http://www.microsoft.com/ko-kr/download/details.aspx?id=40744

 

Media Feature Pack for N and KN versions of Windows 8 일 경우

http://go.microsoft.com/fwlink/p?linkid=329738

 

Media Feature Pack for N and KN versions of Windows 7 일 경우

http://www.microsoft.com/ko-kr/download/details.aspx?id=16546


 


 1.3.4. Target 머신이 Windows Server 운영체제인 경우


    6.2.2. 항목에서 ‘WDK Test Target Setup’을 설치하면 ‘C:\DriverTest’ 폴더가 생성되는데,


    해당 폴더의 보안 속성을 바꿔줘야 합니다. ‘Authenticated Users’ 그룹에 모든 권한을


    부여해야 합니다.


 


     


 


 1.3.5. Target 머신 보안 설정 변경


    제어판 -> 관리도구 -> 로컬 보안 정책을 실행합니다우측 메뉴들 중 로컬 정책->


    사용자 권한 할당을 누르면 아래의 화면이 나타나는데 빨간 박스의


    ‘네트워크에서 이 컴퓨터 엑세스 거부 Guest가 설정되어 있다면 제거합니다.


    ‘그리고 네트워크에 이 컴퓨터 엑세스에서 ‘Guest’또는  ‘Everyone’을 추가합니다.


 


 


 


1.4. UsbView Tool 준비


  UsbView 툴은 WDK 8.1 업데이트를 설치하면 같이 포함되어 있는 툴 입니다.


  해당 툴을 이용하면 현재 내 컴퓨터에 연결된 USB 및 연관 장치들을 계층적(Tree) 형태로


  보여줍니다. USB Debugging 환경을 구축할때 해당 툴을 이용하면 매우 유리하므로


  따로 기억하기 쉬운 곳에 저장해 놓는 것을 추천합니다. USB Cable을 이용하여 디버그


  환경을 구축하지 않으실 분은 설치하지 않으셔도 됩니다.


  


C:\Program Files (x86)\Windows Kits\8.1\Tools\x86\usbview.exe // x64 운영체제 기준

C:\Program Files\Windows Kits\8.1\Tools\x86\usbview.exe // x86 운영체제 기준


 


 


2. Target – Virtual Machine(VM)


2.1. 소개


가상 머신을 디버기로 활용하여 어떻게 커널 라이브 디버깅 환경을 구축할 수 있는지


소개하겠습니다가상 머신을 활용하는 방법은 여러가지로 장점이 많습니다당장 생각나는


장점은 프리웨어 가상머신 소프트웨어를 이용할 경우 환경 설정을 위해서 비용이 일절 들지


않습니다그리고 별도의 Test PC를 가지고 있지 않는 상황에서도 환경 구축이 가능 하기


때문에 많은 취미 개발자들에게 환영 받는 방법이라고 생각합니다또한 디버기가 스스로


작성한 실험적인 드라이버로 인해 복구 불가능한 상태에 빠져도 쉽게 복구할 수 있는 장점이


있습니다.


 


2.2. 준비물 및 요구사항


 


 2.2.1. Virtual Machine(VM) 에뮬레이터 설치 후 VM OS 설치


  VM 에뮬레이터의 대표적인 소프트웨어로 VMware, Virtual Box가 있습니다. Host 머신에서


  Target 머신이 가상화 되어 동작할 수 있도록 Host머신에 VM 에뮬레이터를 설치하고


  자신이 테스트하고자 하는 운영체제를 설치합니다필자는 무료로 제공되는 소프트웨어인


  ‘VMware Player’를 사용했고, VM에 운영체제는 Windows7-x86을 설치했습니다.


  VM에 운영체제까지 설치되면 해당 VM도 하나의 Target 머신의 역할이 가능합니다.


 


 


 


 


2.3. Target PC 설정


 2.3.1. VM Virtual Serial Port 생성


  VM 에뮬레이터를 실행하고 우리가 디버그 하고자하는 Target 머신을 설정합니다.


  (아래의 그림 참고)


 


  


 


새로운 가상 Serial Port를 생성하기 위해서 Add… 버튼을 클릭합니다.


 


 


 


Serial Port를 선택하고 Next 버튼을 클릭합니다.


 


  


 


  다음 화면이 나타나면 ‘Output to named pipe’를 선택하고 ‘Next’ 버튼을 클릭합니다.


 


 


 


  다음과 같은 화면이 나타나면아래와 같이 입력합니다빨간테두리의’kdbg’


  자신이 기억하기 쉬운 이름으로 대체하셔도 됩니다. ‘\\.\pipe\???’ 형태의 포멧은


  그대로 지키는 것을 권장합니다설정을 완료하시면 아래의 ‘Finish’ 버튼을 클릭합니다.


 


 


 


  새로운 가상의 Serial Port가 생성되면 아래와 같이 VM Setting 화면에서 우리가 추가한


  Serial Port를 확인할 수  있습니다마지막으로 해당 Serial Port를 이용하여 데이터 통신을


  하는 방식으로 Polling 방식을 이용하기 위해 ‘Yield CPU on poll’ 옵션을 반드시 체크합니다.


 


 


 


 


 2.3.2. Target 머신 운영체제의 부팅 옵션 변경


   우선 ,VM에서 2.3.1. 에서 추가한 ‘Serial Port 2’가 연걸된 상태인지 확인하고연결되지


   않다면 연결합니다.


 


 


 


Target Debuggee의 역할을할 수 있도록 설정하기 위해서 명령 프롬프트를 관리자


권한으로 실행 시킵니다.


 


 


 


  명령프롬프트에 아래의 명령을 입력하여 부팅 옵션을 변경한 다음 재부팅 합니다.


bcdedit /debug on

bcdedit /dbgsettings serial debugport:2 baudrate:115200

shutdown -r -t 0


 


 


 


 


2.4. Host PC 설정


 Visual Studio 2013을 실행시키고 VM을 디버기로 활용하기 위해 등록 및 환경 설정이


 필요합니다. Visual Studio 2013  상단 메뉴바에 ‘Driver > Test > Configure Computers…’


 메뉴를 클릭합니다. (해당 메뉴를 이용하려면 Visual Studio 2013 WDK 8.1 업데이트가


 되어 있어야 합니다.)


 


 


 


아래와 같은 화면이 나타나면 ‘Add New Computer’ 버튼을 클릭합니다.


 



 


  아래의 그림과 같은 화면이 나타나면 Computer Name Target 컴퓨터의 이름을 입력


  해야합니다해당 이름을 확인하기 위해서 Target 머신에서 장치관리자를 실행시킨 후


  아래의 그림과 같이 컴퓨터의 이름을 확인해야 합니다. (WIN-NUOT6SGIDR6)


  


 


 


   이름이 확인되면 아래와 같이 설정하고 ‘Next>’ 버튼을 클릭합니다.


 


 


 


   다음과 같은 화면이 나타나면 아래와 같이 입력하고 ‘Next>’ 버튼을 클릭합니다.


   여기서 Pipe Name에 해당하는 값으로는 우리가 2.3. 항목에서 Target 머신 설정을


   했을 때의 값들과 동일하게 기입해야 합니다.  설정을 완료하면 ‘Next>’ 버튼을


   클릭합니다.


 


 


 


  아래와 같은 화면이 나타나는데, Target 머신의 사용자 계정에 로그인하게 되면 Target


  머신에 자동으로 환경 설정을 시작하게 됩니다.


 


 


 


 아래 그림과 같은 화면을 통해서 Target 머신의 환경 설정 진행 상황에 대해 알 수 있습니다.


  Target 머신의 환경 설정이 자동으로 진행되면서 재부팅 하는 모습도 확인할 수 있습니다.


 


 


 


   Target 머신의 설정이 정상적으로 완료되면 아래와 그림과 같은 상태를 확인할 수


   있습니다. ‘Next’ 버튼을 클릭합니다.


 


 


 


   마지막으로 아래 그림과 같이 설정 결과에 대해서 간략하게 표시해 주는 화면을 확인할 수


   있으며, ‘Finish’ 버튼을 클릭하여 완료합니다.


   


 


 


 


3. USB 2.0 Debug Cable 이용하기


3.1. 소개


  USB 2.0 Debug Cable은 소개하는 방법 들 중 가장 비싼 비용으로 환경 구축이 가능합니다.


  또한 통신 속도도 다른 방법에 비해서 크게 뛰어나지 않습니다하지만 usb 3.0을 지원하지


  않는 오래된 머신에서 활용 가능한 장점이 있습니다.


 


3.2. 준비물 및 요구사항


 


 3.2.1. Target 머신(Debuggee)


   Windows Vista 이상의 버전에서만 환경 구축이 가능한 제약 사항이 있습니다.


   USB 2.0 호스트 컨트롤러가 장착되어 있어야 하며 이 호스트 컨트롤러는


   debugging 기능을 지원할 수 있어야 합니다아래의 그림은 윈도우즈 장치관리자에서


   USB Enhanced 호스트 컨트롤러(USB 2.0 호스트 컨트롤러)가 장착되어 있다는 것을


   나타내고 있습니다.  


 


 


3.2.2.  Host 머신(Debugger)


   Windows 2000 이상의 버전에서만 환경 구축이 가능한 제약 사항이 있습니다.


   마찬가지로 Host 머신에서도 USB 2.0 호스트 컨트롤러가 장착되어 있어야 합니다.

Posted by 공장장 코딩스미스

댓글을 달아 주세요