제 7회 KELP 공개 세미나 후기 - 1
Posted 2007/11/10 23:25금일 09시부터 18시까지 KELP(http://www.kelp.or.kr)에서 공개 세미나를 개최하였다. 과 게시판에 세미나 소식이 올라와 신청 후 참석하게 되었는데, 최신 임베디드 계열의 동향이나 기술들을 소개해 주셔서 알차면서도 기억속에 많이 남는다. 일단 조금 놀랐던 점은 Embedded에 대한 세미나를 하는데 Microsoft도 참여했다는 점이다. Embedded Linux, Embedded Windows CE. 이 둘은 친하지 않을 것 같은데 한 자리에서 이 둘을 같이 보게 되니 기분이 남다르다. 신기했다.
오늘 배웠던 이런 여러가지 소식과 기술들을 조금씩 정리하며 알찼던 시간들을 기록해야겠다. 비록 오늘 사정이 있어서 참여하지 못한 많은 분들이 계실텐데 발표자 분들의 강의자료와 내가 정리한 필기 내용들을 보고 그때의 즐거운 세미나의 현장을 잠깐이라도 맛보길 바란다.
먼저 아래는 오늘 진행되었던 시간표이다.
1. QT 프로그래밍
첫번째 세미나는 QT 프로그래밍이라는 주제로 조병완님이 진행해 주셨다. 조병완 님은 현재 Korone(http://www.korone.net)라는 사이트의 운영자이시다.
1) Embedded Applicaiton의 개발
위의 링크는 QT프로그래밍의 강의자료이다. 이 분은 앞으로의 Embedded Application을 개발하는 환경이 기존의 C기반에서 C++ 기반으로 전이될 거라고 하셨다. 이전에는 C++ 사용 자체가 어느정도 Overhead였다. H/W Spec에 떄라 작고 빠르게 개발하는것이 중요했다. 하지만 요즘은 시스템 스펙이 향상되고 있으므로 어느정도 c++의 사용이나 메모리 로드가 가능하다. 즉, H/W중심적 개발에서 S/W중심의 개발로 전이가 되고 있다.
C++을 기반으로 Application을 개발하게 된다면 Handle Leak이나 Memory Leak을 방지하는 것이 쉬워지며 동작 방식에서 또한 인터페이스가 명확해 진다. 재사용성 측면도 크다. PMP의 신제품은 3~6개월마다 신제품이 쏟아져 나온다. 만약 PMP의 기능에 전자사전을 추가한 제품을 생산할 경우 C에서는 새로 만들어 줘야 하지만, C++ 기반이라면 기존 PMP를 상속받아 전자사전 기능을 추가하면 되므로 소스의 재사용성이 높아진다.
C++ 기반의 FrameWork은 여러가지가 있다. 이미 검증된 다양한 솔루션을 통해 개발한다면 개발기간이 단축되고 생산성이 향상될 것이다. 개발을 위해 공개된 여러가지 FrameWork를 충분히 검토 후 사용하는 것이 중요한데, 어떤것은 어떤것이 불합리하고, 또 어떤것은 사용하다 보니 이런것이 불합리 하여 Framework을 고르는데 오랜 시간이 걸릴 수 있다. 해당 Framework를 갖고 개발한 여러가지 Reference들을 참고하여 어느정도 비효율성이 존재하여도 자신에게 맞는 Framework를 결정하도록 해야겠다.
2) QT
QT는 C++로 작성된 Framework이다. 조명환 님은 c++로 작성이 됬다는 것과 Licence 정책 때문에 QT가 마음에 든다고 하셨다.(후에 다른 마음에 드는 기능도 소개해 주셨다.) QT는 이외에도 GUI와 GUI외적인 다양한 요소를 제공해 주며 생산성 및 유지보수성이 용이하다. 또한 마치 MSDN과 같은 개발 문서 및 관련 Reference가 풍부하다. KD라는 것도 QT로 만들어 졌기 때문에 KD문서를 참고할 수도 있다.
각 OS Flatform은 각각 System API가 다른데 QT는 이 System API들을 Wrapping한 어떠한 MiddleWare를 지원한다. QT/X11, QT/WIN32, QT/MacOS등이 바로 그런 것들이다. QT는 이 MiddleWare위에 올라간다. 얼마전에 Wince 버젼의 베타버젼 Middle Ware도 공개가 되었다고 한다. 여기서 나타나 있듯이 QT로 Application을 한번 개발해 놓으면 여러 Flatform에서 사용 가능하다는 장점이 있다.
3) QT의 주요 구성
QT는 일반 GUI를 쉽게 작성할 수 있는 Form Designer를 지원한다. 손으로 일일이 좌표를 맞추는 것보다 생산성이 증가한다. 그리고 개발이 완료된 후에도 한국어를 아랍어로 바꾼다던가 등의 언어를 변경할 수 있는 Tool을 지원해 준다.(다국어 지원) Thread Safe하며 C++로 개발되었기 때문에 재사용성이 용이하다. GUI 외적으로도 여러가지 자료구조와 DATE/TIME 등을 지원하며 이는 STL보다는 성능이 약간 느리지만 STL이 포팅이 안되어 있어도 사용가능하다는 장점이 있다. 그리고 QT에서 짜는 프로그램 이니까 QT것을 써서 개발해야 한다는 개념적 Notation도 있다. QT는 지원하는 여러 기능들 앞에 Q를 붙인다.
QT/Embedded용 Class에 대해 잠깐 소개하겠다. 위의 그림은 QVfb라는 Class이다. QT에서는 Host PC에서 Qt/E를 통한 개발내용을 확인할 수 있어서 실제 포팅하지 않고도 확인할 수 있으므로 개발에 용이하다. 하지만 내가 만든 프로그램을 테스트 해볼때 실제 Device에서 하는것 보다 많이 빨라보이기 때문에 이를 주의해야 한다.
QWSServer는 FrameBuffer위에서 Controll하는 Manager Class이다. QCop은 QT/X에서 제공하는 좋은 기능들을 QT/Embedded에서도 사용할 수 있게 제공한다. QPF는 폰트를 랜더링해서 크기를 줄여주는 클래스이다. 우리나라의 경우 기존 Font의 Size가 큰데 그것 자체만으로 Overhead가 될 수 있다. 그것의 크기를 줄여준다. 조병환 님은 QT/E의 QWSServer, QCop, QPF를 강조하셨는데 보다 자세한 내용은 발표자료를 참고하기를 추천한다.
4) QT의 적용 적합성
QT를 사용하기 전에 자신에게 적합한 Framework인지 먼저 판별해 보고 사용해라. GUI로 버튼 몇개를 넣고 이런것들은 QT가 불필요하다. UI의 구성 복잡도 여부, 개발의 생산성 여부, 다국어, 폰트, 속도등을 고려하여 적합성 여부를 판별해라. QT는 3.X부터 기능이 많아지고 비대해졌다. 4.X에서는 어느정도 느려진 것이 개선이 되었지만 그래도 속도가 느리다.
5) QT의 활용 정책
QT는 자신의 원하는 컨트롤을 만들기 위해서는 기존의 컨트롤을 상속한 후에 일부 기능을 재구현하면 된다. QT의 장점은 Design과 Code의 독립이다. Desiner로는 Design을 하고 바로 Code를 작성할 수 없다. Design File을 상속받아 이를 구현해야 한다.
QT에서는 스타일을 적용하기 위해 일반 CSS 문법을 지원한다. 허나 이는 너무 느리므로 상속을 통한 스타일 재 정의 방법을 주로 사용한다. QT의 Thread는 사용하기 쉽게 잘 정의가 되어있다. QT의 디버깅은 Exception Handler를 통한 call Stack확인 방법을 주로 쓰며 자세한 코드와 방법은 강의자료를 참고해라.
6) QT의 개발절차
QT의 포팅은 최초 1회만 하면 된다. Designer를 통해 UI를 작성하고 소스코드를 작성하고 디버깅 후 배포한다. 소스코드는 VI Editor를 사용해도 되고 Eclipse를 사용해도 된다. QT의 포팅은 생각보다 쉽다. 가끔 포팅을 하다가 에러가 나는 경우가 있는데 이럴 경우 자신이 혹시 RedHat 9에서 개발을 하고있는지 보라. 주 원인은 gcc버젼이 낮기 때문에 발생하는 에러로써 GCC버젼을 올려주면 문제가 없어진다.
2. JTAG 기반의 부트플래쉬 Writing
두번째 세미나는 이영민님께서 진행해 주셨다. CPU안에 있는 JTag Interface를 사용하여 Flash에 Read 및 Write를 하는 방법을 소개해 주셨는데 작년에 배웠던 컴구조가 떠오르며 기억에 많이 남는다. 아래는 이영민님께서 사용하신 세미나 자료이다.
1) 요약 및 목표
JTAG Intterface를 통해 Pin을 핸들링하여 Flash에 Writing을 하는것이 목표이다. JTAG기능(BSDL)을 이용하여 부트 플래쉬에 Data를 Writing한다. CPU마다 BSDL이 다르므로 CPU의 BSD문서를 참조해라. Flash는 Address, Data, Control이라는 3가지 핀이 있는데 이 3가지의 신호를 순차적으로, 조합적으로 Write함으로써 읽기&쓰기가 가능하다. JTAG interface는 TDI, TMS, TCK, TDO가 있는데 TDI는 입력, TDO는 출력을 담당하고 TMS, TCK는 제어를 담당한다. JTAG interface로 Flash Memory에 읽기와 쓰기가 가능하다. CPU핀과 Flash의 Address, Data, Control은 이미 연결되어 있으며 JTag의 Interface만으로 Flash의 Read/Write가 가능하다. 이를 위해서는 JTAG Block과 BSDL을 알아야 하며 Flash의 Command와 Timing을 알아야 한다.
2) JTAG
TAP controller는 밀어넣기, 밀어읽기를 위한 제어장치이다. TDI를 통해 bit단위로 밀어넣고 TDO를 통해 bit단위로 읽는다. 우리는 PIN 제어를 위해 BSR(Boundary-Scan Register)에 원하는 값을 쓰거나 읽는다. BSR은 시리얼(Shift Register)이다. Shift제어, Update제어, Capture제어 이렇게 3가지가 가장 중요하다. Shift제어는 값을 밀면서 BSR에 설정하는 역할을 하고 Update는 BSR의 내용을 실제 TAP(Test Access Port)에 설정하는 명령어 이다. Capture는 TAP에 있는 값을 BSR로 복사하라는 명령어이다. tap를 제어할 수 있는 핀은 2개인데 이것을 통해 16개의 상태를 돌아다닐 수 있다.
Instruction Register는 데이터의 길이다. BSR, Device ID Register, ISP/ICR Register 등 여러가지 Register가 있는데 그중에 어떤 Register에 값을 읽고 쓸 것인지를 결정한다. Shift 후에 Update, Capture 예제는 강의자료에 잘 나와있으니 그것을 참고해라.
BSDL을 참고하여 BSR과 PIN의 관계를 알수 있다. BSR몇번을 넣어야지 Address핀 몇번, 혹은 Data핀 몇번이 제어되는지 알 수 있다. JTAG Interface와 BSR을 이용하여 원하는 PIN의 bit Data를 읽고 쓸수 있으며 우리가 원하는 핀의 제어가 가능하다.
3) Flash Memory
이 세미나에서는 예제로 NOR Flash Memory를 사용한다. NOR는 앞으로 사용되지는 않을것이지만 Data, Address, Control핀이 나눠져 있어서 JTag 예제를 보여주는데 적합하다. NAND는 Data, Address, Control핀이 하나의 IO핀으로 합쳐져 있다. Flash Memory에 값을 쓰기위해서는 Command와 Timing waveform을 알아야 한다. 이는 각 Flash Memory Data Sheet에 명시되어 있다.
Flash는 하나의 Timing Waveform을 수행하면서 핀의 상태가 변할 때 마다 JTAG Interface를 통해 모든 핀의 상태를 그에 맞게 만들어 놔야 한다. Update를 통해 적용한다. 핀 하나의 상태가 변할때마다 이러한 작업을 계속한다. Cycle마다 Timing도가 필요하고 핀이 변할때마다 JTag Interface를 통해 Shift Update작업을 해야한다.
3. 세상을 바꾸는 새로운 Windows Embedded Technology
세번째 세미나는 세상을 바꾸는 새로운 Windows Embedded Technology라는 제목으로 Microsoft Korea의 서진호 님이 진행해 주셨다. 아래의 PDF는 서진호님의 강이자료이다.
일단 이분은 말을 굉장히 잘하셨다. 처음 Embedded Device가 무엇인가? 라는 질문부터 시작하고 Embedded Device가 적용되는 분야에 대해 소개해 주셨다. Embedded Device가 왜 중요한지, 그리고 Embedded Device의 시장이 2009년에는 얼마나 많이 성장할 것인지에 대해서도 설명해 주셨다. 그리고 Microsoft에서 보여중인 Windows Embedded 기술에 대해서 설명해 주셨다. 이번 세미나는 기술적으로 내가 필기한 내용은 거의 없다. 하지만 많은 것을 느낄 수 있었다. 꼭 강의자료를 다운받아서 한번 훑어보길 바란다.
이제 내년도에 C++기반으로 Windows CE에서 프로젝트가 잡혀있어서 이번 세미나를 기대했었는데, 노트북이 연결되지 않아 Windows CE에서의 개발환경 Demo를 보지 못해서 아쉬웠다.
4. VxWorks소개 및 디버깅 환경
네번째 세미나는 윈드리버 한국지사의 백운철 차장님께서 진행해 주셨다. 다음은 백운철 차장님의 세미나 자료이다.
VxWorks는 OS시간에 Hard Real Time OS를 소개할때 잠깐 언급이 됬었다. 이번 시간은 지금 배우고 있는 OS수업을 복습하는 느낌이었다. 지금까지 아는 내용들이 실제 Linux에 어떻게 적용이 되고 있는지를 경험할 수 있는 좋은 세미나였다. VxWorks는 여태까지 달탐사를 위해 나갔던 우주선에 모두 사용이 되었다고 한다. 역시 이번 세미나에서도 강의자료 외에 필기했던 내용들을 중심으로 잠깐 기록해봐야 겠다.
1) VxWorks 소개
VxWorks는 마이크로 커널이다. Linux의 Monolitic 커널은 큰 하나의 덩어리이지만, VxWorks는 마이크로 커널이므로 선택적으로 커널 컴포넌트를 포함할 수 있다. Asymetric Multi Processor를 지원하며 이는 CPU마다 OS가 별도로 올라가는 형태이다. SMP기능도 추가되었으며 SMP(Symetric Multi Processor)는 CPU가 여러개 있으면 그 위에 OS가 하나만 올라가는 형태이다.
기존의 Linux는 System Call을 호출하여 트랩명령어로 커널모드로 진행하는 반면에, VxWorks는 디폴트로 Supervisor Mode이므로 일반 함수(Externel 함수) 호출방식이다. 그러므로 일반 Linux보다 빠르다. 아래는 일반 Linux와 VxWorks의 속도를 비교해 놓은 기록이다. 성질이 다르기때문에 100% 공평한 환경에서 비교했다고는 할 수 없지만 어느정도 참고는 해도 좋다고 하셨다.
VxWorks도 Task라는 것이 존재하는데 특이한 점은 Task마다 이름을 줄 수 있다는 점이다. 또한 Hard RealTime이라서 그런지 Task의 상태 및 전이 상태가 많다.
또 어느정도 특별한 점이 있다면 일반 Linux는 Virtual Memory 사용시 모두 다 같은 영역을 쓸 수 있다. 어차피 가상이기 때문이다. 하지만 Real Time Process모델은 공유 Library를 제외하고는 메모리영역을 공유하여 사용하지 않는다. 이밖에도 많은 차이점들이 있는데 이는 강의자료에 자세히 설명되어 있으므로 강의자료를 참고하길 바란다.
2) 디버깅 환경
디버깅 환경으로는 대표적으로 WindShell을 소개해 주셨다. 그리고 WR debugger, System Viewer, StethoScope, TraceScope, CoverageScope, ProfileScope, Memory Scope, Diagnostics : Sensor Pointer를 추가로 설명해 주셨다. 이것들은 시간관계상 간단히 Over View형태로 진행이 되었으므로 자세한 것은 강의자료의 그림들을 참고하길 바란다.
기억에 남았던 점은 Diagnostics : Sensor Point이다. 이것은 최신 기술이라고 한다. 타겟 보드 메모리상의 임의의 함수를 실행중에 Binary Code를 바꿔치기 할 수 있다고 한다. System을 안죽이고 일정부분을 바꿔치기 함으로써 몇일이 지나야지만 발생하는 논리적인 오류를 찾은 후에 수정 후 다시 이것이 발생하는지 몇일을 기다리는 것이 아니라, 바로 확인해 볼 수 있다는 장점이 있다.
'C.S.E > Linux' 카테고리의 다른 글
| Mutex lock과 condition을 사용한 생산자 소비자 문제의 구현 (0) | 2007/12/26 |
|---|---|
| 제 7회 KELP 공개 세미나 후기 - 3 (0) | 2007/11/11 |
| 제 7회 KELP 공개 세미나 후기 - 1 (0) | 2007/11/10 |
| 리눅스 시동파일 (0) | 2007/07/11 |
| 리눅스 프로그램 설치 및 삭제 (0) | 2007/07/11 |
| 리눅스 명령어1 (0) | 2007/07/11 |
1_Qt_Programming.ppt
3_Window_Embedded.pdf
이올린에 북마크하기