OS/vxWorks VxWorks OS구성 / 개발 방법
  • 728x90
    반응형

     

     

    2013.05.15 VxWorks 강의 정리

     

     

    목차

       

       

      VxWorks OS 구성 이론

        

      • 소프트웨어 개발자의 목적은 위 와 같은 SBC 하드웨어의 회로를 살려서 각 기능들을 수행하는 소프트웨어를 탑제하는 것 이다.

       

       

      • 예를들어 위와 같이 PCB기판을 소프트웨어 엔지니어가 받으면 난감할 수 밖에 없다.

      이러한 하드웨어를 살리기 위해서는 기능이 문제가 아니라 메모리와 모듈들이 제대로 동작하는지가 우선이 된다.

      • SBC는 다행히도 제조사에서 Boot ROM에 BSP 포팅을 해준다.

      • Boot ROM이 실행되고 나면 플래시메모리에 있는 VxWorks Image커널이 동작한다.

      • window NT를 예를 들면 아래와 같은 형태로 구성되어 있다.

       

       

      • VxWorks 에서도 위와 같은 형태로 OS를 만드는 과정을 거쳐야 한다.

      • VxWorks 커널은 WindRiver에서 제공한다.

      • SBC 주변 회로들을 제어하기 위해 SBC제조회사에서 BSP(Board support pakage)를 제공한다.

      • BSP에는 SBC의 특별한 기능을 하는 디바이스들의 드라이버가 들어있다. 라이브러리 또는 소스레벨로 제공한다.

      • CPU에 내장된 기능들을 사용하기 위해서 WindRiver에서 제공하는 WindRiver Device Driver 를 사용한다. 커널은 위 두가지를 이용하여 하드웨어를 컨트롤 할 수 있다.

       

       

      • VxWorks는 Window와 같은 형태로 개발자가 필요로하는 기능의 플랫폼을 구성할 수 있다.

        구성된 플랫폼과 BSP를 묶어서 VxWorks OS를 만든다.

      • VxWorks OS를 만드는 과정은 두가지로 나뉜다.

        VxWorks 파일만 나오는 과정과 VxWorks.sym파일이 나오는 과정이 있다.

        위 과정은 BSP심볼들을 OS에 합쳐서 만드는 과정과, 분리하여 만드는 과정인 것이다.

      • 또다른 방법으로는 Boot ROM이 실행하고 VxWorks가 제어권을 가지고 부팅한 후 어플리케이션에게

         제어권을 넘기는 순차적 방법이 있고, VxWorks 와 어플리케이션을 합쳐버리는 방법이 있다.

       

      [ 어플리케이션과 VxWorks 를 분리하여 구성 ]

       

       

      • VxWorks 6.x 버전에서 주로 사용되고 있는 방식이다.

      • 어플리케이션을 여러가지 만들 수 있으며 어플리케이션만 다운 받으면 됨으로 개발 시간을 절약할 수 있다.

      • 두개 이상의 어플리케이션이 있을경우 우선순위를 설정하여 실행할 수 있으며, 다른 방법으로는 선택적으로

        실행된 어플리케이션이 직접 다음 어플리케이션을 실행하는 방법으로도 가능하다.

       

      [ 어플리케이션과 VxWorks 를 합쳐서 구성 ]

       

       

      • VxWorks 5.x 버전에서 사용되던 방법으로 Window 의 방법과 유사하다.

      • 수행속도가 빠르지만 APP을 한가지만 만들 수 있으며, 그안에서 Task를 늘려나가는 방식으로만 개발이 가능하다.

       

      시뮬레이터를 이용한 VxWorks OS 구성

      • VxWorks Image Project 생성.

       

      • 프로젝트의 이름을 설정하고 생성된 커널의 위치를 지정한다.

       

      • 시뮬레이터 사용시 simpc를 선택하고, 실제 하드웨어를 사용할경우는 하드웨어와 맞는 BSP를 선택한후 Finish 를 클릭한다.

       

       

      • 아래와 같은 경로에 아래 그림과같이 많이 사용되는 BSP를 WindRiver에서 제공한다.

      C:\WindRiver\vxworks-6.7\target\config

       

      • diab 컴파일러는 돈을 내고 사야함으로 gnu 를 선택한다.

       

      [ WindRiver 에서 제공하는 BSP 목록 ]

       

      • 프로젝트가 완성되면 커널을 빌드한다.

       

       

      • C:\WindRiver\workspace\myKernel\default 경로에 빌드후 생성된 파일들이 있다.

      • 아래그림에 표시된 VxWorks, VxWorks.sym파일이 커널파일에 해당한다.

      • romfs_image_prj.d, romfs_image_prj.s 는 PPC의 세컨드 Boot ROM 이미지 이다.

       

      • 새로운 Remote System을 만든다.

      • 하드웨어가 없음으로 Simulator 를 선택하고 Next를 클릭한다.

       

       

      • 개발자가 만든 커널 이미지를 시뮬레이터에 넣기위해 Custom simulator를 선택한다.

       

      • Browse를 클릭하여 생성된 커널파일을 선택한 후 Finish를 클릭한다.

       

      • 자신이 만든 커널이 맞는지를 확인하려면 아래 그림처럼 Symbol file의 경로를 확인하면 된다.

       

      실제 VxWorks OS 구성

       

      • 하드웨어 제조사에서 제공하는 BSP를 받으면 아래의 경로에 붙여넣는다.

      C:\WindRiver\vxworks-6.7\target\config

       

      • BSP 폴더에서 fei 또는 mgi는 Ethernet 디바이스이다.

      • NEW > VxWorks Image Project > Project name 생성 후 Next > BSP에 실제 하드웨어의 BSP 폴더 등록 > gnu 컴파일 선택 후 Finish > Build Project (컴파일…)

      • 위 과정으로 커널이 준비되면 Host PC와 SBC를 시리얼로 연결한후 SBC 의 전원을 공급한다.

      • SBC에 전원이 연결되면 시리얼 화면에 부트롬(시모스)에서 멈춘다.

      • 부트롬에서 사용되는 명령어들은 'h'(help) 를 입력하면 화면에 나타난다.

      • 다음으로 할 일은 부트롬에게 VxWorks 커널이 Host PC에 있다고 알려줘야 한다.

      • 부트롬에서 'c'(change boot parameter)를 입력하면 부트롬 파라메타 설정 화면이 나타난다.

      • 디바이스, Host 및 Target 의 IP를 설정하고, 이름 및 ID, 패스워드를 설정한다.

      ex) device : tffs = 0,00 mgi1 또는 fei1

      ex) target IP : 192.168.20.105

      ex) Host IP : 192.168.20.205

       

      주의사항 : 유닛넘버는 수정할 경우 부팅이 되지 않을 수 있음으로 수정하지 말 것.

       

       

      • 위 그림과 같이 FTP Sever 를 실행 시킨다.

       

       

      • 실행된 WFTPD의 Security 에 Users/rights 를 클릭한다.

       

      • New User 를 클릭하여 아래와 같이 User Name 과 Password를 설정한다.

       

      • Home Directory 에는 VxWorks 커널이 있는 경로를 입력한다.

       

      • FTP Sever 설정이 완료되면 부트롬에서 '@' (리셋) 를 입력하여 부트롬을 리셋 시킨다.

      • 리셋이 진행될 때 WFTPD에 코드들이 출력되어야 정상연결된 것이다.

      • 부트롬에는 LAN을 자동으로 붙이는 과정이 출력된다.

      • 위 과정은 VxWorks Image 는 Target의 RAM에 위치하고 Target의 전원이 꺼지면 사라진다.

      • LAN을 통해 연결함으로 개발시에는 다운로드 시간을 단축시켜준다.

      • 납품을 할 경우에는 다른 방법으로Flash Memory에 VxWorks Image를 넣어야 한다.

       

      VxWorks Image flash Memory 저장

      • 아래그림과 같이 새로운 Remote Systems 을 생성한다.

       

      • 시뮬레이터가 아닌 실제 Target을 사용하기 때문에 아래그림과 같이 선택한다.

       

      • Backend 는 연결 방법을 의미하고 아래그림에서는 LAN연결을 사용하기 위해 wdbrpc를 선택하고 Target 의 IP주소를 설정하였다.

      • Kernel image 는 Browse를 사용하여 실제 사용할 커널경로를 설정한다.

       

       

      • 아래 그림과 같이 Kernel Configuration 더블클릭 한다.

       

       

      • 아래와 같은 화면에서 Ctrl + F 로 찾고싶은 컴포넌트를 검색하여 찾을 수 있다.

       

       

      개발 방법

       

      개발 방법 1)

      • 아래에 소개 되는 개발 방법은 OS에 어플리케이션을 포함시키는 방법이다.

      • usrAppInit.c 에서 코딩하여 어플리케이션을 생성할 수 있다.

      • 항상 OS와 같이 컴파일 해야 함으로 잘 사용하지않는다.

       

       

      • 시뮬레이터를 연결하면 서버가 실행되면서 즉시 어플리케이션이 실행된다.

       

      개발 방법 2)

      • 스크립트 파일을 이용한 개발 방법.

      • OS 부팅이 끝나고 나면 boot ROM의 파라메타를 읽어 오는데 그것이 startup script이다.

       

       

      • R101.cmd 의 내용은 아래 그림과 같다.

       

       

      • 해석을 해보면 R101.out 어플리케이션을 로드하고 main함수를 실행한다.

      • 실제 플래시 메모리로 부팅 할 경우 'c'명령으로 디바이스를 수정하고, 이름에 [ ex) /tffs0/R101.cmd ] 추가하여 실행 할 수 있다.

      tip : ls "/tffs0/"명령으로 F/M의 내부를 확인할 수 있다.

       

      • 스크립트가 아닌 usrAppInit.c 로도 위 와 같은 방법이 가능하다.

       

       

      APP 개발

       

       

      • Real Time Process Project 는 아래 그림과 같은 구조로 이루어진다.

       

       

      • VxWorks 5.x버전에서 주로 사용되었으며, 장점으로는 Task간의 전역 변수의 공유가 쉽고 디버그가 쉽지만, 주요 메리모리 영역인 Heap, Bss 영역을 Task간에 함께 사용함으로Task 1에서 삭제한 데이터가 Task 2, Task 3에서 삭제될수 있는 리스크를 가진다. 또한 요구사항이 많아 질수록 복잡한 구조를 가진다.

       

      • VxWorks Downloadable Kernel Module Project 는 아래 그림과 같은 구조로 이루어진다.

       

      • VxWorks 6.x 버전에서 사용되고 Process 간의 연결방법이 복잡하지만, Processs 1번에서 데이터를 삭제해도 Process 2과 Process 3은 영향을 받지않는다. 단점은 프로세스를 따로 개발해야 함으로 복잡한 프로그램 구조를 가진다.

      • VxWorks Downloadable Kernel Module Project 로 어플리케이션 개발을 진행하도록 한다.

      • 프로젝트 이름을 설정하고 Next 클릭.

       

       

      • 개발자가 만든 어플리케이션과 개발할 커널이미지와 매칭 체크.

      주의 사항 : 기존 커널이 있을경우 체크를 하면 기존 커널과 합쳐짐으로 주의.

       

       

      • PPC604 CPU일경우 파일이름의 길이제한이 있음으로 –mlongcall 옵션을 붙인다.

       

      • SIM PC 시뮬레이터 와 gnu 컴파일러 항목 선택.

       

      • 프로젝트 생성후 새로운 파일 생성.

       

      • 아래와 같이 myApp.c 이름을 설정한 후 Finish 클릭.

       

      참고 : printf 함수는 10ms 정도의 딜레이가 발생함으로 리얼타임에서는 문제가 될 수 있음으로 logMsg 는 10진수만 출력할 수 있으며, 저장해두었다가 유효시간에 출력함으로 디버깅에 유용하다. logMsg()함수는 logLib 파일에서 확인할 수 있다.

       

      • 일반 C형태로main()함수 사용이 가능하다.

       

       

      • VxWorks 에서는main()함수를 아래와 같은 형식으로 사용한다.

       

       

      • VxWorks 진입점인main()함수 이름을 변경하여 사용할 수 있다.

       

       

      • 진입점 결정은 스크립트 파일에 명시하거나 usrAppInit.c 에 명시하면 된다.

       

      ex)

      • 생성된 myApp.c에 아래와같이 예제 코드를 작성

       

       

      • 아래그림과 같이 커널에 어플리케이션을 다운로드 한다.

       

      • 다운로드가 완료되면 아래와 같이 시뮬레이터에서 myApp.out을 확인할 수 있다.

       

      • host shell 에서 아래와 같이abc 함수를 호출한다.

       

      • abc함수를 호출하면 아래와 같이 시뮬레이터에서 어플리케이션이 실행된다.

       

      • 전역으로 생성된 변수는 아래 그림과 같이 shell 에서 접근이 가능하다.

       

       

      VxWorks+강의+3.pdf
      다운로드

       

       

       

       

      728x90
      반응형

      'OS > vxWorks' 카테고리의 다른 글

      VxWorks (세마포어)  (0) 2017.06.30
      VxWorks (Task 생성 / RS232 통신 )  (0) 2017.06.30
      Task 란? / taskSpawn  (0) 2017.06.30
      VxWorks Workbench / 전기신호 강의 정리  (0) 2017.06.30
      VxWorks / SBC 강의 정리  (0) 2017.06.30
    상단으로