<4D F736F F F696E74202D20BEC8B5E5B7CEC0CCB5E54857C7C3B7A7C6FB205BC8A3C8AF20B8F0B5E55D>
|
|
|
- 희라 예
- 9 years ago
- Views:
Transcription
1 Embedded Linux System 분석 및 환경구축 나 이 텍 Embedded Linux System 환경구축 및 분석 1
2 Index 임베디드 시스템의 특징 임베디드 시스템의 개요 및 구성 임베디드 시스템의 특징 임베디드 시스템 현황과 전망 Processor 혹은 SoC(System on Chip) Processor와 SoC와 IP Processor 선정 방법 Samsung S5PC100의 특징 임베디드 리눅스 리눅스 개요 리눅스 2.6 특징 임베디드 리눅스 개발환경 Cross development 환경 개요 Cross development 환경 구축 File system과 Root File system Cross toolchain 빌드 및 구축 나 이 텍 Embedded Linux System 환경구축 및 분석 2
3 Index NTC100 Board의 특징 및 U-Boot NTC100 보드의 특징 부트로더 분석 Linux 2.6 kernel 설정 및 Compile 커널 설정 및 컴파일 Linux Kernel 구조의 이해 Linux Kernel의 부트과정 Linux kernel과 device driver와의 관계 Kernel Module Linux Device Driver의 동작원리 Linux Multimedia Framebuffer FFMPEG Mplayer Linux Multimedia Reference 나 이 텍 Embedded Linux System 환경구축 및 분석 3
4 Embedded Linux 분석 및 환경구축 임베디드 시스템의 특징
5 세부 목차 임베디드 시스템의 개요 및 구성 나 이 텍 Embedded Linux System 환경구축 및 분석 5
6 임베디드 시스템이란? 임베디드 시스템의 정의 내부에 Computer가 들어있는 제품 혹은 시스템(ex> Single Board Computer - SBC) programming이 가능한 디바이스를 포함하고 있으나,그 자체로 일반적인 목적의 컴퓨터 시스템이 아닌 특수한 목적의 시스템 특정한 목적을 수행하기 위하여 Micro-Processor, Memory Controller, 각 종 I/O가 통합되어 있는 하드웨어와 그 하드웨어를 제어하기 위한 소프트웨 어가 탑재된 통합시스템 임베디드 시스템의 일반적인 의미 마이크로 프로세서/마이크로 컨트롤러를 내장(embedded)하여 원래 제작 자가 의도한 특정한 기능만을 수행하는 장치 미리 정해진 특정한 기능을 수행하도록 프로그램이 내장되어 있는 시스템 일반적으로 보다 큰 시스템의 일부이거나 독립된 시스템 나 이 텍 Embedded Linux System 환경구축 및 분석 6
7 임베디드 시스템이란? 임베디드 시스템의 일반적인 의미(계속) 특별한 업무를 수행하거나 사용자가 임의로 정한 업무를 수행 하드웨어와 소프트웨어를 포함하는 특정한 응용시스템 하드웨어와 소프트웨어의 변경이 매우 어려운 시스템 개인 휴대 정보 단말, 지리 정보 시스템, 의료 정보 단말, 정보가전, 게임기 기, 자동차, 항공기 및 우주선, 의료 및 산업 원격 조종 장비 등의 시스템을 총칭 나 이 텍 Embedded Linux System 환경구축 및 분석 7
8 임베디드 시스템의 구성 임베디드 시스템의 구성 Hardware : SoC(System on Chip), Memory(DRAM), Flash(NOR/NAND), Ethernet Controller, Sensor 등 Software : Bootloader, 운영체제(Operating System), Device Driver, Middleware, Application 등 Hardware SoC Memory I/O Serial etc Ethernet Software Bootloader, OS Middleware Application 임베디드 시스템 나 이 텍 Embedded Linux System 환경구축 및 분석 8
9 세부 목차 임베디드 시스템의 특징 나 이 텍 Embedded Linux System 환경구축 및 분석 9
10 임베디드 시스템의 특징(1/9) 왜 임베디드 시스템은 다른가?(PC와의 차이점) 일반적인 계산 목적이 아니라 특별한 임무를 위한 시스템 목적에 알맞은 Processor의 특징에 의존한다 가격적인 측면 보통 가격에 민감한 경우가 많다. 대량 생산 제품의 경우는 가격에 민감하지만, 인공위성-화성탐사선과 같은 기능위주의 제품은 가격에 덜 민감한 편 부품단가 위주로 계산 즉, 비용대비 성능의 미묘한 선에서 결정을 해야한다 시스템 설계자의 역량에 따라 제품의 성공/실패가 결정될 비율이 높음 나 이 텍 Embedded Linux System 환경구축 및 분석 10
11 임베디드 시스템의 특징(2/9) 실시간 동작의 필요성 일반 PC의 경우와는 다르게 즉각적인 응답이 필요한 경우가 있음 단말보다는 주로 제어 시스템의 경우가 많음 시간에 민감하게 제약 받는 경우(time sensitive constraint) Ex> print출력 시간 시간에 결정적으로 제약 받는 경우(time critical constraint) Ex> 비행기 제어시스템 Ex> 엘리베이터 제어 시스템 비용대비 실시간의 필요성과 software사이에서의 고려 상용 RTOS, 공개 RTOS, 리눅스를 이용한 실시간 구성(timer interrupt를 이 용한) 개발환경과 비용과의 관계도 고려. 즉, 목적하는 시스템의 성능에 따라 고려 를해야함. 나 이 텍 Embedded Linux System 환경구축 및 분석 11
12 임베디드 시스템의 특징(3/9) Software의 오동작 문제 Software가 오동작 했을 경우 일반 PC보다 훨씬 심각한 문제가 발생할 가능성이 높음 단말보다는 제어 시스템쪽에 더 심각한 증상 오동작의 심각성 무인시스템의 경우의 문제 기지국, 위성시스템, 군사관련시스템 인간과 관련된 시스템 엘리베이터 제어시스템의 오동작, 교통제어 시스템 의 오동작 오동작에 대한 대비책을 세워야 함 Watchdog timer등과 같은 시스템을 감시하는 다른 시스템의 도입 나 이 텍 Embedded Linux System 환경구축 및 분석 12
13 임베디드 시스템의 특징(4/9) 전원문제 PC에서는 발생하지 않는 전원에 대한 문제가 발생할 경우가 있음 저전력문제 단말기 이동전화, Portable Multimedia Player Ex> 지리산 반달곰 위치 표시 시스템 Hardware의 문제? 저전력 지원 SoC (Speed Step 기술) Software의 문제? 저전력 지원 SoC를 제어하는 software의 유무 (Power Management System), tickless ikl kernel!? 시스템의 목적에 알맞은 전원 디자인 전원에 대한 문제는 시스템 디자인 결정에 골고루 영향을 미침 전력의 제약은 SoC의 선택, 속도의 선택에 영향을 미침 발열문제 밀폐된 공간에서의 발열문제(ex> 벽에 장착된 web-pad) 다른 부품에 의한 발열 문제(ex> LCD에 의한 발열) 나 이 텍 Embedded Linux System 환경구축 및 분석 13
14 임베디드 시스템의 특징(5/9) 열악한 동작환경 조건 임베디드 시스템은 어디서나 사용됨. 비행기, 북극, 사막, 수중 및 심지어 우주에서도 동작해야 함 이에 따른 Hardware에 대한 제약사항 발생(ex> Industrial version의 부품들을 사용해야 함) 일반 PC보다 훨씬 적은 resource를 가지고 있음 효과적인 개발을 위한 특정 툴과 개발방법이 필요 전용 디버깅 장비를 사용하는 경우가 많음(ex> Trace-32) Cross-toolchain이 필요하다 디버깅에 제한을 많이 받는다. 나 이 텍 Embedded Linux System 환경구축 및 분석 14
15 세부 목차 임베디드 시스템 현황과 전망 나 이 텍 Embedded Linux System 환경구축 및 분석 15
16 임베디드 시스템 시장 현황 및 전망 소프트웨어 시장 제 1 강자는 없다 가장 각축전이 치열한 분야는 임베디드 운영체제(OS) PC 시장과 같이 특정 OS 가 시장을 독점하지 못하고 있음 적용제품의 종류, 규모에 따라 여러 종류의 상용 및 비상용 제품 다양 임베디드 OS 및 플랫폼, 애플리케이션 시장을 놓고 불꽃 튀는 경쟁 VxWorks를비롯한 RTOS 윈도CE, 임베디드 리눅스, 썬의 Java, 일본의 Tron 나 이 텍 Embedded Linux System 환경구축 및 분석 16
17 임베디드 시스템 - 산업의 특성 고부가가치 산업 임베디드 소프트웨어가 탑재된 상품의 가치는 하드웨어보다 소프트웨어 가 좌우하는 기술집약적 고부가가치 산업임 통신 라우터의 경우, 하드웨어 원가가 수십 만원에 불과하나 각종 통신 및 제 어 소프트웨어가 탑재되면 최종가격이 수백만원으로 상승함 VPN 서버 장비의 경우 하드웨어 가격은 2~3백만원대, 소프트웨가 탑재되면 수천만원대 하드웨어 강자가 절대적으로 유리(반도체) 우리나라의 기술 우위 산업 분야와 임베디드 소프트웨어 기술을 접목할 경우 국가 산업 발전의 새로운 대안으로 부각 가능 정보가전(디지털가전), 이동전화, 전자 자동차 등에 강점이 있음 나 이 텍 Embedded Linux System 환경구축 및 분석 17
18 임베디드 시스템의 향후 전망 - H/W 메모리 고속/대용량화 FLASH 메모리의 사용증가. 네트워크 유 무선 네트워크의 대역폭의 계속적인 증가. 정보기기를 통해 어디서나 다른 정보시스템에 접근 가능한 액세스 네트 웍 구축이 핵심 기술 Wireless LAN, Bluetooth 등 패키지 기술 하나의 ChipSet에 필요한 부품을 전부 내장시킴. Micro-Processor + DSP + Flash Memory + DRAM 그 밖에 3D H/W 가속기능, 암호화 모듈,... 나 이 텍 Embedded Linux System 환경구축 및 분석 18
19 임베디드 시스템의 향후 전망 - H/W SOC (System-on-a-chip) CPU, 메모리, DSP, I/O 등을 하나의 칩으로 만드는 기술 CPU칩, 메모리 칩, 주변장치 칩 들을 따로 사용하여 설계 각 칩에 해당되는 회로를 각각의 IP(Intellectual Property 또는 지적재산권) 로 확보해서 한 개의 칩으로 설계 수백만 게이트 급의 칩 MEMORY MEMORY VIDEO Decoder CPU HDTV Channel EQ. MPEG2FORMAT HDTV TS Channel Converter Decoder OSGM 나 이 텍 Embedded Linux System 환경구축 및 분석 19
20 Embedded Software 분류 임베디드 응용 소프트웨어 멀티미디어 재생기, MAP Viewer, 브라우저, PIM 응용, 게임, 모바일 숍, CNS(GPS, GIS) 등 임베디드 미들웨어 JVM, CORBA, COM, 무선 인터넷 플랫폼(Brew), 각종 통신 프로토콜 관리기 등 임베디드 시스템 소프트웨어 적응형 RTOS, 메모리 상주 DBMS, 디바이스 드라이버, 저전력 지원 등 임베디드 소프트웨어 개발 프레임워크 컴파일러, 디버거, 모바일 환경에 적합한 각종 시뮬레이터, 실시간 모니 터, 이동 모니터 등 나 이 텍 Embedded Linux System 환경구축 및 분석 20
21 임베디드 시스템의 향후 전망 - S/W OS Plug-and-play RTOS Linux will be there. Windows 시장 진입 노력: CE,.NET System S/W 새로운 장치와 고성능화 하는 장치에 맞는 API 계속 개발 Device Driver 자동 생성 도구 발전: MS Platform builder Middleware의 등장 Application S/W Component Based Design: Plug-and-play l 응용 S/W 개발이 가속화 S/W Modeling CAD Tool (UML) Development Tool CAD Tools for Rapid S/W development Automatic Source Code Generation Tool: Objectime, RoseRT 나 이 텍 Embedded Linux System 환경구축 및 분석 21
22 임베디드 시스템의 향후 전망 - 운영체제 실시간 시스템에서의 운영체제 간단하고 단순한 순차적인 작업에 관련 순차적인 프로그램으로 충분하였음 8bit, 16bit 마이크로프로세서 및 마이크로 컨트롤러 사용 임베디드 시스템에서의 운영체제 시스템 자체가 실시간 시스템에 비해 대형화 32bit RISC 마이크로프로세서 사용, 네트워크 연결, GUI환경이 강화됨 기능이 많아지고 복잡해짐 순차적인 프로그램 작성이 불가능 운영체제가 도입됨 임베디드 운영체제 기존의 상용 RTOS(Real-Time OS) 윈도우 CE 임베디드 Linux 임베디드 JAVA 나 이 텍 Embedded Linux System 환경구축 및 분석 22
23 임베디드 시스템의 향후 전망 - 운영체제 임베디드 시스템은 초기에 산업 및 군수용 장비의 제어를 위해 VxWorks, psos, VRTX 등 RTOS가 세계 시장을 선점 VxWorks, psos와 같은 전용 실시간 OS는 2001년을 기점으로 점차 시장 점유율이 하락하고 있음(IDC, 2001) 현재 임베디드 시스템의 다기능화 추세로 MS의 WinCE와 공개 소 스 기반의 임베디드 리눅스 중심으로 재편 중 2002년 PDA에서는 PalmOS가 선두였으나 2008년 현재 Nokia symbian 및 MS의 WinCE가 차지. 임베디드 리눅스는 2003년 14%, 2010년 50% 시장 점유 예측(VDC, 2001) Symbian 오픈 소스로 공개예정 (2009년 초) 구글의 안드로이드 핸드폰 개발 플랫폼 등장 (리눅스 커널 + 자바 프 로그래밍 환경) 나 이 텍 Embedded Linux System 환경구축 및 분석 23
24 Embedded Linux 분석 및 환경구축 Processor 혹은 SoC(System on Chip)
25 세부 목차 Processor와 SoC와 IP 나 이 텍 Embedded Linux System 환경구축 및 분석 25
26 System on Chip SoC 반도체 칩이 점점 미세화, 복잡화 되어짐에 따라 SoC(System on a Chip)가 대두됨 일반적으로 SoC는 칩 내부에 프로세서를 포함하게 되고 그로인하여 처 리해야 할 버스, 메모리를 비롯한 레지스터, 주변회로 등을 모두 포함하 게됨 반도체 칩은 조속히 칩을 개발하여 누가 먼저 시장에 출시하느냐에 따라 그 성패가 좌우되며 이것은 설계를 빨리 해야 한다는 것과 직결됨 반도체 칩의 설계를 빨리 하기 위해서 IP(Intellectual Property)를 사용 하는 방법이 적극 추천되고 있다 나 이 텍 Embedded Linux System 환경구축 및 분석 26
27 IP(Intellectual Property) IP 해당 칩에 적용될 수 있는 설계 블록을 누군가 미리 오랜 기간을 투입하 여 개발해 놓은 것을 의미 IP의 확보 여부가 칩에 대한 설계기간 단축에 지대한 영향을 미치게 되 어 그 성패 여부를 결정하는 주요 요인이 됨 해당 IP에 대해 기술적으로 잘 파악하여 입수하고자 하는 IP에 대한 공 급처를 찾는 것이 가장 복잡한 문제 IP의 성능이 전체 SoC의 성능이 되는 경우가 많으므로 기능과 안정성이 겸비된 IP를 구입해야함(ex> SD driver block) 나 이 텍 Embedded Linux System 환경구축 및 분석 27
28 IP(Intellectual Property) IP의 예 화면 3D 가속기능 암호화 알고리즘... IP의 검증 FPGA RTOS or Embedded Linux를 써서 검증. 검증이 끝나면 Soc 제작 특정 기능에 특화된 Soc 완성 나 이 텍 Embedded Linux System 환경구축 및 분석 28
29 ARM (Advanced RISC Machine) ARM is one of the most licensed and widespread processor cores in the world (약 75%의 시장 점유) Used especially in portable devices due to low power consumption and reasonable performance (MIPS/watt) Several interesting extensions Thumb instruction set Jazelle Java machine 나 이 텍 Embedded Linux System 환경구축 및 분석 29
30 ARM ARM 특징 Load-store 구조 : 메모리에서 데이터를 읽고 쓰는 명령어와 CPU 내부 에서 연산을 수행하는 명령어를 분리함 32비트 고정 크기의 명령어 : 한 명령어당 32 비트 16비트 명령어 사용 가능 : Thumb 모드에서 16비트 명령어를 사용할 수 있음, Cortex-A8 32/16 bit inst. 동시 지원 조건부 명령어 구조 :모든 명령어는 조건부 수행 명령으로 만들 수 있음 3개 주소 명령어 구조 : 두개의 소스 주소와 한 개의 목적지 주소를 사용 함 Shadow 레지스터 : 문맥교환 시간 단축 Barrel shift 레지스터 : ALU 입력 단에서 간단한 상수를 즉석에서 만들 거나 간단한 곱셈의 수행 속도를 빠르게 함 나 이 텍 Embedded Linux System 환경구축 및 분석 30
31 ARM History 1980 년 스탠포드와 버클리 대학에서 RISC 논문 발표. 이후에 버클리 대학원생의 설계 프로젝트로 구현 (Berkeley RISC I) 1983년: Acorn Compyter Ltd.에서 개발 시작 Roger Wilson과과 Steve Furber가가 8비트비 6502 프로세서에 기초하여 작업 1985년: ARM1 샘플 개발 1986년: ARM2개발 3만 여개의 트랜지스터 집약으로 보다 낮은 클록에도 불구하고 성 능은 더 나은 결과를 보임 1990년: ARM으로 회사 이름 개명 1991년: ARM6 개발 Apple의 Newton PDA에서 사용 (ARM 610) 1993년: ARM7 개발 본격적으로 ARM 프로세서가 임베디드 시장에 보급되는 계기 1997년: ARM9개발 ARM7에 비해 많은 부분에서 성능 개선 나 이 텍 Embedded Linux System 환경구축 및 분석 31
32 ARM History 1998 년: 노키아 6110 GSM 폰에서 ARM 프로세서 채택 2000년 보안 제품을 위한 Secure-Core, Java 응용 프로그램을 위한 Jazelle, 멀티 미디어 처리를 위한 SIMD(Single Instruction Multiple Data) 기술이 발 표되고 Intel사의 ARM 계열인 XScale 아키텍쳐가 소개. 2001년: ARMv5 발표 명령어 집합 아키텍쳐를 발표하면서 ARM926EJ-S, ARM7EJ, Secure- Core SC200, SC210을 소개. 2002년: ARMv6 명령어 집합을 구현한 ARM11 아키텍쳐와 ARM1136JF 코어를 출시하고 ARM11 PrimeXsys 개발 플랫폼을 출시. 2006년: ARM11 상품 출시 2006년: ARM Cortex 개발 2008년: ARM Cortex 상품 출시(Cortex-M, Cortex-A) 나 이 텍 Embedded Linux System 환경구축 및 분석 32
33 ARM license ARM 사는 CPU를 제작하거나 판매하지 않으며, ARM core 설계서 와 소프트웨어 개발 도구(컴파일러, 디버거, SDK)를 판매한다. Intel은 ARM 라이센스를 구입하여 Strong ARM과 Xscale을 개발하 여 판매 Samsung은 ARM 라이센스를 구입하여 S3C2410, S3C2440 등을 개발 2009년 현재 주로 ARM9/ARM11이 사용되고 있으며 Cortex-A8이 적용된 제품군이 출시된 상태. 2010년 현재 Cortex-A8이 휴대기기의 표준이 되어가는 추세이며, Cortex-A9 MPcore 제품군의 출시(OMAP4/Tegra2등)가 되어 있는 상태 나 이 텍 Embedded Linux System 환경구축 및 분석 33
34 ARM History (cont.) 나 이 텍 Embedded Linux System 환경구축 및 분석 34
35 ARM 버전에 따른 특징 나 이 텍 Embedded Linux System 환경구축 및 분석 35
36 ARM 버전 ARM v1 [ARM1 core] 기본적인 데이터 처리 명령 (곱셈 명령 없음) 바이트, 워드, 멀티 워드 load/store 명령 분기 명령, 분기 링크 명령 소프트웨어 인터럽트 명령 26비트 어드레싱 ARM v2 [ARM2, ARM3 core] 곱셈 명령 Fast 인터럽트 모드의 레지스터 추가 Co-processor 지원 32비트 곱셈기 온칩 캐시 나 이 텍 Embedded Linux System 환경구축 및 분석 36
37 ARM 버전 ARM v3, ARM v3m [ARM6, ARM7DI core] CPSR과 SPSR 분리 Signed/unsigned i d 곱셈 확장 명령 Exception 추가 32비트 어드레싱 MMU(Memory Management Unit) 지원 ARM v4, ARMv4T [ARM7TDMI, ARM9T core] signed/unsigned half-word load/store 명령 Thumb 명령 추가 시스템 모드 추가 나 이 텍 Embedded Linux System 환경구축 및 분석 37
38 ARM 버전 ARM v5, ARM v5te, ARM v5tej [ARM9E, ARM10E, ARM7EJ, ARM926EJ core] ARM과 thumb 간 상호 작업 DSP 명령 추가 Jazelle 추가 ARM v6 [ARM11 core] SIMD (single instruction multiple data) 명령어 추가 : 멀티미디어 지 원 Vector Floating Point 연산 지원. ARM v7 [Cortex core] SIMD (single instruction multiple data) 128bit명령어 추가 Vector Floating Point 연산 지원 Thumb-2 지원: 16bit/32bit instruction의 i 혼합 사용가능 나 이 텍 Embedded Linux System 환경구축 및 분석 38
39 ARM 버전 ARM core에 붙는 심볼의 의미 T : thumb instruction set M : long multiply l instructioni E : Enhanced DSP instruction D : JTAG debug I : Embedded ICE macrocell J : Jazelle (Java 가속기능) F : VFP (vector Floating Point) S : Synthesizable 나 이 텍 Embedded Linux System 환경구축 및 분석 39
40 ARM core categories Application core Devices running open OS including Linux, Palm OS, Symbian OS and Windows CE in wireless, consumer entertainment and digital imaging applications. Embedded core Embedded real-time systems for storage, automotive body and power train, industrial and networking applications Secure applications Smart card, SIM cards and payment terminals 나 이 텍 Embedded Linux System 환경구축 및 분석 40
41 ARM 계열 나 이 텍 Embedded Linux System 환경구축 및 분석 41
42 ARM Architecture with Android ARM v4 ARM920T : android 1.5 SDK ARM v5 ARM926ejs : android 1.6 SDK 4 ARM v6 ARM1136, 1176 : android 1.6 * VFS : Vector Floating Point * SIMD : 128bit 명령어 * ARM 11 까지 실질적으로 CPU 속도의 차이 말고 별달리 특화된 사항이 없다. * L1 Cache 주로 사용(16bit x 16bit) ARM v7 Cortex-A8, A9, A9 MPCORE : android 2.0 and later SDK 5 = 2.0 SDK 6 = SDK 7 = 나 이 텍 Embedded Linux System 환경구축 및 분석 42
43 세부 목차 Processor 나 이 텍 Embedded Linux System 환경구축 및 분석 43
44 Processor 적절한 Processor를 결정하는데 필요한 조건 가장 중요한 조건은 얼마나 시장에서 검증이 되었고, 얼마나 chip vendor 의 지원을 받을 수 있는지임. 대부분의 chip vendor는 기능이 다 된다고 거짓말 하는 경우가 많음 반도체 영업부서의 말을 믿고서 선정했을 경우 개발의 막바지에 특별한 기능의 문제로 프로젝트에 심각한 타격을 입을 경우(ex> 부트모드에 따라 특정 디바이 스가 fail이 날 경우) 특정 OS에 대한 지원이 된다고 믿고 진행하였으나, 결정적일 때 지원이 안 되는 경우 나 이 텍 Embedded Linux System 환경구축 및 분석 44
45 Processor 적절한 Processor를 결정하는데 필요한 조건(계속) 가장 중요한 조건은 얼마나 시장에서 검증이 되었고, 얼마나 chip vendor 의 지원을 받을 수 있는지임.(계속) 반도체 Bug가 있는 경우가 많으나, chipvendor에서는 외부에 해당 내용을 발표 하지 않는 경우가 허다함 위의 한 경우에라도 해당하면, 프로젝트 막바지에서 엄청난 문제가 생긴다 대부분의 software engineer는 Evaluation board상에서는 최대한의 성능테 스트는 하지 않고, 기능지원 유무만 테스트하는 경우가 많음 나 이 텍 Embedded Linux System 환경구축 및 분석 45
46 세부 목차 Samsung S5PC100의 특징 나 이 텍 Embedded Linux System 환경구축 및 분석 46
47 Samsung SoC의 종류 Mobile SoC > application processor 이름 프로세서 동작 속도 특 징 패키지 S3C44B0 ARM7TDMI 66MHZ Timer,UART,SPI,IIS,ADC,Touch,STN LCD S3C2410 ARM920T 200/266MHz ROM/SRAM/SDRAM, STN/TFT LCD, Touch, MMC/SD card, USB, ADC, NAND Boot 지원 272 FBGA S3C2412 ARM926EJ-S 200/266Mhz S3C2410 feature + msdram 272 FBGA S3C2413 ARM926EJ-S 266Mhz S3C2410 feature + msdram,mddr,onenand + Camera I/F 289 FBGA S3C2440A ARM920T 300/400MHz S3C2410 feature+camera I/F+AC97 I/F 289 FBGA S3C2442 ARM920T 300/400MHz S3C2440 feature + MCP(Multi-Chip-Package) 332 FBGA S3C2443 ARM920T 400/533MHz S3C6400 ARM1176JZF-S 667MHz S3C6410 ARM1176JZF-S 800MHz S3C2440 feature + USB2.0, CF-ATA I/F,HS MMC, SPI, MLC support Multimedia : Camera I/F, H.264/MPEG4/VC1, NTSC/PAL TV out, JPEG, 2D Graphics Connectivity : USB OTG2.0, HOST1.1, AC97/PCM I/F S3C6400의 버그 수정, 거의 동일한 SoC Multimedia : Camera I/F, H.264/MPEG4/VC1, NTSC/PAL TV out, JPEG, 2D Graphics, 3D가속 Engine, Connectivity : USB OTG2.0, HOST1.1, AC97/PCM I/F S5PC100 ARM Coretex-A8 667/833MHz Multimedia : MFC, MPEG-2/4, H.263/264, HDMI 400 FBGA 424 FBGA 424 FBGA 나 이 텍 Embedded Linux System 환경구축 및 분석 47
48 Samsung S5PC100 Block Diagram 나 이 텍 Embedded Linux System 환경구축 및 분석 48
49 S5PC100 주요특징(1) ARM CortexTM-A8 based CPU Subsystem with NEON 64-bit Multi-layer bus architecture Advanced power management for mobile applications Internal ROM for secure booting and internal RAM for security function 8-bit ITU 601/656 Camera Interface up to 8M pixel for scaled and 64M pixel for un-scaled resolution Multi Format Codec provides encoding and decoding of MPEG- 4/H.263/H.264 up to and decoding of MPEG-2/VC1/Divx video up to JPEG codec support up to 0.5Mpixels/MHz TV-out and HDMI interface support for NTSC and PAL mode with image enhancer AC-97 audio codec interface and PCM serial audio interface 3-channel 24-bit I2S interface 2-channel I2C interface 3-channel SPI interface 1-channel TX only S/PDIF interface support for digital audio USB 2.0 OTG supporting high speed (480Mbps, on-chip transceiver) USB 1.1 Host 나 이 텍 Embedded Linux System 환경구축 및 분석 49
50 S5PC100 주요특징(2) Channel SD/SDIO/HS-MMC interface CF version 3.0 interface 24-channel DMA controller (8 channels for Memory-to-memory DMA, 16 channels for Peripheral DMA) Configurable GPIOs 8x8 key matrix interface. 10-channel 12-bit multiplexed ADC Real time clock, PLL, timer with PWM and watch dog timer System timer for variable tick 3D Graphics Acceleration with programmable shader 2D Graphics Acceleration with BitBlit and Rotation MIPI-DSI and MIPI-CSI interface Dedicated IrDA port for SIR/MIR/FIR Asynchronous direct Modem Interface 나 이 텍 Embedded Linux System 환경구축 및 분석 50
51 Clock 설정 Clock setting PLL 및 clock devider 설정 APLL: M=400, P=4, S=1 MPLL: M=106, P=4, S=2 EPLL: M=110, P=4,S=4 DIVAPLL = 1 (1/2 divider) DIVARM = 0 (1/1 divider) DIVD0_BUS = 2 (1/3 divider) DIVD1_BUS = 0 (1/1 divider) DIVMPLL = 0 (1/1 divider) DIVMPLL2 = 0 (1/1 divider) 나 이 텍 Embedded Linux System 환경구축 및 분석 51
52 S5PC100 부트모드 설정 부트모드 OM 및 NFMOD 설정 나 이 텍 Embedded Linux System 환경구축 및 분석 52
53 S5PC100의 PLL S5PC100에는 4개의 PLL이 있음. APLL MPLL EPLL HPLL ARMCLK용으로 사용 : up to 667MHz HCLK(AXI/AHB)용으로 사용 : up to 133MHz PCLK용으로 사용 : up to 66MHz 특별한 주변장치 클럭으로 사용 (ex. UART, IIS, IIC, and etc) HDMI 등을 위한 클럭으로 사용 나 이 텍 Embedded Linux System 환경구축 및 분석 53
54 S5PC100의 PLL 나 이 텍 Embedded Linux System 환경구축 및 분석 54
55 메모리 서브시스템 S5PC100의 메모리 서브시스템은 6개의 메모리 컨트롤러를 가짐 DRAM CONTROLLER STATIC MEMORY CONTROLLER ONENAND CONTROLLER NAND FLASH CONTROLLER COMPACT FLASH CONTROLLER EXTERNAL BUS INTERFACE 나 이 텍 Embedded Linux System 환경구축 및 분석 55
56 S5PC100 메모리 맵 나 이 텍 Embedded Linux System 환경구축 및 분석 56
57 Embedded Linux 분석 및 환경구축 임베디드 리눅스
58 세부 목차 리눅스 개요 나 이 텍 Embedded Linux System 환경구축 및 분석 58
59 리눅스 시스템의 분화 MULTICS(Multiplexed Information & Computing Service) (1960, Bell 연구소/AT&T, 속도가 느림) Ken Thomson, C언어와 어셈블리어, Dennis Ritche 나 이 텍 Embedded Linux System 환경구축 및 분석 59
60 리눅스를 만들어가는 사람들 (1/2) 리누스 토발즈(Linus Torvalds) -최초의 리눅스 커널을 만듦 -리눅스 소스코드를 GNU의 GPL에 따라 인터넷에 공개 리차드 스톨만(Richard Stollman) -GNU 프로젝트의 리더로 FSF (Free Software Foundation)를 설립. -카피레프트(CopyLeft) 주장 나 이 텍 Embedded Linux System 환경구축 및 분석 60
61 리눅스를 만들어가는 사람들 (2/2) 밥 영 (Bob Young) -RedHat의 공동 창립자, 오픈소스 운동의 선구자 턱스(Tux) -리눅스의 마스코트의 펭귄 나 이 텍 Embedded Linux System 환경구축 및 분석 61
62 리눅스와 GNU GNU (GNU s not Unix) 80년대 초반 리차드 스톨만(Richard Stallman)에 의하여 시작 GPL (GNU Public License) GPL에 의거한 모든 소프트웨어는 무료 변경 사항을 포함해서 재 판매하는 것은 허용하나 소스는 공개 해야 함 프로그래머는 자신의 소프트웨어로 발생하는 어떤 위험이나 손해에 대한 법 률적 책임이 없음 Linux에 gcc, emacs등을 이식 BSD의 많은 유용한 유틸리티를 포함 하게하는 계기가 됨 리눅스는 GPL에 의거하여 배포 GPL 규약 나 이 텍 Embedded Linux System 환경구축 및 분석 62
63 리눅스 커널 버전과 개발 커뮤니티 리눅스 커널 버전 주배포 부 배포 짝수(안정 버전), 홀수(개발) 개정 번호 주버전 부버전 주 버전 패치레벨 리눅스 커널 및 관련 커뮤니티 (Download Kernel) (Mailing List) (Open Project Applications) i 나 이 텍 Embedded Linux System 환경구축 및 분석 63
64 리눅스 특징 모놀리틱 커널 구조(monolithic) 다양한 컴포넌트로 구성된 거대하고 복잡한 프로그램 마이크로 커널 구조와 설계 철학이 상이함 모듈 지원 전통적인 유닉스 커널은 정적(statically)으로 컴파일 및 링크 동적 로딩 및 제거가 가능한 커널 코드 제공(디바이스 드라이버) 커널 스레드 제공 주기적으로 수행되는 커널 함수를 지원 다중 프로세서 지원 SMP(symmetric multiprocessing) 지원 나 이 텍 Embedded Linux System 환경구축 및 분석 64
65 리눅스의 장점 목적에 맞게 컴포넌트 커스터마이징 가능 GPL에 따라서 소스코드의 수정 및 배포가 가능 저가의 하드웨어 플랫폼에서 수행 RAM 4MB의 ARM7 시스템에서 네트워크 서버 구축 가능 다른 운영체제와 호환성이 뛰어남 에뮬레이터를 통한 윈도우 애플리케이션 수행 POSIX 준수에 따른 유닉스 애플리케이션의 포팅이 용이 나 이 텍 Embedded Linux System 환경구축 및 분석 65
66 리눅스의 단점 책임지고 개발하는 사람들이 적음 현재도 개발되고 있는 운영 체제이며, 따라서 운영 교육이나 업그레 이드 등의 사후 관리가 어려움 Linux는 컴퓨터에 대한 많은 지식을 요구함으로써 자발적 정신으로 만들어 지는 성격을 가지므로 단순한 문제는 사용자 스스로 해결 해 야함 나 이 텍 Embedded Linux System 환경구축 및 분석 66
67 임베디드 리눅스 임베디드 리눅스 일반 리눅스 커널(바닐라 커널)에서 특정 부분을 다시 맞춘 커널로 단순 히 프레임워크와 배포를 제외한 커널에 관점을 두었음 일반 리눅스의 축소판 임베디드 시스템의 여러 제약 사항을 고려해서 패치 가함 개발용 프레임 워크 임베디드 리눅스 시스템 개발을 돕는 크로스 컴파일러, 디버거, 프로젝 트 관리 소프트웨어를 지칭 주로 호스트에 위치 나 이 텍 Embedded Linux System 환경구축 및 분석 67
68 임베디드 리눅스의 종류 임베디드 리눅스 비영리 임베디드 리눅스 영리 임베디드 리눅스 몬타비스타 전세계 임베디드 리눅스 시장의 약 20~25%를 점유하는 리눅스 업계 1위 고수 실시간 기능, 라이브러리 최적화, ARM, MIPS, PPC 등 다양한 프로세서 지원 WindRiver 미지 리서치(현재 WindRiver사와 통합) StrongARM, ARM9, MIPS, x86 등의 CPU 지원 임베디드 리눅스 응용 소프트웨어 개발 문서 제공 나 이 텍 Embedded Linux System 환경구축 및 분석 68
69 임베디드 리눅스를 선택하는 이유 코드 품질과 신뢰성 모듈성과 구조, 수정 편의성, 확장성 코드 가용성 리눅스의 컴포넌트 대부분은 GNU 일반 공개 라이센스로 배포 소스코드에 문제가 있다면 자유 소프트웨어 커뮤니티에서 해결 하드웨어 지원 폭넓은 하드웨어를 지원하지만 최신 디바이스에 대해서는 늦음 통신 프로토콜과 소프트웨어 표준 다른 OS보다 풍부한 통신 네트워크 기능을 지원과 표준을 따름 대부분의 임베디드 OS에서의 네트워크 부분은 지원이 극히 제한적 사용할수있는툴 커뮤니티 지원 가격 나 이 텍 Embedded Linux System 환경구축 및 분석 69
70 임베디드 리눅스 시스템 구성 타깃용 임베디드 리눅스 시스템 만들기 부트 소프트웨어를 포팅하고 설정 시스템 컴포넌트를 결정 커널을 설정하고 빌드 루트 파일시스템을 빌드 나 이 텍 Embedded Linux System 환경구축 및 분석 70
71 임베디드 리눅스 시스템 구축 시 고려사항 부트로더의 선택은 어떤 것으로 할 것인가? 하드웨어에 가장 의존적인 코드로 구성 부트로더의 옵션에 따라 부팅 방법을 변경 최신 커널을 사용할 것인가? 보통 임베디드 시스템은 충분히 검증된 커널을 사용 여러 기능을 가진 최신 버전 보다 설계 명세서에 기술된 기능을 반영하 는 커널을 선택하는 것이 좋음 오래된 커널을 쓰면 커뮤니티의 지원을 받을 수 없는 경우 발생 루트 파일 시스템에 포함할 것은 무엇인가? 전체 시스템 가동에 필요한 최소한의 응용 프로그램, 라이브러리, 기타 관련 파일만 포함 파일 시스템의 크기를 고려 나 이 텍 Embedded Linux System 환경구축 및 분석 71
72 정리 및 Q/A 나 이 텍 Embedded Linux System 환경구축 및 분석 72
73 세부 목차 리눅스 2.6 특징 나 이 텍 Embedded Linux System 환경구축 및 분석 73
74 Kernel 2.4 vs Kernel 2.6 Core (1/3) Core module-init-tools module-init-tools를 설치해야 커널 모듈이 설치된다. modprobe는 modules.conf 대신 modprobe.conf 파일 참조 모듈파일의 확장자가.o.ko 로 변경 modinfo 를 치면 모듈이 컴파일된 환경을 자세하게 보여준다. 향상된 스케줄러 O(1) scheduler, 서부터 CFS(Completely Fair Scheduler)로 변경 Preemptive Scheduler Anticipatory Scheduler 32 bit dev node Earlier version: 16bit Kernel 2.6: 32bit 로 확장 (major: 12bit, minor: 20bit) 나 이 텍 Embedded Linux System 환경구축 및 분석 74
75 Kernel 2.4 vs Kernel 2.6 Core (2/3) Core 향상된 Thread 지원 새로운 드라이버 모델 Posix High Resolution Timer 지원 Kconfig 커널 설정 및 빌드 도구 make dep 없어짐 make gconfig 추가 allsysconfig 모든 기능을 커널에 넣는 기능 allmodconfig 모든 기능을 모듈로 만드는 기능 allnoconfig 모든 기능을 빼버리는 기능 빌드 메시지 숨기기 기능 나 이 텍 Embedded Linux System 환경구축 및 분석 75
76 Kernel 2.4 vs Kernel 2.6 Core (3/3) Core CPU Hotplug 기능 Software Suspend 기능 윈도우의 하이버네이션 기능과 유사 시스템의 메모리 상태를 스왑 영역에 저장하였다가 다음 리눅스 커널이 부팅할 때 스왑 영역을 읽어서 이전 상태로 되돌리는 기법 나 이 텍 Embedded Linux System 환경구축 및 분석 76
77 Kernel 2.4 vs Kernel 2.6 Hardware (1/2) Hardware support 새로운 아키텍처 지원 ALSA PPC64, X86-64, UML(User Mode Linux) 여러 가지 고급기능을 제공하는 새로운 사운드 장치 OSS 와 호환 ALSA OSS Emulation 모듈 포함 CPU Frequency Scaling 지원 전원 절약을 위해 각종 CPU의 Frequency Scaling 지원이 추가 DVB 지원 디지털 방송장비를 위한 DVB(Digital Video Broadcasting)기능이 추가 리눅스에서 디지털 TV 시청가능 Video4Linux 재 작성 나 이 텍 Embedded Linux System 환경구축 및 분석 77
78 Kernel 2.4 vs Kernel 2.6 Hardware (2/2) Hardware support ACPI Support 시스템에 연결된 각종 장치의 상태를 BIOS와 연계해서 알 수 있는 ACPI 드라이버 포함 Console & Input Devices 콘솔 계층 및 입력장치 드라이버가 재 작성되어 완전히 모듈화 시킬 수 있음. Serial ATA Support Bluetooth Support 나 이 텍 Embedded Linux System 환경구축 및 분석 78
79 Kernel 2.4 vs Kernel 2.6 File system File System XFS Support SGI의 XFS가 리눅스에 기본 포함됨. ACL Support 파일에 여러 가지 속성을 줄 수 있는 ACL 기능 포함 Ext2, Ext3, jfs, xfs 에서 지원 Plugin을 지원하는 새로운 Quota 시스템 Ntfs-ng 추가 Sysfs 새로운 ntfs 드라이버인 ntfs-ng가 리눅스에 기본으로 포함 현재 각종 장치의 상태를 보여주는 가상 파일시스템인 sysfs 가 추가 나 이 텍 Embedded Linux System 환경구축 및 분석 79
80 커널 소스 구하기 & 설치 커널 소스 공식 리눅스 커널 사이트 전체 소스 묶음 Incremental patch GNU zip p(gzip) p)혹은 bzip2 포맷으로 배포 설치 gzip 포맷 tar xvzf linux-x.y.z.tar.gz bzip2 포맷 gzip 보다 압축률이 더 좋다 tar xvjf linux-x.y.z.tar.bz2 x.y.z.tar.bz2 나 이 텍 Embedded Linux System 환경구축 및 분석 80
81 리눅스 소스 코드 구성도 Linux fs net drivers init include ipc lib kernel mm arch sound ext2 unix inet net linux mips hpfs char asm-alpha alpha msdos block asm-i386 sparc nfs scsi asm-m68k m68k minix asm-mips arm proc asm-arm sysv kernel boot mm < 버전부터는 커널 소스 디렉터리의 구조가 일부 변경됨> 나 이 텍 Embedded Linux System 환경구축 및 분석 81
82 각 디렉터리 상세 설명 (1/5) arch/ CPU 종속적인 부분, 각 처리기 마다 하위 디렉터리로 구성됨 (arch/i386, arch/alpha, arch/arm ) arch/arm/boot/ 부트스트랩핑 코드 arch/arm/kernel/ 하드웨어 종속적인 커널 관리 루틴 트랩, 인터럽트 처리 루틴 문맥 교환 루틴 장치 구성, 초기화 루틴 arch/arm/mm/ 하드웨어 종속적인 메모리 관리 루틴 나 이 텍 Embedded Linux System 환경구축 및 분석 82
83 각 디렉터리 상세 설명 (2/5) init/ 하드웨어 독립적인 커널 초기화 루틴 (start _ kernel) 태스크 0 (init_task or task[0]) 생성 태스크 1, 2, 3 등 데몬 프로세스 생성 kernel/ 리눅스 커널의 가장 중심적인 디렉터리 (central section of the kernel) 하드웨어 독립적인 커널 관리 루틴 (하드웨어 종속적인 커널 관리 루 틴은 arch/arm/kernel 디렉터리에 존재) fork, exit 등 태스크 관련 시스템 호출 처리 루틴 스케줄러 (scheduler) 루틴 시그널 처리 (signal handling) 루틴 시간 관리 (time management) 루틴 나 이 텍 Embedded Linux System 환경구축 및 분석 83
84 각 디렉터리 상세 설명 (3/5) mm/ 하드웨어 독립적인 메모리 관리 루틴 (하드웨어 종속적인 메모리 관리 루틴은 arch/arm/mm 디렉터리에 존재) 가상 메모리 관리 루틴 페이징 (paging), 스와핑(swapping) fs/ 가상 파일 시스템 (virtual file system ) 관리 루틴 open, read 등 태스크 관련 시스템 호출 처리 루틴 특정 파일 시스템 관리 루틴은 하위 디렉터리에 존재 (ext2, proc, nfs, msdos, coda,.. ) 나 이 텍 Embedded Linux System 환경구축 및 분석 84
85 각 디렉터리 상세 설명 (4/5) drivers/ 장치 드라이버 루틴 drivers/block/ : 블록 장치 드라이버. 예를 들어 IDE 디스크 (hd) drivers/char/ : 문자 장치 드라이버. 예를 들어 serial ports, tty, modem,..) drivers/net : 네트웍 장치 드라이버. 예를 들어 3C509,... drivers/pci/ : PCI bus 제어 drivers/cdrom/ : CD-ROM 드라이버 drivers/scsi/ : SCSI 인터페이스 관리 sound/ ipc/ 프로세스간 통신 루틴 세마포어(semaphores), 공유 메모리(shared memory), 메시지 큐 (message queues) 나 이 텍 Embedded Linux System 환경구축 및 분석 85
86 각 디렉터리 상세 설명 (5/5) net/ TCP/IP, ARP 등 네트웍 통신 프로토콜 (네트웍 장치 드라이버는 drivers/net에 존재) 소켓 인터페이스 include/ 커널 헤더 하드웨어 독립적인 헤더 : include/linux/ / 하드웨어 종속적인 헤더 : include/asm-***/ (예를 들어 Intel CPU 종속적인 헤더는 include/asm-i386/ 디렉터리에 존재) lib/ 커널 라이브러리 루틴 Documentation/ 커널 문서 디렉터리 나 이 텍 Embedded Linux System 환경구축 및 분석 86
87 정리 및 Q/A 나 이 텍 Embedded Linux System 환경구축 및 분석 87
88 Embedded Linux 분석 및 환경구축 임베디드 리눅스 개발환경
89 세부 목차 Cross development 환경 개요 나 이 텍 Embedded Linux System 환경구축 및 분석 89
90 일반 애플리케이션 개발 환경 일반 애플리케이션 개발 환경 개발을 진행하는 호스트 시스템과 애플리케이션을 실행시키는 타깃 시스템 이 동일한 경우가 대부분이다. 애플리케이션 개발자는 개발 결과물의 형태만 신경 쓰면 된다. 일반적으로, 내부적으로 어떤 일이 일어나는지에 대한 세부 사항을 꼭 알 필 요는 없다. 애플리케이션 개발자는 개발 툴에게 하드웨어 정보를 제공할 필요가 없다. 개발 툴은 항상 같은 방식으로 코드를 생성한다. Compiler는 현재 사용하고 있는 PC의 프로세서 기계어로 번역해준다. 예)x86계열의 호스트에서 개발했다면 x86용 기계어로 전환해준다. HOST Compiler 실행 가능한 이미지 생성 Host와 Target이 동일하다. Target 나 이 텍 Embedded Linux System 환경구축 및 분석 90
91 임베디드 시스템 개발 환경 Target 프로세서 기계어로 번역 HOST Cross Compiler & IDE 실행 가능한 이미지 생성 Emulator/Debugger Debugging Hardware Platform (Target) Industrial Controller Home Automation/ Network Car Navigator MP3 Player Smart Phone Game Machines PDA 나 이 텍 Embedded Linux System 환경구축 및 분석 91
92 임베디드 소프트웨어 개발 환경 Embedded Software 개발환경 Host system(compile)/target System(excute)로 구분되어 진다. Development Tool에 Hardware에 대한 Setting을 해줘야 함 임베디드 시스템은 고유한 하드웨어 상에서 동작하며, 개발 툴은 하드웨어가 어떻게 구성되어 있는지 모르기 때문이다. Host시스템에서는 Target에 알맞은 기계어를 생성하기 위해서 Cross toolchain이 있어야 한다. 임베디드 시스템 개발자는 개발 툴에 대해서, 그리고 개발 툴이 어떻게 동작하는지에 대해서 일반 애플리케이션 개발자보다 더 많이 알고 있어 야 한다. 개발할 때 Runtime 환경까지 명시를 해야 한다. 예) RAM, ROM, 플래시 메모리 혹은 어떤 메모리에서 실행할 것인지? 나 이 텍 Embedded Linux System 환경구축 및 분석 92
93 임베디드 소프트웨어 개발 환경 (1/2) 일반적인 임베디드 소프트웨어 개발 환경의 모식도 HOST Emulator/Debugger Target USB/Parallel/ Ethernet JTAG I/F Serial/ Ethernet Cross Cable x86 Processor Cross Development 환경 ARM Processor 나 이 텍 Embedded Linux System 환경구축 및 분석 93
94 임베디드 소프트웨어 개발 환경 (2/2) 호스트 시스템(Host system) 타깃 시스템을 개발하기 위한 개발환경을 제공하는 시스템 Windows or DeskTop Linux or Unix WorkStation 타깃 시스템을 위한 어셈블러, 컴파일러, 링커 등의 개발 도구 제공 보통 IDE (Integrated Development Environment) 형태로 제공 타깃 시스템(Target system) 개발하고자 하는 임베디드 시스템 ARM, MIPS, SuperH, PowerPC, 나 이 텍 Embedded Linux System 환경구축 및 분석 94
95 교차 개발을 위한 개발 도구 (1/3) 교차 컴파일러(cross compiler) 호스트 시스템의 프로세서와 운영체제 위에서 동작하면서, 다른 프로세 서용 오브젝트 코드를 생성할 수 있는 컴파일러 교차 컴파일러들 GNU GCC ARM의 ADS(ARM Developer Suit) / RVDS(RealView Developer Suit). 임베디드 시스템 소프트웨어의 개발은 Cross Compiler를 이용 보통 타깃 시스템에서 개발하는 것은 어려움 CPU Emulation software를 이용한 개발도 증가추세(ex> QEMU, scratchbox Nokia Internet Tablet 770) 근래 Embedded Linux는 Native compiler를 사용하는 경우가 많아지 는 추세(Debian & Gentoo Linux) 나 이 텍 Embedded Linux System 환경구축 및 분석 95
96 교차 개발을 위한 개발 도구 (2/3) 링커(Linker) 불완전한 object 파일들을 합쳐 모든 코드와 데이터를 포함하는 새 로운 object 파일을 생성해 내는 도구 크로스 컴파일이 된 object 파일은 단순히 명령어 코드로 해석만 되 어있는 상태 즉 문법적으로 해석만 되어있는 상태이다. 프로그래머가 선언한 변수의 메모리 공간이나 참조한 함수의 위치 에 대한 정보 등이 결정되지 않은 상태 링커는 각각의 오브젝트 파일들이 서로 참조하고 연결될 수 있도록 링크시키는 역할을 한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 96
97 교차 개발을 위한 개발 도구 (3/3) 로케이터(Locator) 혹은 Loader 메모리에서 실행 가능하도록 코드와 데이터를 배치하여 최종 바이 너리 이미지를 생성하는 도구 프로그램의 일부분은 ROM에 있어야 하고, 또 다른 부분은 RAM에 있어야 한다. 소스 코드는 전원이 꺼지더라도 지워지지 않아야 하기 때문에 ROM에 있어야 한다. 변수는 값이 변경되어야 하기 때문에 RAM에 있어야 한다. 부팅 시 RAM영역으로 Copy 부트코드에 ROM에서 RAM으로 복사하는 과정이 필요. Linker script 파일 코드와 데이터의 메모리 배치를 정의한 파일 대부분 링커에 포함되어 있다. 나 이 텍 Embedded Linux System 환경구축 및 분석 97
98 임베디드 소프트웨어 개발 과정 일반적인 임베디드 소프트웨어 개발 과정 여기에서 사용하는 컴파일러와 어셈블러는 교차 컴파일러와 교차 어셈 블러이다. <임베디드 시스템의 소프트웨어 개발 절차> 나 이 텍 Embedded Linux System 환경구축 및 분석 98
99 타깃 시스템에 실행 이미지 올리기 개발된 실행 이미지를 타깃 하드웨어에 올리는 방법들 ROM Writer ROM Emulator Flash Memory RAM 나 이 텍 Embedded Linux System 환경구축 및 분석 99
100 ROM Writer 실행 가능한 이미지를 타깃 시스템에 올리는 전통적인 방법 해당 이미지 파일을 ROM에 저장 후 타깃 시스템에 장착 PROM 프로그래머에서 프로그래밍한 PROM은 타깃 보드의 소켓에 장 착 생성된 결과파일을 ROM에 직접 쓰기 매번 ROM을 기판에서 제거하고 부착 해야 함 <ROM에 프로그램을 쓰기위한 장비> 나 이 텍 Embedded Linux System 환경구축 및 분석 100
101 ROM Emulator ROM을 대체하는 장치인 ROM 에뮬레이터 RAM을 내장하고 있는 ROM 장치 이미지의 다운로드와 프로그래밍 시간을 단축 타깃 시스템의 관점에서 ROM 에뮬레이터는 ROM과 같은 하드웨어 기판의 ROM 대신에 ROM을 Emulation 호스트 시스템과 시리얼 포트 혹은 네트워크로 연결 개발된 소프트웨어의 빠른 전송 개발 시간의 단축 ROM은 뽑아낸다. ROM 에뮬레이터 TARGET HOST <임베디드 시스템 개발에서 ROM 에뮬레이터의 사용> 나 이 텍 Embedded Linux System 환경구축 및 분석 101
102 Flash Memory 하드웨어 장비 이용 JTAG과 같은 하드웨어 디버깅 인터페이스를 지원하는 장비 이용 모니터 프로그램 통신 기능과 플래시 프로그래밍 기능이 있는 부트로더나 모니터 프로그 램을 사용 U-Boot RedBoot 나 이 텍 Embedded Linux System 환경구축 및 분석 102
103 정리 및 Q/A 나 이 텍 Embedded Linux System 환경구축 및 분석 103
104 세부 목차 Cross development 환경 구축 나 이 텍 Embedded Linux System 환경구축 및 분석 104
105 호스트 개발 환경 선택 리눅스 환경의 호스트 일반적인 유틸리티들이 제공 된다. 배포 판 어느 것을 사용해도 상관 없지만, 여기서는 Ubuntu Linux 8.10 을 사용하고 있다. VirtualBox와 같은 Virtual machine을 사용할 수도 있다. 윈도우 환경의 호스트 Cygwin과 같은 가상의 리눅스 환경을 만들어 주는 툴이 필요하다. 램 디스크와 같은 이미지를 만들기 어렵다. 각종 네트워크 설정(NFS, TFTP)을 직접 설정 하여야 한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 105
106 호스트와 타깃의 연결 호스트와 타깃의 연결 JTAG Flash ROM Write, RAM download Ethernet TFTP: 실행 이미지 다운로드, NFS: 루트 파일 시스템 마운트 Serial (RS232) 디버깅 출력 메시지 용도 Ethernet Serial(RS232) win: USB / JTAG (Trace 32) VirtualBox: target: 나 이 텍 Embedded Linux System 환경구축 및 분석 106
107 준비단계 VirtualBox 준비 VirtualBox다운로드 위치: org/virtualbox/2 2 2/VirtualBox Win.exe Ubuntu Linux 8.10 설치된 VirtualBox 이미지 준비 Windows에서 VirtualBox를 설치한 다음 c:\vbox_image 폴더를 만들고 (폴더위치를 변경해도 됨) Ubuntu Linux 8.10을 설치하여 이미 만들어 놓은 vbox image파일을 복사(edu_vbox.vdi) VirtualBox를 실행시켜 새로 만들기 를 선택하고 edu_vbox.vdi 파일 을등록 상세한 것은 VirtualBox & Ubuntu Linux Installation 문서의 맨 마 지막 부분을 반드시 참조할것. 나 이 텍 Embedded Linux System 환경구축 및 분석 107
108 준비단계 이미 VirtualBox에 설치된 Ubuntu Linux 이미지 파일을 이용 이미 다른 Windows에서 VirtualBox를 설치하여 Ubuntu Linux 8.10을 설치해두었다면 *.vdi 파일만 복사하여 이용할 수 있음 Ubuntu Linux 를 새로 설치해야 하는 시간낭비를 줄일 수 있음. 똑같은 개발환경을 다른 Windows 컴퓨터에 그대로 옮길수 있기 때문 에 교육용 시스템에서 매우 편리함. 설치 방법 이미 만들어진 *.vdi 파일을 적당한 디렉토리에 복사하고 virtualbox를 실행시켜 새로 만들기 를 누른 후 Virtualbox 설정을 진행하되 HDD 설정에서 미리 복사해둔.vdi 파일을 고르면 된다. 새로 Ubuntu Linux 를 설치하지 않기 때문에 CD/DVD-ROM 설정은 ISO파일 대신에 호스트 CD/DVD 드라이브 로 바꿔주고 부팅 순서를 하드디스크 가 맨위에 나타나도록 수정하면 된다. 나 이 텍 Embedded Linux System 환경구축 및 분석 108
109 호스트 터미널 SecureCRT SecureCRT 를 설치 하여 타깃 시스템과의 통신에 사용 나 이 텍 Embedded Linux System 환경구축 및 분석 109
110 호스트 터미널 - SecureCRT의 사용 호스트 타깃간 연결 설정 연결세션의 속성설정 아래를 참고하여 호스트 <-> 타깃간 연결을 설정 나 이 텍 Embedded Linux System 환경구축 및 분석 110
111 타겟 터미널 - SecureCRT의 사용 목적 serial을 통한 부트로더 명령, 디버깅 메시지, 쉘 등의 확인 용도 설 치 SecureCRT setup.exe을 수행하여 SecureCRT 설치 properity> p COM1, , 8bit, none save Setup 터미널 프로그램으로 다음과 같은 것들을 사용할 수 있다. 윈도우 기본 하이퍼터미널 SecureCRT PineTerm DNW.EXE linux의 minicom 등 나 이 텍 Embedded Linux System 환경구축 및 분석 111
112 터미널 설정 예) - linux minicom 시리얼 통신 프로그램으로 minicom 사용 시리얼 포트의 확인 dmesg grep tty -s 옵션을 사용하여 minicom 기본 포트 설정 minicom -s 설정 시 체크 사항 Serial Device : /dev/ttys0 사용중인 포트로 설정 Bps: N1 Hardware Flow Control : No 나 이 텍 Embedded Linux System 환경구축 및 분석 112
113 터미널 설정 예) - linux minicom minicom 설정 시 주의사항 /dev/ttys0등의 장치가 접근허가를 거부하는 메시지가 나올 경우 chmod 666 /dev/ttys0 /tt Cannot create lockfile. Sorry. 라는 메시지가 나올 경우 chmod 777 /var/lock 노트북 사용자는 대부분 /dev/ttyusb0 형태의 디바이스 파일이름으로 사용한다. 글자가 깨지는 경우 baudrate 설정을 확인할 것 나 이 텍 Embedded Linux System 환경구축 및 분석 113
114 호스트 서버 구동 - TFTP 환경 설정 (1/2) 개요 TFTP는 udp를 사용하는 프로토콜로 주로 임베디드 보드의 이미지 다운 로드에 쓰이고 있다. Linux에서는 독립적으로 동작시키기 힘들기 때문에, tftp daemon의 경 우 inetd, xinetd와 같은 internet superdaemon의 도움을 받아야 한다 inetd와 xinetd의 경우는 설치하는 방법이 상이함. 환경 설정 VirtualBox를 실행하여 Ubuntu Linux로 부팅한 다음 터미널을 실행시킨 후 su - 명령으로 root 권한을 획득한다. 리눅스 커널 이미지 및 BootLoader 파일을 /tftpboot 폴더로 복사 후 /etc/init.d/xinetd restart 명령으로 tftp 서비스 재시동. 자세한 내용은 VirtualBox & Ubuntu Linux Installation 문서의 47페 이지를 참고할 것. 나 이 텍 Embedded Linux System 환경구축 및 분석 114
115 호스트 서버 구동 - TFTP 환경 설정 (2/2) TFTP 설정 sudo apt-get install xinetd tftpd tftp sudo vi /etc/xinetd.d/tftp/ d/ service tftp { protocol = udp port = 69 socket_type = dgram wait = yes user = nobody server = /usr/sbin/in.tftpd server_args = /tftpboot disable = no } sudo mkdir -p /tftpboot sudo chmod 777 /tftpboot sudo cp * /tftpboot sudo /etc/init.d/xinetd restart 필요한 파일들을 복사해둠. 나 이 텍 Embedded Linux System 환경구축 및 분석 115
116 호스트 서버 구동 - NFS NFS(Network File System) 사용 목적 임베디드용 응용 프로그램을 개발하여 테스트하기 위해서는 컴파일한 실행 파일을 램 디스크에 로딩해야 한다. 하지만 응용 프로그램을 컴파일할 때마다 램 디스크를 host에 mount하 여 업데이트하기는 힘든 일이다. NFS는 네트워크를 통해 파일 시스템을 mount할 수 있게 해주는 시스 템이다. NFS를 이용해 host의 작업 디렉터리를 target 보드의 램 디스크에 mount하여 사용하면 응용 프로그램 개발을 훨씬 편리하게 할 수 있다. 나 이 텍 Embedded Linux System 환경구축 및 분석 116
117 호스트 서버 구동 - NFS의 구성도 Host 1.TFTP request Flash memory u-boot Target RAM (uimage 재배치/ RAM zimage 압축 해제 후) (uimage 압축 해제 전) 5. 분기 및 커널압축 4.커널분기 해제 Linux 커널 (bootm) uimage 2.TFTP reply (압축커널) 3.압축커널 다운로드 6. NFS 마운트 Host Hard Disk (File System) *uimage는 bootm의 매개변수를 읽을 수 있다. 나 이 텍 Embedded Linux System 환경구축 및 분석 117
118 호스트 서버 구동 - NFS 서비스 설정 (2/2) 시스템 서비스 설정 sudo vi /etc/exports 내용을 수정한 다음 # 공유할 디렉토리 공유를 허용할 IP대역 및 옵션 /opt/embedded_project *(rw, no_root_squash) sudo /etc/init.d/nfs-kernel-server restart 나 이 텍 Embedded Linux System 환경구축 및 분석 118
119 호스트 서버 구동 - NFS 환경 설정 (1/3) NFS client 가 마운트할 디렉터리를 생성한다. NFS가 제대로 되는지 test한다. # mkdir /root/nfs # cp a /etc/* / /root/nfs /etc/exports에 다음 내용을 넣고 작성한다. /root/nfs : 공유할 디렉터리 이름 *: 허용 호스트, 다른 예) / rw: access permission i no_root_squash: root 로 로그인한 사용자를 root로 맵핑 no_all_squash: root를 제외한 사용자인 경우 동일한 UID와 GID 로인식 /root/nfs *(rw,sync,no_root_squash,no_all_squash) 나 이 텍 Embedded Linux System 환경구축 및 분석 119
120 호스트 서버 구동 - NFS 환경 설정 (2/3) NFS 서비스를 재시동 한다. - Ubuntu Linux의 경우 # sudo /etc/init.d/nfs-kernel-server restart (참고)각 리눅스 배포판마다 NFS와 tftp의 설정은 동일하나, 동작시키 는 방법은 틀린 경우가 많음 inetd를 쓰느냐 xinetd를 쓰느냐에 따라 틀림(tftp의 경우) nfs의 경우는 /etc의 구성에 따라 틀림(rc.d의 구성에 따라 start시키는 t시키는 방 법이 틀림) 나 이 텍 Embedded Linux System 환경구축 및 분석 120
121 호스트 서버 구동 - NFS 환경 설정 (3/3) NFS 서비스 확인 nfs 서비스가 정상적으로 동작하는지 확인 # netstat -a grep nfs tcp 0 0 *:nfs *:* LISTEN udp 0 0 *:nfs *:* # showmount -e localhost Export list for localhost: /root/nfs * Client 에서 사용 예) 서버의 디렉터리를 마운트 # mkdir /mnt/nfsdir # mount t nfs :/root/nfs /mnt/nfsdir 나 이 텍 Embedded Linux System 환경구축 및 분석 121
122 NFS 시스템 마운트 시 주의점 사설망 사용 시 VirtualBox를 사용하는 경우 NAT로 네트워크를 설정했을 때는 가상 머신 내부에 사설망이 구성된 것처럼 구성되므로 NFS를 사용할 수 없게 된다. 부여된 IP를 사용하거나 DHCP 사용 시 VirtualBox네트워크 설정을 Bridged로 하고 IP를 직접 할당하거나 DHCP 로 IP를 부여 받아야 한다. gateway IP가 설정 되지 않으면 마운트 시 가끔 timeout 되기도 한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 122
123 호스트 서버 구동 - samba 설정 (Option) 목적 윈도우와 리눅스간의 자료 공유를 편리하게 하기 위해 특정 디렉터리를 네트워크로 연결 한다. 설정 방법 sudo vi /etc/samba/smb.conf [global] workgroup = WORKGROUP server string = %h Server (Samba, Ubuntu) hosts allow = log file = /var/log/samba/%m.log max log size = 50 dns proxy = no username map = /etc/samba/smbusers guest ok = yes winbind use default domain = no 나 이 텍 Embedded Linux System 환경구축 및 분석 123
124 호스트 서버 구동 - samba 설정 (Option) #========= Share Definitions ======================= [work] path = /work writeable = yes browseable = yes guest ok = yes public = yes [rootfs_nfs] path = /work/rootfs_nfs writeable = yes browseable = yes guest ok = yes public = yes 삼바 사용자 설정: vim /etc/samba/smbusers root = nt-edu 삼바 패스워드 생성: smbpasswd root 윈도우에서 네트워크 드라이브로 연결 (동일 계정명으로 사용) 나 이 텍 Embedded Linux System 환경구축 및 분석 124
125 실습준비 실습파일들 압축해제 ke-linux-work.tar.gz 파일을 host의 /root로 복사 ubuntu terminal창에서 cd /root tar xzf ke-linux-work.tar.gz /root/ntc100 디렉토리 생성된 것을 확인 나 이 텍 Embedded Linux System 환경구축 및 분석 125
126 정리 및 Q/A 나 이 텍 Embedded Linux System 환경구축 및 분석 126
127 세부 목차 File system과 Root File system 나 이 텍 Embedded Linux System 환경구축 및 분석 127
128 파일 시스템이란? 파일 시스템 디렉토리, 파일을 보조 기억장치에 저장함 사용자에게 파일을 접근(r/w/x)할 / 수 있게 해줌 r Read w Write x excute 파일 시스템은 여러 종류가 있다. Windows : FAT, FAT32, NTFS Linux : ext2, ext3, ReiserFS, JFS, NFS, 나 이 텍 Embedded Linux System 환경구축 및 분석 128
129 파일 시스템이란? 대부분 파일 시스템들은 계층적인 디렉토리 구조를 사용 최상위 디렉토리를 루트 디렉토리 라고 부른다. 파일 시스템은 디렉토리, 파일을 블록으로 나누어 저장매체에 저장 한다. 블록(block) : 데이터 저장 단위로서 1개 이상의 섹터로 구성됨. 나 이 텍 Embedded Linux System 환경구축 및 분석 129
130 파티션과 마운트 (하드 디스크) 파티션(Partition) 디스크의 저장 공간을 여러 개의 구역으로 나누어 사용 어떤 하나의 파티션이 최상위 루트 디렉토리를 포함해야 한다. 이 파티션을 루트 파티션 이라고 부름 다른 파티션은 루트 파티션에 마운트 해서 사용한다. 각 파티션은 각기 다른 파일 시스템으로 포맷될 수 있다. /dev/sda /dev/sda2/ d : root tdirectory / directory /dev/sda1/ d /dev/sda3 /home /var /usr /mnt mount /dev/sdb1: USB 저장장치 / directory /dev/sda2 /movie /mp3 / 나 이 텍 Embedded Linux System 환경구축 및 분석 130
131 파티션과 마운트 mount 명령어 $ mount 현재 mount되어 있는 내용을 출력 <예> /dev/hda3 파티션을 루트 파티션의 /usr에 마운트하는 경우 $ mount /dev/hda3 /usr 또는 $ mount /usr 또는 $ mount /dev/hda3 umount 명령어 : 마운트된 파티션을 언마운트 $ umount /usr $ umount /dev/hda3 명령을 내릴때 스펠링에 주의할것 unmount umount 표기는 umount 읽을때는 언마운트 나 이 텍 Embedded Linux System 환경구축 및 분석 131
132 파티션과 파일 시스템 각 파티션은 서로 다른 파일 시스템으로 포맷할 수 있다. 예를 들어, 루트 파티션은 ext2 파일 시스템, /usr 파티션은 ext3 파 일 시스템으로 포맷하여 사용할 수 있다. 포맷하기 (포맷: 파일 시스템 만들기) mkfs.ext2, mkfs.ext3, mkfs.msdos, mkfs.jffs2, mke2fs, etc 나 이 텍 Embedded Linux System 환경구축 및 분석 132
133 루트 파일 시스템 (root file system) 루트 파일 시스템이란? 루트 파티션에 사용될 파일 시스템으로, Linux/UNIX 부팅시 필요한 파 일들을 모아놓은 저장장치 혹은 디렉토리의 구성을 일컽는 용어 커널과 루트 파일 시스템은 반드시 필요함 루트 파일 시스템은 부팅 시에 항상 마운트된다. 루트 파일 시스템이 없거나 구성이 올바르지 않으면 리눅스가 구동되지 않는다. 나 이 텍 Embedded Linux System 환경구축 및 분석 133
134 루트 파일시스템의 구성 / Root Directory라고 불리며, 모든 디렉토리는 / 를 기준으로 생성된다. /는 모든 디렉토리의 출발점이자 다른 파티션의 연결점. /bin, /sbin 시스템을 사용하기 위한 기본적인 명령어들이 시스템 관리 명령어와 시 스템을 복구할 때 사용하는 필수 명령어 등이 존재. /boot PC 전용으로 일반적으로 사용되는 디렉토리며, 부팅에 필요한 커널등이 존재. /dev Device driver관련된 모든 장치 파일이 위치한다. (2.6서부터는 udev, sysfs와 연동) /etc 시스템 설정파일들이 위치(가장 중요한 directory) 나 이 텍 Embedded Linux System 환경구축 및 분석 134
135 루트 파일시스템의 구성 /home /lib 사용자의 홈 디렉토리가 생성되는 곳이다. (ftp, mysql, tomcat 등 별도 의 공간을 요구하는 서비스를 위한 디렉토리로 사용할 수도 있다.) 시스템 운영 및 프로그램 구동할 때 필요한 공유 라이브러리와 부팅할 때 사용되는 커널 모듈이 위치한다.(가장 필수적인것만 위치한다) /mnt storage 장치를 일시적으로 마운트하기 위한 마운트 포인트를 제공한다. 일반적으로 해당 디렉토리는 비어 있음 /opt add-on 패키지가 설치되는 디렉토리, Embedded에서는 주로 툴체인등 이 위치하는 경우가 많다. 나 이 텍 Embedded Linux System 환경구축 및 분석 135
136 루트 파일시스템의 구성 /root 루트 사용자의 홈 디렉토리 /proc 프로세스와 시스템 정보를 제공하기 위한 목적으로 설계된 가상 파일 시 스템을 사용하는 디렉토리이다. /proc 디렉토리의 파일은 cat 혹은 more 명령어로 읽을 수 있으며 특 정 파일의 경우 echo 같은 명령어로 내용을 변경할 수도 있다. 주로 디버깅 용도로 많이 사용된다. 나 이 텍 Embedded Linux System 환경구축 및 분석 136
137 루트 파일시스템의 구성 /tmp 임시 파일을 저장하는 디렉토리. 수시로 파일이 생성되고 삭제된다. NAND나 NOR를 이용한 root filesystem구성일 경우는 조심해야하는 디렉토리 /usr 전통적으로 시스템 부팅에 반드시 필요하지 않은 utility성격의 파일들 이 존재함. 하지만, 근래는 반드시 필요한 패키지들도 존재하게 됨으로써 반드시 구 성해 주어야 하는 디렉토리 /sys 2.6에서 새로 생겨난 kernel device model지원(중요) 나 이 텍 Embedded Linux System 환경구축 및 분석 137
138 루트 파일시스템의 구성 /var 내용이 자주 변경되는 가변 자료가 저장됨. 시스템 운영할 때 발생되는 로그(log), 메일 송/수신할 때 임시로 저장되 는 스풀(spool), 프린터로 전송하기 위해 임시로 저장하는 프린트 스풀 데이터 등 /lost+found fsck가 파일시스템을 점검할 때 손상된 데이터를 복구하지 못했다면 lost+found 디렉토리에 복구하지 못한 데이터 파일을 위치시킨다. 일반적으로 특정 filesystem으로 format되고, mount되면 생기는 경우 가많다 나 이 텍 Embedded Linux System 환경구축 및 분석 138
139 루트 파일시스템 구축 절차 임베디드 시스템의 저장 장치 RAM Flash memory Hard disk 파일 시스템을 하나의 파일로 만든다. 루트 파일시스템의 내용(디렉토리, 파일)을 만들고 특정 파일시스템의 형태를 가지는 이미지 파일로 변환함 만든 이미지 파일을 타겟의 비휘발성 저장 장치에 다운로드함 커널을 알맞게 수정하여 컴파일하고 타겟에 다운로드함 나 이 텍 Embedded Linux System 환경구축 및 분석 139
140 File system in Kernel Kernel 입장에서의 filesystem 나 이 텍 Embedded Linux System 환경구축 및 분석 140
141 RAM Disk initrd (Initial Ram Disk) RAM의 일부분을 하드 디스크 드라이브처럼 사용할 수 있게 해주는 블록 장치 드라이버 Ex> loopback 장치 파일 하나를 하나의 블록 장치처럼 사용할 수 있게 한 가상 장치 파일을 다른 장치처럼 마운트하여 사용할 수 있다. mount o loop rd.img /mnt cp sample.c /mnt umount /mnt X86용의 initrd와 임베디드 리눅스의 initrd와는 차이가 존재함 나 이 텍 Embedded Linux System 환경구축 및 분석 141
142 MTD MTD (Memory Technology Device) 메모리 장치 (특히, 플래시 메모리)를 저장 장치로 사용할 수 있게 해주 는 장치 드라이버 플래시 메모리에 읽기, 쓰기, 삭제 연산을 수행하는 인터페이스 제공 파티션 기능 제공: 한 플래시 장치를 여러 개로 파티션할 수 있다. 나 이 텍 Embedded Linux System 환경구축 및 분석 142
143 저장장치 및 파일 시스템의 선택 타겟 시스템의 성능, 메모리(RAM, flash) 용량 등을 종합적으로 고려하여 사용할 파일 시스템과 저장장치를 결정한다. Ex 1> RAM disk사용 Ex 2> HDD사용 Ex 3> Flash 사용 Ex 4> 1/2/3 복합 사용 나 이 텍 Embedded Linux System 환경구축 및 분석 143
144 정리 및 Q/A 나 이 텍 Embedded Linux System 환경구축 및 분석 144
145 세부 목차 Cross toolchain 빌드 및 구축 나 이 텍 Embedded Linux System 환경구축 및 분석 145
146 교차 개발 툴 (Cross toolchains) GCC GNU Compiler Collection (GCC) 1987년 리차드 스톨만이 GNU Project Compiler로 작성 Binutils에 들어있는 as를 불러서 목적 파일로 만든 다음 ld를 불 러 최종 파일을 만들어 낸다. Support Languages Ada C, C++ (g++) Fortran Java Objective-C,C++ 나 이 텍 Embedded Linux System 환경구축 및 분석 146
147 교차 개발 툴 (Cross toolchains) Support CPU Alpha ARM Blackfin H8/300 System/370, System/390 IA-32(x86) and AMD64 IA-64 (i.e the Itanium ) Motorola / MIPS PA-RISC PDP-11 PowerPC SuperH SPARC VAX Renesas R8C/M16C families MorphoSys family 나 이 텍 Embedded Linux System 환경구축 및 분석 147
148 교차 개발 툴 (Cross toolchains) Binutils 오브젝트 파일 포맷 들을 조작하기 위한 프로그래밍 도구 모음 GCC, make, GDB 등과 함께 사용 GAS, GLD 포함 Binutils에 포함된 명령어 as - 어셈블러 ld - 링커 ar - 아카이브 파일을 만들고, 수정하고, 해제한다. addr2line - 주소를 파일과 줄로 바꾼다. c++filt - 맹글링된 C++ 심볼 들을 원래대로 되돌린다. nm - 오브젝트 파일의 심볼을 출력한다. objcopy - 오브젝트 파일을 복사한다. objdump - 오브젝트 파일에 대한 정보를 출력한다. ranlib - 아카이브를 위한 색인을 만든다. readelf - ELF 파일의 내용을 출력한다. size - 전체와 부분의 크기를 출력한다. strings - 표시할 수 있는 문자열을 출력한다. strip - 오브젝트 파일로부터 심볼을 제거한다. gprof - 프로파일러 나 이 텍 Embedded Linux System 환경구축 및 분석 148
149 교차 개발 툴 (Cross toolchains) glibc 교차 컴파일러를 위한 기본 라이브러리 C프로그램의 작성을 위해서는 libc라는 C라이브러리와 결합해야 한다. libc의 GNU 버전인 glibc는 메모리할당, 문자처리, 문자열 배열처리, 입 출력 스트림등의 많은 부분을 포함하고 있다. 임베디드 시스템에서는 glibc는 덩치가 크므로 다음과 같은 임베디 드용 라이브러리를 사용할 수도 있다. uclibc 일반 리눅스 환경, MMU가 없는 CPU 환경 등에서 동작할 수 있다. uclinux에서 사용되기도 한다. newlibc POSIX와 유사한 경량 C 실행 라이브러리로 printf, sprintf를 비롯하여 수학 라이브러리까지 포함하고 있다. 나 이 텍 Embedded Linux System 환경구축 및 분석 149
150 교차 개발 툴 (Cross toolchains) gdb 임베디드 환경에서는 하드웨어적인 디버거를 사용하지 않으면 소프트웨어적으로 추적하기에 어려움이 있다. gdb는 gdbserver라는 작은 프로그램을 타깃 컴퓨터에서 돌리면 gdb가 gdbserver에서 돌려주는 수행 결과를 가지고 디버깅을 할 수 있다. 호스트 컴퓨터(x86) gdb 네트워크 직렬 (gdb 서버와 터미널 콘솔 출력 네트워크 직렬 연결 (터미널 텔렛/웹 접속) 와 gdb 통신) 터미 렬 연결 NFS 마운트/TFTP 타겟 컴퓨터(Arm...) gdbserver <fig. 교차 디버깅 환경 > 나이텍 Embedded Linux System 환경구축 및 분석 150
151 교차 개발 툴 구성 패키지 교차 개발 툴 구성 패키지 gcc binutils glibc 교차 개발 툴 소스 다음 사이트에서 필요한 파일들을 구할 수 있다. ftp://ftp.kernel.org ftp://ftp.gnu.org 나 이 텍 Embedded Linux System 환경구축 및 분석 151
152 교차개발툴빌드순서 교차 개발 툴 빌드 순서 Binutilsil Bootstrap gcc Glibc GCC Binutils Bootstrap t GCC Glibc GCC 나 이 텍 Embedded Linux System 환경구축 및 분석 152
153 Crosstool을 이용한 toolchain만들기 근래는 새로운 툴체인 만드는 스크립트를 이용 안정된 툴체인을 만들기 위해서는 많은 patch를 필요로함 buildroot Openembedded Kegel s crosstool을 이용 crosstool-ng 프로젝트를 이용( geek.org/dokuwiki/projects/crosstool) k / ELDK( Pengutronix( pengutronix html) 안정된 툴체인 회사의 툴체인을 이용(ex> codesourcery) ARM EABI(embedded-application d binary interface) cross toolchain쪽으로의 변화 gcc 4.x 대로 옮겨가면서 많은 실험과 변화가 이루어짐 나 이 텍 Embedded Linux System 환경구축 및 분석 153
154 Crosstool-ng 실습(1) Crosstool-ng 패키지 복사 작업디렉토리인 /root/ct / 를 만들고 crosstool-ng tar.bz2 crosstool-ng 원본 소스(최신 버전은 1.3.3) ntc100-arm-generic-eabi-ctng conf 이미 설정을 끝마친 crosstool-ng의 nt-c100용 설정파일 targets_tarballs.tartarballs crosstool-ng 컴파일시 필요한 source file들 원래는 다운로드 받아서 처리하나, 안되는 경우를 위해 미리 다운로드 받아놓은 파일을 압축해 놓음 위의 파일을 /root/ct로 복사(sftp 혹은 samba를 이용) 나 이 텍 Embedded Linux System 환경구축 및 분석 154
155 Crosstool-ng 실습(2) Crosstool-ng install 디렉토리 환경설정 crosstool-ng source file의 파일을 압축해제 나 이 텍 Embedded Linux System 환경구축 및 분석 155
156 Crosstool-ng 실습(3) Crosstool-ng install ntc100-arm-generic-eabi-ctng conf 파일을 압축 해제된 crosstool-ng source directory로 복사 작업 디렉토리로 이동 후 crosstool-ng를 install한다 나 이 텍 Embedded Linux System 환경구축 및 분석 156
157 Crosstool-ng 실습(4) Crosstool-ng install(계속)./configure를 이용한 install 나 이 텍 Embedded Linux System 환경구축 및 분석 157
158 Crosstool-ng 실습(5) Crosstool-ng configuration./ct-ng menuconfig를 이용 toolchain 만드는 옵션 설정 여기서는 ntc100-arm-generic-eabi-ctng conf 파일을 이용. 나 이 텍 Embedded Linux System 환경구축 및 분석 158
159 Crosstool-ng 실습(6) Crosstool-ng configuration(계속) Load an Alternate Configuration File 메뉴에서 미리 설정되어있 는 파일을 지정해준다. 나 이 텍 Embedded Linux System 환경구축 및 분석 159
160 Crosstool-ng 실습(7) Crosstool-ng configuration(계속) 제대로 target이 설정되었는지 확인한다 Target options 메뉴 나 이 텍 Embedded Linux System 환경구축 및 분석 160
161 Crosstool-ng 실습(8) Crosstool-ng configuration(계속) Configuration을 저장하고 빠져나감(ESC key 이용) Load했던 config를.config로 save한다 이.config파일은 추후에 백업 혹은 다른 시스템용의 기본 base configuration 으로 사용가능하다. ex> <TARGET_SYSTEM>-arm-generic-eabi-ctng conf 나 이 텍 Embedded Linux System 환경구축 및 분석 161
162 Crosstool-ng 실습(9) Crosstool-ng build patch sstrip.c의 download문제 때문에 build시 error가 생김 gedit 혹은 vi등을 이용 scripts/build/tools/200-sstrip.sh 파일의 43 line을 수정 # vi /root/ct/crosstool-ng-1.3.2/scripts/build/tools/200-sstrip.sh 43 line을 CT_DoExecLog ALL cp -v "${CT_TARBALLS_DIR}/sstrip.c?view=co" "${CT_SRC_DIR}/sstrip" 에서 CT_DoExecLog ALL cp -v "${CT_TARBALLS_DIR}/sstrip.c?view=co" "${CT_SRC_DIR}/sstrip/sstrip.c 로 수정 나 이 텍 Embedded Linux System 환경구축 및 분석 162
163 Crosstool-ng 실습(10) Crosstool-ng build시 file download 이미 tar로 묶어 놓은 targets_tarballs.tar 파일 이용 나 이 텍 Embedded Linux System 환경구축 및 분석 163
164 Crosstool-ng 실습(11) Crosstool-ng build 해당 target으로 설정이 된.config 파일을 가지고 build 나 이 텍 Embedded Linux System 환경구축 및 분석 164
165 Crosstool-ng 실습(12) Crosstool-ng build 완료 나 이 텍 Embedded Linux System 환경구축 및 분석 165
166 Crosstool-ng 실습(13) Crosstool-ng tool test 나 이 텍 Embedded Linux System 환경구축 및 분석 166
167 Crosstool-ng 실습(14) Crosstool-ng package 로 컴파일 확인 툴체인 관련 파일들이 제대로 동작 하는지 확인 나 이 텍 Embedded Linux System 환경구축 및 분석 167
168 정리 및 Q/A 나 이 텍 Embedded Linux System 환경구축 및 분석 168
169 Embedded Linux 분석 및 환경구축 S5PC100 Board의 특징 및 U-Boot
170 세부 목차 S5PC100 보드의 특징 나 이 텍 Embedded Linux System 환경구축 및 분석 170
171 S5PC100 보드 개요 S5PC100 Board 특징 Samsung S5PC Mhz (833Mhz) NOR / NAND Flash 부팅 지원 516MB NAND Flash 1MB(64Kb) NOR Flash 256MB DDR SDRAM(512MB 옵션) 4.8 (800x480 TFT LCD) WM8580 I2S 5.1ch Audio SMSC 9215 Ethernet Device - 1EA USB Host Port - 1 EA USB OTG Port - 1 EA Serial Port - 2 EA 5V DC Power Input 720P HDMI Out / NTSC In Port (TVP5150) External GPIO / I2C Pin 내장 스피커 및 마이크 / GPS / 3축 센서 나 이 텍 Embedded Linux System 환경구축 및 분석 171
172 S5PC100 프로세서 부트모드 S5PC100 Board 부트 모드 설정 NOR 부트 모드 NAND 부트 모드 나 이 텍 Embedded Linux System 환경구축 및 분석 172
173 S5PC100 프로세서 부트모드 S5PC100 부트모드의 특성 - 1 S5PC100의 메모리는 5가지 영역으로 구분 Boot Image 영역 부트모드에 따라 Static Memory 영역이 Boot Image영역에 미러링 부트 이미지의 시작 주소 : 0x0 고정 부트 이미지의 주소 범위 : 0x00 ~ 0x0003_ 단, 실제 저장소의 크기는 32KB Internal Memory 영역 내부 ROM와 내부 SRAM을 엑세스하기 위해 사용 내부 ROM의 주소 범위 : 0x0000_0000 ~ 0x0000_8000 단, 실제 저장소의 크기는 32KB Read-Only 이며, 별도의 부트 롬을 장착했을 때 사용 내부 SRAM의 주소 범위 : 0x0002_0000 ~ 0x0003_8000 단, 실제 저장소의 크기는 96KB Read-Write가 가능하며, NAND Flash Booting시 사용 나 이 텍 Embedded Linux System 환경구축 및 분석 173
174 S5PC100 프로세서 부트모드 S5PC100 부트모드의 특성 - 2 Static Memory 영역 NOR Flash, OneNAND Fash, NAND Flash 등이 위치 주소 범위 : 0x8000_0000 ~ 0xC000_0000 Dynamic Memory 영역 DDR SDRAM이 위치 주소 범위 DRAM : 0x2000_0000 ~ 0x6000_0000 SFR(Special Function Register) 영역 주소 범위 : 0xE000_0000 ~ 0xF600_0000 나 이 텍 Embedded Linux System 환경구축 및 분석 174
175 S5PC100 프로세서 부트모드 S5PC100 부트모드의 특성 3 나 이 텍 Embedded Linux System 환경구축 및 분석 175
176 S5PC100 프로세서 부트모드 S5PC100 부트모드의 특성 결론 1 0x0 번지에 미러링 영역을 가지고, 부트 모드에 따라 특정 메모리 주소를 매핑. 미러링 되는 영역의 크기는 부트 모드에 따라서 제한이 있음. 일반적인 부트로더 사이즈 크기는 미러링 되는 영역의 크기보다 큼. 따라서, 2중으로 부팅하는 방식으로 부트로더를 디자인. 1차 부트로더 (미러링 영역에서 동작) - 시스템 초기화 - 부트로더 본체 로딩 부트로더 본체 (리눅스 커널 로딩) - 리눅스 커널 로딩 -각종관련기능 리눅스 커널 부팅 Secure Booting check 나 이 텍 Embedded Linux System 환경구축 및 분석 176
177 S5PC100 프로세서 부트모드 S5PC100 부트모드의 특성 결론 2 NOR Flash와 NAND Flash 부팅을 사용하는 이유 - NOR Flash 메모리는 프로세서에서 직접적으로 접근이 가능 - 부트로더 초기 개발시에는 NOR Flash 부트 모드로 사용하여 개발 -ICE 장비를 이용한 기록 및 디버깅이 손쉬움 - NOR Flash는 작은 용량 높은 가격 및 구현의 용이함으로 개발 시에만 사용 - NOR Flash 부트 모드에서 NAND Flash 접근 루틴을 개발 - NAND Flash 메모리는 블록 디바이스로 직접 접근이 불가능 - 부트로더 초기 개발시에는 디버깅이 어려움 - NAND Flash는 큰용량 및 저렴한 가격으로 양산시에 사용 - 양산시에는 NOR Flash 메모리를 제거하고, NAND Flash 만을 사용하여 출시 나 이 텍 Embedded Linux System 환경구축 및 분석 177
178 실습 u-boot NOR Flash 부팅 준비물 : u-boot Image, DNW 1. NOR Flash 부팅 모드로 변경 2. 시리얼 및 USB 및 이더넷 연결 나 이 텍 Embedded Linux System 환경구축 및 분석 178
179 실습 u-boot NOR Flash 부팅 2. DNW 설정 나 이 텍 Embedded Linux System 환경구축 및 분석 179
180 실습 u-boot NOR Flash 부팅 2. DNW 설정 나 이 텍 Embedded Linux System 환경구축 및 분석 180
181 실습 u-boot NOR Flash 부팅 2. USB-OTG MON 구동 화면 나 이 텍 Embedded Linux System 환경구축 및 분석 181
182 실습 u-boot NOR Flash 부팅 2. u-boot 실행 나 이 텍 Embedded Linux System 환경구축 및 분석 182
183 실습 u-boot NAND Flash 부팅 1. NOR Flash 부팅 모드에서 u-boot 명령 프롬포트로 진입 2. 사전 준비 사항 Embedded Linux 시스템, u-boot 바이너리 이미지(uboot.bin) 3. NAND Flash 기록 방법 1) NAND Flash 삭제 # nand erase ) 호스트 PC 및 타깃 보드 IP 주소 설정 # setenv serverip # setenv ipaddr ) TFTP를 이용한 u-boot.bin 전송 # tftp c u-boot.bin 4) 전송받은 u-boot를 NAND Flash에 기록 # nand write c ) NAND Flash 부팅 모드로 변경하여 부팅 확인 나 이 텍 Embedded Linux System 환경구축 및 분석 183
184 세부 목차 부트로더 분석 나 이 텍 Embedded Linux System 환경구축 및 분석 184
185 부트로더 시스템의 하드웨어를 초기화하고 운영체제의 커널을 메모리에 올려 실행시키는 시스템 프로그램 JTAG/BDM -> 부트로더의 디버깅 및 Writing을 도와주는 장비 부트로더의 위치 일반적으로 시스템 메모리의 물리 주소 0번지부터 위치 롬, 플래시롬, SRAM 등 정적인 메모리에 위치 부트로더의 기능 메모리 초기화 하드웨어 초기화 직렬포트의 초기화 네트워크 초기화 프로세서 속도, 인터럽트의 초기화 커널과 램 디스크 적재 : 커널과 램 디스크를 램에 적재하여 실행 정적 메모리에 쓰는 기능 사용자 인터페이스 기능 나 이 텍 Embedded Linux System 환경구축 및 분석 185
186 부트로더 특징 부트로더의 특징 하드웨어 의존성이 강하다. 초기화 코드는 대부분 어셈블리언어로 작성된다. 프로그래머는 프로세서 구조, 특징, 사용법을 알고 있어야 한다. Clock Memory controller UART Ethernet Etc 나 이 텍 Embedded Linux System 환경구축 및 분석 186
187 부트로더 종류 LILO(Linux Loader) GRUB(Grand Unified Bootloader) Loadlin EtherBoot Blob ARM 용 부트로더 PMON(PROM Monitor) MIPS 보드용 RedBoot RedHat에서 개발 및 배포 ecos 기반 U-Boot(Universal Bootloader) PPCBoot 와 ARMBoot 프로젝트 기반 나 이 텍 Embedded Linux System 환경구축 및 분석 187
188 U-Boot란? & 특징 부트로더 간단하게 특정 cpu에 OS 혹은 어떤 프로그램을 돌릴 수 있도록 cpu가 동작하는데 필요한 아주 기초적인 부분이나 ROM(or flash), RAM, UART등의 기본적인 디바이스들을 동작할 수 있게 만드는 프로그램. Universal Bootloader 의 약자로 간단하게 PowerPC와PC와 ARM에 기반을 둔 임베디드 보드를 위한 부트로더. Ppcboot와 ARMboot를 썼던 사람들에게 익숙하다.. 발전을 해가면서 다양한 platform에 포팅(ppc, arm, mips, x86...) 코드가 깔끔하고 구조가 좋음. 굉장히 강력하고 그나마 쉬운(?) 환경 설정: 많이 쓰이는 cpu를 사 용한 상용 evaluation board에 대한 기본 sample코드 존재(수정 하여 사용가능) ex> S3C2410 evboard = smdk2410 다른cpu에 대해 같은 명령어 체계를 사용하므로, 다른 platform에 적용을 하더라도 큰 어려움 없이 쉽게 접근가능 나 이 텍 Embedded Linux System 환경구축 및 분석 188
189 U-Boot U-Boot 유니버설 플랫폼을 위한 Open Source 부트 로더 Linux를 지원하며 네트워크를 이용한 부팅 기능 제공 소스 및 자료를 구할 수 있는 사이트 ftp://ftp.denx.de/pub/u-boot/ de/pub/u boot/ 제공 기능 BOOTP/TFTP (RARP/TFTP)를 이용한 네트워크 부팅 initrd를 이용한 메모리 (Flash memory, DRAM) 부팅 TFTP(Ethernet)를 이용한 다운로드 Serial을 이용한 다운로드 나 이 텍 Embedded Linux System 환경구축 및 분석 189
190 U-Boot의 컴파일 구조 U-Boot의 컴파일 U-Boot의 컴파일은 세단계로 걸쳐서 이루어짐 1단계 : 기존 컴파일 환경을 초기화 make clobber 2단계: 특정CPU를위한환경설정 make ntc100_config 3단계 : 부트로더 이미지 생성 make 컴파일 후에는 다음 세 가지의 파일이 생성 u-boot The ELF binary formatted U-Boot image u-boot.map The U-Boot memory map file u-boot boot.binbin The plane binary formatted image 나 이 텍 Embedded Linux System 환경구축 및 분석 190
191 U-Boot 디렉터리 구조 (TODIR) board common cpu disk doc drivers dtt examples fs include lib_arm lib_generic net post rtc tool Board에 의존적인 파일 Architecture에 독립적인 파일 Architecture에 의존적인 파일 Code for disk drive partition handling U-Boot 관련 문서 외부장치의 driver 파일 외부 장치들 중 sensor(디지털 온도계) 에 관련된 driver파일 U-Boot을 위한 test실행 파일 U-Boot에서 지원하는 file system 관련 파일 Header file Arm architecture 관련 라이브러리 파일 모든 architecture와 관련된 라이브러리 파일 Network 관련 파일 Power On Self Test Real time clock driver 파일 Tools to build S-Record or U-Boot images, etc 나 이 텍 Embedded Linux System 환경구축 및 분석 191
192 SoC 의존적인 파일들 디렉터리와 파일 설명 include s5pc100.h, s5pc1x0.h SoC의 제어용 레지스터 및 각종 매크로 선언 configs ntc100.h 메모리 정보, 사용될 하드웨어 및 소프트웨어 설정, 기본 환경 변수 지 정 cpu s5pc1xx start.s U-Boot의 시작부분 interrupts.c cpu.c i2c.c nand_cp.c serial.c usb_ohci.c 프로세서의 인터럽트와 SoC의 인터럽트 제어기를 관리하는 소스 파일 캐시 관리, 소프트웨어 리셋 등 cpu를 관리 IIC controller driver u-boot를 NAND Flash에서 읽어오는 루틴 UART device driver UBS 디바이스 제어기 드라이버 board/ samsung/ s5pc100 speed.c cpu_init.s Clock 설정관련 처리 루틴 UBS 디바이스 제어기 드라이버 ntc100 config.mk U-Boot의 코드가 동작할 텍스트 섹션 베이스 주소 지정 u-boot.lds lowlevel_init.s smdkc100.c flash.c U-Boot의 이미지 배치를 위한 링커 스크립트 메모리 제어기 설정 ntc100 대상 보드 설정 플래시 디바이스 관리 drivers smc911x.c U-Boot용 smsc9215 이더넷 제어기 디바이스 드라이버 나 이 텍 Embedded Linux System 환경구축 및 분석 192
193 시스템 초기 설정 요소 WDT disable 시스템 fault 검지 및 fail-safe를 구현하기 위한 장치 처음 전원 인가 시 disable한 후 필요 시 enable하여 사용 대부분 전원 인가 시 enable 상태임 Interrupt disable 시스템 초기화중 인터럽트 발생시 시스템 오 동작 발생 대부분 전원 인가 시 disable 상태임 Sleep & wake 등으로 초기화 루틴 실행되는 것을 고려하여 disable 필요 PLL설정 PLL을 설정하여 원하는 주파수로 기준 클록 설정 나 이 텍 Embedded Linux System 환경구축 및 분석 193
194 부트로더 초기화 코드 작성시 고려 Functions Clock & Power Initialization Memory System Initialization Setup Exception Handling I/O Device Initialization 나 이 텍 Embedded Linux System 환경구축 및 분석 194
195 Startup Code 관련 파일 board/samsung/ntc100/u-boot.lds board/samsung/ntc100/config.mkmk board/samsung/ntc100/lowlevel_init.s cpu/s5pc1xx/start.s start.s의 흐름 cpu초기화(interrupt mask, Clock setting) dram초기화 flash에 있는 코드를 작업공간인(relocation area) dram으로 relocate stack setup malloc area setup BSS clear C쪽 코드의 메인인 lib_arm/board.c의 start_armboot()로 점프 나 이 텍 Embedded Linux System 환경구축 및 분석 195
196 /cpu/s3c6410/start.s (1) 1. Exception vector table 선언 2. Mode change (SVC)와 인터럽트 disable (IRQ, FIQ) 3. Watchdog timer disable 4. Interrupt disable by interrupt controller 5. PLL setting start.s 6. Cache flush 7. Disable MMU, Disable D-Cache 8. U-Boot code를 ram으로 복사 9. BSS 영역 clear 10. Stack pointer 초기화 11. C 함수로 분기 => lib_arm/board.c/start_armboot memsetup.s Memory controller 초기화 나 이 텍 Embedded Linux System 환경구축 및 분석 196
197 u-boot Startup.S Watchdog Disable /* Disable Watchdog */ ldr r0, =0xEA mov r1, #0 str r1, [r0] 나 이 텍 Embedded Linux System 환경구축 및 분석 197
198 u-boot Startup.S Interrupt Disable 나 이 텍 Embedded Linux System 환경구축 및 분석 198
199 VICn BLOCK DIAGRAM < Vectored Interrupt Controller block diagram > 나 이 텍 Embedded Linux System 환경구축 및 분석 199
200 Interrupt 상태확인 IRQ 상태확인 레지스터, VICIRQSTATUS VICINTENCLEAR 레지스터로 Clear된다. FIQ 상태확인 레지스터, VICFIQSTATUS 나 이 텍 Embedded Linux System 환경구축 및 분석 200
201 Interrupt 상태확인 (2) RAW Interrupt 상태확인 레지스터, VICRAWINTR 나 이 텍 Embedded Linux System 환경구축 및 분석 201
202 Interrupt 선택 IRQ/FIQ 선택 레지스터, VICINTSELECT IRQ/FIQ중 하나를 선택할 수 있으며 초기값은 IRQ이다. 각 bit당 하나의 Interrupt source가 설정된다. 나 이 텍 Embedded Linux System 환경구축 및 분석 202
203 Interrupt Enable/Disable Interrupt Enable 레지스터, VICINTENABLE VICINTENCLEAR 레지스터로 Clear된다. 다시 Interrupt를 발생시키려면 enable 이전에 clear가 필요하다. 나 이 텍 Embedded Linux System 환경구축 및 분석 203
204 Interrupt Enable Clear Interrupt Enable Clear 레지스터, VICINTENCLEAR VICINTENCLEAR clear시 VICINTENABLE, VICIRQSTATUS도 같이 clear 된다. 다시 Interrupt를 발생시키려면 enable 이전에 clear가 필요하다. 나 이 텍 Embedded Linux System 환경구축 및 분석 204
205 Software Interrupt 레지스터, VICSOFTINT IRQ, FIQ를 선택하여 S/W적으로 인터럽트를 발생시키는 게 가능하며 처리과정은 동일하다. Software Interrupt Select 나 이 텍 Embedded Linux System 환경구축 및 분석 205
206 Software Interrupt Select/Clear Software Interrupt Clear 레지스터, VICSOFTINTCLEAR Clear시 VICSOFTINT 해당 Bit가 clear된다. 나 이 텍 Embedded Linux System 환경구축 및 분석 206
207 Interrupt 보호(Protection) Interrupt 보호 레지스터, VICPROTECTION Enable시 Privileged 모드에서만 access가 가능하다. User모드에서는 disable상태에서만 access가 가능하며 이 레지스터는 disable상태라도 Privileged 모드에서만 접근 가능하다. 나 이 텍 Embedded Linux System 환경구축 및 분석 207
208 Software Priority Mask Software Priority Mask 설정 레지스터, VICSWPRIORITYMASK Software Priority Mask 설정 레지스터의 경우 해당 우선순위 Level의 Interrupt를 Masking하는 게 가능하다. 각 Bit당 하나의 Level을 설정할 수 있다. [15:0], masking/ unmasking 나 이 텍 Embedded Linux System 환경구축 및 분석 208
209 Vector Priority For Daisy Chain Vector Priority For Daisy Chain 레지스터, VICPRIORITYDAISY S3c64XX CPU 에서 존재하던 PriroityDaisy를 Vector Priority Register 와 함 께사용 나 이 텍 Embedded Linux System 환경구축 및 분석 209
210 VIC Vector Address[0~31] Vector Address 레지스터, VICVECTADDR[0-31] 호출될 ISR의 주소를 Vector Address 레지스터에 등록한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 210
211 Vector Priority[0~31] Vector Address 레지스터, VICVECTADDR[0-31] Value가 낮을수록 Priority는 높으며 바꾸기 전까진 고정이다. Value의 범위는 0~15이다. 나 이 텍 Embedded Linux System 환경구축 및 분석 211
212 Vector Address Vector Address 레지스터, VICADDRESS Interrupt발생시 등록된 VICVECTADDR값이 적용되며 자동적으로 해당 ISR로 점프하게 된다. Read시 현재 발생된 ISR의 주소 값이 Return되며 Write시 clear된다. ISR의 마지막에 반드시 clear해야 하며 VIC1의 경우 VIC0도 같이 clear 해야 함. 나 이 텍 Embedded Linux System 환경구축 및 분석 212
213 u-boot Startup.S System Clock Init 데이터시트 3-3 페이지 참조 S5PC100은 PLL이 4개이다. (MPLL,APLL,EPLL,HPLL) 4개의 PLL에서 개별적인 클럭을 분주 각 주변 장치는 소스 PLL의 선택이 가능 S5PC100은 PLL, MUX, DIV 레지스터 를 통하여 주변 장치에 클럭을 공급 세부적인 클럭 설정이 가능 처음엔 다소 복잡함으로 사용이 어려움 초기 입력 클럭 12Mhz(HPLL 27MHz) 나 이 텍 Embedded Linux System 환경구축 및 분석 213
214 /board/samsung/ntc100/u-boot.lds (1) OUTPUT_FORMAT( FORMAT("elf32-littlearm littlearm", "elf32-littlearm littlearm", "elf32-littlearm littlearm") /*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/ OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS {. = 0x ;. = ALIGN(4);.text : { cpu/s5pc1xx/start.o (.text) cpu/s5pc1xx/s5pc100/cpu_init.o (.text) board/samsung/ntc100/lowlevel_init.o (.text) cpu/s5pc1xx/onenand_cp.o (.text) cpu/s5pc1xx/nand_cp.o (.text) cpu/s5pc1xx/movi.o (.text) *(.text) }. = ALIGN(4);.rodata : { *(.rodata) }. = ALIGN(4);.data : { *(.data) }. = ALIGN(4);.got : { *(.got) } u_boot_cmd_start =.;.u_boot_cmd : { *(.u_boot_cmd) } u_boot_cmd_end =.;. = ALIGN(4);.mmudata : { *(.mmudata) }. = ALIGN(4); bss_start =.;.bss : { *(.bss) } _end =.; 나이텍 Embedded Linux System 환경구축 및 분석 214 }
215 /board/mep6410/u-boot.lds (2) OUTPUT_FORMAT은 ELF32의 little endian으로 코드를 생성 OUTPUT_ARCH는 binary를 실행할 수 있는 CPU architecture로 ARM을 사용 ENTRY point은 program의 시작을 가리키며, 그 함수의 이름은 _start _start는 /cpu/s5pc1xx/start.s에 정의되어 있다. U-boot의 시작은 Entry point에 선언된 _start부터 시작 SECTIONS의 정의를 보면, text, rodata, data, got, bss라는 section들이 정의.text : 실행할 프로그램 코드 영역.rodata: read-only data 영역 (const 등으로 지정된 데이터).data: initialized data 영역.got: global offset table 영역.bss: uninitialized data 영역 특수한 링커 변수 dot. 는 항상 현재 출력 address point을 담고 있다. address point 는 출력 섹션의 크기만큼 증가 * 는 어떤 파일명에도 대응, *(.text) 는 모든 입력 파일의 모든 입력 섹션.text 을 의미 프로그램 코드는 0x57e00000에서 시작해서 4byte단위로 정렬된 text section에 놓여짐 TEXT_BASE에 의해 Linker 수행 시 symbol들은 상대적 주소를 갖는다. Power가 on 한 후 0x00번지(즉, flash)에서 시작하여 memory 초기화를 거쳐 flash의 내용을 dram 에 relocate 하면 비로써 dram 에서 동작 Symbol들은 모두 TEXT_BASE의 상대적 주소 값을 가지고 있으므로, dram에 relocation 하기 전에 는 offset branch 명령만 사용 해야 한다.(B, BL, ADR) 나 이 텍 Embedded Linux System 환경구축 및 분석 215
216 Source Flow startup(cpu/s5pc1xx/start.s) cpu초기화, dram초기화, 그 후에 부트로더의 ram으로의 relocation, C코 드에서의 main인 start_armboot()를armboot()를 호출함. c쪽의 start코드(lib_arm/board.c) dram초기화 이후의 flash, uart등등의 주변 디바이스 초기화 메인루프(command line shell: common/main.c) 유닉스 shell과 같은 명령어 처리 루틴. autoboot delay동안 enter키 입력 을 기다리는데 그동안 키 입력이 안되면 바로 boot command(설정파일을 보면 나옴)를 실행시킴. app의 실행 혹은 리눅스등의 OS로 부팅(lib_arm/armlinux.c) 헤더가 붙은 커널의 헤더를 읽어서 압축을 풀고 리눅스로 제어권을 넘겨주 는코드 나 이 텍 Embedded Linux System 환경구축 및 분석 216
217 U-Boot 초기화 과정의 예 전원 인가 또는 Reset 스위치 에 의한 시스템 Reset MMU/Cache disable _start 에서 시작 lowlevel_init()로 분기 Reset 핸들러로 분기 메모리 제어기 설정 SVC32 모드로 전환 불필요한 하드웨어 disable(wdt) 프로그램 재배치 U-Boot 복사 및 PC 값 변경 Stack 설정 인터럽트 disable BSS 영역 0으로 초기화 시스템 클록 설정 start_armboot 나 이 텍 Embedded Linux System 환경구축 및 분석 217
218 config.mk # (C) Copyright 2002 # Gary Jennejohn, DENX Software Engineering, <[email protected]> # David Mueller, ELSOFT AG, <[email protected]> # # SAMSUNG SMDKC100 board with mdirac3 (ARM-CortexA8) cpu # # see for more information on SAMSUNG # # SMDKC100 has a 128 MB SDR SDRAM # # Linux-Kernel is expected to be at 5000'8000, entry 5000'8000 # optionally with a ramdisk at 5080'0000 # # we load ourself to 57e0'0000 without MMU # with MMU, load address is changed to 0xc7e0_ # # download area is 5000'0000 # ifndef TEXT_BASE TEXT_BASE = 0xc7e00000 endif 나 이 텍 Embedded Linux System 환경구축 및 분석 218
219 u-boot 부팅 start.s (1/6) 위치 : (TOPDIR)/cpu/arm920t/start.S.globl _start _start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq ldr pc, _fiq Linker에게 _start symbol 처리할 수 있도록 export한다. _undefined_instruction:.word undefined_instruction _software_interrupt:.word software_interrupt _prefetch_abort:.word prefetch_abort _data_abort:.word data_abort _not_used:.word not_used _irq:.word irq _fiq:.word fiq.balignl 16,0xdeadbeef Linker script file의 entry point에서 선언된 _start 부터프로 그램 코드가 실행된다. Offset jump이므로 dram으로 이동하지 않는다. 나 이 텍 Embedded Linux System 환경구축 및 분석 219
220 u-boot 부팅 start.s (2/6) reset: /* set the cpu to SVC32 mode */ mrs r0,cpsr bic r0,r0,#0x1f orr r0,r0,#0xd3 msr cpsr,r0 - cpsr값을 r0레지스터로 옮긴다. - Mode bit을 clear한다. - interrupt 을 disable,supervisor mode - r0값으로 cpsr값을 바꾼다. ldr r0, =pwtcon mov r1, #0x0 str r1, [r0] - Watchdog Timer을 disable한다. */ /* mask all IRQs by setting all bits in the INTMR - default mov r1, #0xffffffff ldr r0, =INTMSK str r1, [r0] ldr r2, =0x7fff ldr r0, =INTSUBMSK str r2, [r0] - Interrupt를 모두 masking 한다. -Sub Interrupt를모두masking initialize system clocks ldr r0, =LOCKTIME ldr r1, =0xffffff str r1, [r0] - LOCKTIME count 값을 최대로 설정한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 220
221 u-boot 부팅 start.s (3/6) /* FCLK:HCLK:PCLK = 1:3:6 */ /* default FCLK is MHz! */ ldr r0, =CLKDIVN - FCLK:HCLK:PCLK (1:3:6) 설정 mov r1, #7 str r1, [r0] mrc p15, 0, r1, c1, c0, 0 orr r1, r1, #0xc mcr p15, 0, r1, c1, c0, 0 - bus mode를 Asynchronous mode로 설정 /* we do sys-critical inits only at reboot, not when booting from ram! */ #ifdef CONFIG_SKIP_LOWLEVEL_INIT - sub rountine cpu_init_crit 을 호출한다. bl cpu_init_crit #endif - (TOPDIR)/inculde/configs/mep2440.h 에서 정의 나 이 텍 Embedded Linux System 환경구축 및 분석 221
222 u-boot 부팅 start.s (4/6) relocate: /* relocate U-Boot to RAM */ adr r0, _start /* r0 <- current position of code */ ldr r2, _armboot_start ldr r3, _armboot_end sub r2, r3, r2 /* r2 <- size of armboot */ ldr r1, _TEXT_BASE /* r1 <- destination address */ add r2, r0, r2 /* r2 <- source end address */ copy_loop: ldmia r0!, {r3-r10} /* copy from source address [r0] */ stmia r1!, {r3-r10} /* copy to target address [r1] */ cmp r0, r2 /* until source end addreee [r2] */ ble copy_loop 나 이 텍 Embedded Linux System 환경구축 및 분석 222
223 u-boot 부팅 start.s (5/6) clear_bss: ldr r0, _bss_start /* find start of bss segment */ add r0, r0, #4 /* start at first byte of bss */ ldr r1, _bss_end /* stop here */ mov r2, #0x /* bss영역을 0으로 초기화 */ clbss_l: str r2, [r0] /* clear loop... */ add r0, r0, #4 cmp r0, r1 bne clbss_l /* set up the stack */ ldr r0, _armboot_end add r0, r0, #CONFIG_STACKSIZE /* leave 3 words for abort-stack */ sub sp, r0, #12 ldr pc, _start_armboot _start_armboot:.word start_armboot void start_armboot (void) { DECLARE_GLOBAL_DATA_PTR; ulong size; gd_t gd_data; bd_t bd_data; init_fnc_t **init_fnc_ptr; char *s;... - (TOPDIR)/lib_arm/board.c 참조 - 지금부터는 dram 에서 동작 나 이 텍 Embedded Linux System 환경구축 및 분석 223
224 u-boot 부팅 start.s (6/6) cpu_init_crit: /* flush v4 I/D caches */ mov r0, #0 mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */ mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */ /* disable MMU stuff and caches */ mrc p15, 0, r0, c1, c0, 0 bic r0, r0, clear bits 13, 9:8 (--V- --RS) bic r0, r0, clear bits 7, 2:0 (B--- -CAM) orr r0, r0, set bit 2 (A) Align orr r0, r0, set bit 12 (I) I-Cache mcr p15, 0, r0, c1, c0, 0 /* before relocating, we have to setup RAM timing because memory timing is board-dependend. */ mov ip, lr bl lowlevel_init mov lr, ip mov pc, lr bl cpu_init_crit crit 다음 Instruction으로 이동 나 이 텍 Embedded Linux System 환경구축 및 분석 224
225 부트로더 동작과 메모리 배치 옵셋 메모리 주소 0x003F0000 부트로더 환경변수 영역 U-Boot.armboot_end 초기화 코드에서 U-Boot 복사 초기화 코드 malloc area Stack 0x57e00000 U-Boot.armboot_end 커널 복사 영역 (zimage) 0x x 초기화 코드 < NOR 플래시 > < SDRAM > 0x 나 이 텍 Embedded Linux System 환경구축 및 분석 225
226 lib_arm/board.c의 start_armboot() - 부트로더의 중요한 변수: global data 스트럭쳐중 bd_info(include/asm-arm/u-boot.h) bi_arch_number bi_boot_params boot start_armboot()함수 시작 - board_init(=> board/mep6410/mep6410.c) clock과 gpio등의 설정. cpu가 같지만 board설계에 따라 틀려지는 부분 설정 gd->bd->bi_arch_number = 3000; gd->bd->bi_boot_params = (PHYS_SDRAM_1+0x100); - 커널에서의 architecture number arch number(인식번호): arch number of S5PC100-Board(kernel/arch/arm/tools/mach-types) kernel 소스의 arch/arm/mach-s5pc100/mach-smdkc100.c를 보면 다음과 같이 설정되어 있다. MACHINE_START(SMDKC100, "SMDKC100") /* Maintainer: Ben Dooks <[email protected]> */.phys_io = S3C_PA_UART & 0xfff00000,.io_pg_offst = (((u32)s3c_va_uart) >> 18) & 0xfffc,.boot_params = S5PC1XX_PA_SDRAM + 0x100,.init_irq = s5pc100_init_irq,.map_io = smdkc100_map_io,.init_machine = smdkc100_machine_init,.timer = &s5pc1xx_timer, MACHINE_END 나 이 텍 Embedded Linux System 환경구축 및 분석 226
227 U-boot 명령(예제) tftpboot(혹은 tftp) tftp uimage bootm [옵션들...] bootm , bootm printenv setenv setenv ipaddr Nor Flash관련명령 protect off 1:0-2, erase 1:0-2 cp.b $(filesize), protect on 1:0-2 erase bank 1 Nand Flash관련 명령 nand erase tftp nandboot.bin nand write $(filesize) nand read 나 이 텍 Embedded Linux System 환경구축 및 분석 227
228 Embedded Linux 분석 및 환경구축 Linux 2.6 kernel 설정 및 Compile
229 세부 목차 커널 설정 및 컴파일 나 이 텍 Embedded Linux System 환경구축 및 분석 229
230 커널 빌드 방법 (1) make config 텍스트 기반 설정방식 모든 옵션을 하나씩 보여주고 yes, no, module 중에 하나의 옵션을 선택 조금 불편함 make menuconfig 텍스트 메뉴 방식 ncurses에 기반한 GUI 툴 화살표와 스페이스 바를 이용하여 옵션 설정 편리하고 가장 많이 사용됨 실제로는 거의 이 모드 사용 make xconfig X window를 이용한 GUI 방식 편리함 나 이 텍 Embedded Linux System 환경구축 및 분석 230
231 커널 빌드 방법 (2) make gconfig Gtk+ 에 기반한 GUI 방식 편리함 make *_defconfig Archtecture 별로 기본 설정 옵션을 적용 arch/ /defconfig 파일 설정완료 후 커널 소스 루트 디렉터리에.config 파일 생성 나 이 텍 Embedded Linux System 환경구축 및 분석 231
232 커널 빌드 방법 (3) build make menuconfig 한 후 make는 24커널과 2.4 차이가 있음 커널 종속성 트리를 자동으로 유지, make dep 를 실행할 필요 없음. 특정 빌드 형식을 지정하지 않아도 됨. (zimage, bzimage) 통상 x86의 경우는 make bzimage arm의 경우 부트로더를 u-boot로 사용하는 경우는 make uimage 삼성 S3C6410 부터 zimage를 이용 직접 부팅하도록 u-boot 수정되어 있음. make zimage make modules make modules_install 나 이 텍 Embedded Linux System 환경구축 및 분석 232
233 커널 옵션 설정 옵션 설정 규칙 불필요한 드라이버는 제거한다. 모듈 기능은 반드시 켜둔다. 모듈 로더 기능도 켜둔다. 확실하지 않으면 그냥 둔다. 모듈로 설정한 기능은 어떤 파일로 컴파일 되는지 확인해 둔다. 잘 모르는 기능은 커널 소스에 따라오는 Documentation 문서를 확인 한다. 가장 힘든 부분의 경우 드라이버의 종속성이다. USB mass storage의 경우 SCSI장치가 없더라도, SCSI disk에 대한 지원 옵션을 만들어야 지원이 가능하다. 나 이 텍 Embedded Linux System 환경구축 및 분석 233
234 커널 옵션 설정 make menuconfig 텍스트 메뉴 방식의 커널 설정 툴 cd /root/s5pc100/kernel/linux s5pc100 make menuconfig 나 이 텍 Embedded Linux System 환경구축 및 분석 234
235 커널 옵션 설정 Code maturity level options Code maturity level options 코드 성숙도에 대한 설정, 개발중인 새로운 기능과, 새로운 드라이버 를 포함할 것인지 아닌지 설정 시험 적인 기능은 EXPERIMENTAL 이라는 문자열이 옵션의 뒤에 붙는다. 이 옵션을 켜 두었을 때 시스템의 특성에 따라 에러가 발생할 수도 있음. 이 기능을 선택하지 않아도 안정 버전의 모든 기능을 사용할 수 있음. 나 이 텍 Embedded Linux System 환경구축 및 분석 235
236 커널 옵션 설정 General Setup (1/2) General Setup 나 이 텍 Embedded Linux System 환경구축 및 분석 236
237 커널 옵션 설정 General Setup (2/2) General Setup 커널의 일반 기능에 대한 설정이다. Support for paging of anonymous memory Swap 기능 System V IPC IPC, Shared Memory 지원 BSD Process Accounting 프로세스 정보를 파일에 저장한다. Sysctl support 특정 커널의 파라미터와 변수들을 동적으로 변경 시킬 수 있도록 한다. Kernel.config support 현재 커널이 빌드될 때 사용된 설정을 /proc/config.gz 파일에서 읽을 수 있도록 한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 237
238 커널 옵션 설정 Loadable module support (1/2) Loadable module support 커널 모듈에 대한 설정(이 기능이 없으면, 모듈 컴파일이 안됨) 모듈이란? 커널에 포함되지 않고 커널이 운영되고 있는 상태에 모듈파일을 읽어 들여서 커널의 기능을 확장하는 것. 나 이 텍 Embedded Linux System 환경구축 및 분석 238
239 커널 옵션 설정 Loadable module support (2/2) Enable loadable module support (MODULES) [Y/n/?] 커널의 모듈기능을 쓸 수 있게 한다. Module unloading (MODULE_UNLOAD) [Y/n/?] 커널에 로딩된 모듈을 삭제할 수 있도록 한다. Forced module unloading (MODULE_FORCE_UNLOAD) UNLOAD) [N/y/?]/?] 커널이 모듈에 포함된 기능을 쓰고 있더라도 강제로 모듈을 지울 수 있도 록 한다. (쓰지 않는 것이 좋다) Module versioning support (MODVERSIONS) [Y/n/?] 모듈의 이름에 부가정보를 더하는 기능 다른 버전의 커널에서 만들어진 모듈이나 커널과 함께 배포되지 않는 특 별한 모듈을 사용할 수 있도록 하는 기능 Automatic kernel module loading (KMOD) [Y/n/?] /proc/sys/kernel/modprobe에 등록된 프로그램을 이용해 커널이 알아 서 모듈을 적재하는 기능 나 이 텍 Embedded Linux System 환경구축 및 분석 239
240 커널 옵션 설정 Block layer Block layer Block device queue 의 traffic을 tracing 할 수 있도록 해준다. Disk scheduler Anticipatory I/O scheduler (default) Deadline I/O scheduler CFQ I/O scheduler 나 이 텍 Embedded Linux System 환경구축 및 분석 240
241 커널 옵션 설정 System Type System Type ARM System Type Samsung S5PC1XX 나 이 텍 Embedded Linux System 환경구축 및 분석 241
242 커널 옵션 설정 Kernel Features ARM EABI support Memory model(flat or NUMA) 나 이 텍 Embedded Linux System 환경구축 및 분석 242
243 커널 옵션 설정 Boot Options Kernel의 Command Line Boot Arguments 세팅 Boot Loader에서 전달해주지 않았을 경우 사용됨 나 이 텍 Embedded Linux System 환경구축 및 분석 243
244 커널 옵션 설정 Networking Network기능 세팅 NFS 부팅시 반드시 세팅해 줘야 함, udev 사용시는 Unix Domain Socket을 지워 야 함, IP auto configuration기능 나 이 텍 Embedded Linux System 환경구축 및 분석 244
245 커널 옵션 설정 Networking(계속) Netfilter(iptables/방화벽) 기능, 무선랜 기능, Bridge기능 등등 나 이 텍 Embedded Linux System 환경구축 및 분석 245
246 커널 옵션 설정 Device Drivers 각종 디바이스 드라이버의 세팅 MTD NOR/NAND의 partitioning & I/O Input device keyboard/touch SCSI SCSI지원/USB mass storage지원 나 이 텍 Embedded Linux System 환경구축 및 분석 246
247 커널 옵션 설정 File Systems 각종 File System지원 패키징 관련, NFS세팅, NLS(국가별 언어세팅) proc, sysfs, tmpfs 등의 Pseudo filesystems 지원 나 이 텍 Embedded Linux System 환경구축 및 분석 247
248 Kconfig-language 커널 옵션 메뉴를 정의 하는 언어 옵션 정의 파일: Kconfig Documentation/kbuild/kconfig-language.txt make menuconfig를 실행하면 Kconfig 파일을 읽어와 메뉴 표시 커널 설정 심볼 (Kconfig 파일안의 symbol) 커널 컴파일 옵션을 표현하는 이름 형식: CONFIG_symbol CONFIGsymbol 커널 소스 루트에.config 파일로 설정을 저장 include/linux/autoconf.h / 파일로 저장 나 이 텍 Embedded Linux System 환경구축 및 분석 248
249 Kconfig file arch/arm/kconfig 나 이 텍 Embedded Linux System 환경구축 및 분석 249
250 .config file.config 나 이 텍 Embedded Linux System 환경구축 및 분석 250
251 커널 옵션 설정 순서 make menuconfig Kconfig 파일 입력 메뉴 표시 커널 옵션 설정 옵션 저장.config Makefile에서 이용 include/linux/autoconf.h C 파일에서 이용 나 이 텍 Embedded Linux System 환경구축 및 분석 251
252 Kconfig intro Tree 구조로 된 configuration option들의 집합 +- Code maturity level options +- Prompt for development and/or incomplete code/drivers +- General setup +- Networking support +- System V IPC +- BSD Process Accounting +- Sysctl support +- Loadable module support +- Enable loadable module support +- Set version information on all module symbols +- Kernel module loader 모든 menu entry 들은 자신만의 종속성을 가지고 있음 종속성은 menu entry의 가시성을 결정 child entry는 parent entry가 보기 가능할 때만 보여짐 나 이 텍 Embedded Linux System 환경구축 및 분석 252
253 Kconfig Menu entries Menu entry 들은 config option을 정의 하고 있음 config option을 제외한 나머지 entry들은 menu entry를 구성하는 것을 도와줌 Ex) config MODVERSIONS bool "Set version information on all module symbols" depends MODULES help Usually, modules have to be recompiled whenever you switch to a new kernel.... 모든 라인은 key word로 시작하고 복수의 아규먼트가 올 수 있음 config 로 시작하는 라인은 새로운 config entry를 의미함. 이후의 라인들은 config option을 위한 속성들을 나타냄. 나 이 텍 Embedded Linux System 환경구축 및 분석 253
254 Kconfig Menu attributes Type definition bool tristate string hex int Menu attribute (ex> arch/arm/kconfig) 모든 config option은 type을 가져야 함 두 가지 기본 타입이 존재 tristate string 다른 타입은 위의 두 가지 타입에 기반함 input prompt를 추가로 지정할 수 있음. 나 이 텍 Embedded Linux System 환경구축 및 분석 254
255 Attribute type - Input prompt Input prompt prompt p <prompt> p [ if <expr>] 모든 메뉴 엔트리는 최소한 하나의 prompt를 가질 수 있음 Prompt는 display를 위하여 사용됨 메뉴와 종속성이 있는 것이 있다면 if 와 함께 사용할 수 있음. Ex) two examples are equivalent: And bool Networking support bool prompt Networking support 나 이 텍 Embedded Linux System 환경구축 및 분석 255
256 Attribute type default value Default value default <expr> [ if <expr>] Config option은 얼마든지 default value 들을 가질 수 있음 복수개의 default value 값들이 있는 경우 첫 번째 정의되어진 한 개 만 활성화 됨 Menu entry에 정의되어진 default value 값의 한계는 없음 Default value 가 어디에 정의 되든 이전 값에 의해서 가려짐 사용자에 의해서 새로운 값이 설정되지 않으면 default value가 config option에 설정됨 Dependency를 추가할 수 있음 나 이 텍 Embedded Linux System 환경구축 및 분석 256
257 Attribute type dependencies dependencies depends on / requires: <expr> Menu entry를 위한 종속성을 정의 여러 개의 dependencies 들은 && 로 연결하여 정의 Dependencies 들은 menu entry에 속한 모든 다른 옵션들에 적용됨 # arch/arm/mach-s5pc100/kconfig # # Copyright 2007 Simtec Electronics # # Licensed under GPLv2 config MACH_MDS6410 bool "MDS6410" select CPU_S3C6410 select MACH_SMDK help Say Y here if you are using the MDS6410 config MACH_SMDKC100 bool "SMDKC100" select CPU_S5PC100 select S3C_DMA_PL330 select S3C_DEV_I2C1 select S3C_DEV_HSMMC select S3C_DEV_HSMMC1 select S3C_DEV_HSMMC2 select S5PC1XX_SETUP_SDHCI select S3C64XX_SETUP_I2C1 help Machine support for the Samsung SMDKC100 나이텍 Embedded Linux System 환경구축 및 분석 257
258 Attribute type numerical ranges, help text Numerical ranges range <symbol> <symbol> [ if <expr>] Integer 나 hex input value에 대한 영역을 설정 사용자는 첫 번째 symbol 보다 크거나 같고 두 번째 symbol 보다 작 거나 같은 값을 입력해야 함 Help text help or ---help--- Menu entry 도움말 나 이 텍 Embedded Linux System 환경구축 및 분석 258
259 커널 컴파일(1) Makefile에서 Crosstool chain 지정 ARCH := arm CROSS_COMPILE := $(shell if [ -f.cross_compile ]; then cat.cross_compile; fi) 혹은 일반적으로는 ARCH := arm CROSS_COMPILE := arm-generic-linux-gnueabi- Kernel Compile zimage 의 경우 make zimage make modules;make modules_install uimage의 경우(u-boot용 커널 이미지) Make uimage make modules;make modules_install uimage의 경우는 u-boot/tools의 mkimage가 필요함 나 이 텍 Embedded Linux System 환경구축 및 분석 259
260 커널 컴파일(2) 컴파일된 커널의 위치 arch/arm/boot /b 디렉토리에 위치함 컴파일된 커널은 다운로드가 가능하도록 tftp server 디렉토리로 복사 해야 함 번거롭기 때문에 자동으로 복사하도록 세팅 arch/arm/boot/makefile $(obj)/image: vmlinux FORCE $(call ' Kernel: is ready' $(obj)/compressed/vmlinux: $(obj)/image FORCE $(Q)$(MAKE) $(build)=$(obj)/compressed $(obj)/zimage: $(obj)/compressed/vmlinux FORCE $(call if_changed,objcopy) cp -f arch/arm/boot/zimage ' Kernel: is ready' 나 이 텍 Embedded Linux System 환경구축 및 분석 260
261 리눅스 포팅 관련 커널 소스 구조 Linux fs net drivers init include ipc lib kernel mm arch sound ext2 unix inet net linux mips hpfs char asm-alpha alpha msdos block asm-i386 sparc nfs scsi asm-m68k m68k minix asm-mips arm proc asm-arm sysfs plat-s3c24xx kernel boot mm mach-s5pc100 plat-s5pc1xx 나 이 텍 Embedded Linux System 환경구축 및 분석 261
262 리눅스 커널 소스 트리 Directory kernel mm ipc init lib fs net arch include scripts Documentatio n drivers Description 프로세스 및 시그널 관련 코드 가상 메모리 관련 코드 IPC(Interprocess Communication)관련 코드 리눅스 커널의 초기화 코드 표준 C 라이브러리 함수중 일부 구현 코드 파일 시스템 관련 코드 TCP/IP등 여러 통신 프로토콜 관련코드 i386, PowerPC, MIPS, ARM등의 CPU관련 코드들(Hardware dependent) 헤더 파일 부분으로 asm-arm과 같은 부분 CPU관련코드들이 있다(일부 Hardware dependent) 커널 컴파일을 위한 보조적인 코드 커널에 관련된 여러 문서 일반적으로 OS에 쓰이는 드라이버 코드(일부 Hardware dependent) 나 이 텍 Embedded Linux System 환경구축 및 분석 262
263 S5PC100 커널의 구조(1) 관련 디렉토리 arch, include, drivers 디렉토리의 소스들이 관련 Architecture관련 Source Linux 2.6.2x 커널의 경우는 비슷한 SoC의 기능들을 한꺼번에 모아 plat-xxx 의 디렉토리 구조로 사용 삼성의 SoC 계열의 경우 arch/arm/plat-s5pc1xx/ 실제 architecture 관련 파일들은 arch/arm/mach-s5pc100/ 디렉토리 내부에 존재 나 이 텍 Embedded Linux System 환경구축 및 분석 263
264 S5PC100 커널의 구조(2) Include 관련 Source include/asm-arm ARM CPU관련 파일들이 모여 있음 ARM CPU를 이용한 SoC인 S5PC100에 대한 architecture 관련 include 파일들은 include/asm-arm/arch-s3c24xx include/asm-arm/plat-s3c24xx에 존재 arch-s5pc100이 아니고, arch-s3c2410인 이유는 S5PC100과 같은 삼성 CPU의 경 우는 기본적으로 S3C2410 아키텍처에 기반을 둔 기능들이 많기 때문임. 이런 부분은 전적으로 개발자의 의지에 좌우가 됨 가장 좋은 선택은 각 아키텍처별로 완전히 분리해 놓는 것임 그렇지 않을 경우 소스의 분리 및 개발이 힘듦 나 이 텍 Embedded Linux System 환경구축 및 분석 264
265 S5PC100 커널의 구조(3) Kconfig, Makefile과 Source Tree의 관계 S5PC100을 이용한 S5PC100의 경우도 SoC에 따른 커널의 설계에 따 라 소스의 구조를 정하게 됨 커널 소스의 구조는 커널의 configuration과 관련많음. 커널의 소스의 구조를 지정하는 Kconfig와 커널 컴파일의 방향을 지 정하는 Makefile과의 관계에 의존을 하게 됨 S5PC100 source Tree관계 S5PC100 SoC관련 소스들은 S3C2410 architecture에도 속함 arch/arm/plat-s5pc1xx, arch/arm/mach-s5pc100, arch/arm/mach-s3c24xx 세개의 디렉토리에 분산 나 이 텍 Embedded Linux System 환경구축 및 분석 265
266 S5PC100 커널의 구조(4) S5PC100 source Tree관계(계속) arch/arm/kconfig파일내용 /K - arch/arm/kconfig source "arch/arm/mach-omap2/kconfig / / source "arch/arm/plat-s3c24xx/kconfig source "arch/arm/plat-s3c64xx/kconfig source "arch/arm/plat-s5pc1xx/kconfig" if ARCH_S3C2410 source "arch/arm/mach-s3c2400/kconfig" source "arch/arm/mach-s3c2410/kconfig" source "arch/arm/mach-s3c2412/kconfig" source "arch/arm/mach-s3c2440/kconfig" source "arch/arm/mach-s3c2442/kconfig" source "arch/arm/mach-s3c2443/kconfig" endif if ARCH_S3C64XX source "arch/arm/mach-s3c6400/kconfig" source "arch/arm/mach-s3c6410/kconfig endif if ARCH_S5PC1XX source "arch/arm/mach-s5pc100/kconfig endif 나 이 텍 Embedded Linux System 환경구축 및 분석 266
267 S5PC100 커널의 구조(5) S5PC100 source Tree관계(계속) arch/arm/makefile의 /M 내용 - arch/arm/makefile # If we have a machine-specific directory, then include it in the build. core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/ core-y += $(machdirs) $(platdirs) machine-$(config_arch_s5pc1xx) := s5pc100 plat-$(config_plat_s5pc1xx) := s5pc1xx s3c S5PC100 architecture관련 디렉토리와 S3C 관련 디렉토리 가연관 나 이 텍 Embedded Linux System 환경구축 및 분석 267
268 S5PC100 커널의 구조(6) S5PC100 source Tree관계(계속) 전체 아키텍처(S5PC100)를 선택하고 세부 아키텍처(S5PC100)를 선택하고 세부 아키텍처가 속해있는 platform을 선택할 수 있도록 구성 Platform 선택을 위한 구성 파일 arch/arm/mach-s5pc100 디렉토리의 Kconfig 파일 arch/arm/plat-s5pc1xx / 디렉토리의 Kconfig 파일 나 이 텍 Embedded Linux System 환경구축 및 분석 268
269 S5PC100 커널의 구조(7) - arch/arm/mach-s5pc100/kconfig config MACH_SMDKC100 bool "SMDKC100" select CPU_S5PC100 select S3C_DMA_PL330 select S3C_DEV_I2C1 select S3C_DEV_HSMMC select S3C_DEV_HSMMC1 select S3C_DEV_HSMMC2 select S5PC1XX_SETUP_SDHCISETUP SDHCI select S3C64XX_SETUP_I2C1 help Machine support for the Samsung SMDKC100 - arch/arm/plat-s5pc1xx config PLAT_S5PC1XX bool depends on ARCH_S5PC1XX select CPU_V7 select PLAT_S3C select ARM_VIC default y select NO_IOPORT select ARCH_REQUIRE_GPIOLIB select S3C_GPIO_TRACK select S3C_GPIO_PULL_UPDOWN select S3C_GPIO_CFG_S5PC1XX select DMABOUNCE help Base platform code for any Samsung S5PC1XX device if PLAT_S5PC1XX # Configuration options shared by all S5PC1XX implementations 나 이 텍 Embedded Linux System 환경구축 및 분석 269
270 S5PC100 커널의 구조(8) 커널이 올라가는 메모리의 위치 arch/arm/mach-s3c2410/makefile.boot Kernel Memory Start Address + 0x8000 Kernel Parameter tag(for ARM) 일반적으로 Physical Memory Start Address + 0x100 따로 지정가능 함 Makefile.boot zreladdr-y := 0x params_phys-y := 0x 이 파일은 커널 컴파일시 참조가 되어서 Linker에서 linker script를 이용해서 커널 이미지를 만들 때 사용 나 이 텍 Embedded Linux System 환경구축 및 분석 270
271 S5PC100 커널의 구조(9) 커널 컴파일 과정 -S5PC100 커널의 compile과정. make menuconfig make zimage make modules make modules_install make menuconfig의 결과물 kernel의 top directory의.config 이렇게 생성된.config 파일은 release된 커널의 arch/arm/configs의 S5PC100_defconfigs 파일로 저장한 후 추후에 kernel release시에 사용이 가능..config compile시 include/linux/autoconf.h 파일로 변환이 되어서 각 소스의 컴파일 방 향의 지정에 최종 사용 Makefile의 컴파일 옵션에도 영향을 주게 된다 나 이 텍 Embedded Linux System 환경구축 및 분석 271
272 S5PC100 커널의 구조(10) 최종 생성 커널 이미지 Linux 2.6.x 커널 이미지 형태 zimage 압축된 커널 + 커널 압축 해제 헤더 uimage u-boot용 커널 이미지 u-boot커널 헤더 + (zimage 혹은 압축된 커널) S5PC100은 u-boot용으로 zimage 를 사용 이렇게 할 경우 bootm명령이 아니라 go 명령 사용 common/cmd_bootm.c 를 수정하여 zimage도 bootm 명령을 이용해서 부팅할 수 있도록 구성 실제로 컴파일된 커널의 최종 이미지는 vmlinux objcopy를 이용 Image 압축(piggy.gz) 압축해제헤서 + piggy.gz zimage 나 이 텍 Embedded Linux System 환경구축 및 분석 272
273 정리 및 Q/A 나 이 텍 Embedded Linux System 환경구축 및 분석 273
274 Embedded Linux 분석 및 환경구축 Linux Kernel 구조의 이해
275 세부 목차 Linux Kernel의 부트과정 나 이 텍 Embedded Linux System 환경구축 및 분석 275
276 Linux kernel 압축되어있는 linux kernel entry point arch/*/boot/compressed/head.s 압축된 image를 압축 해지 압축되지 않는 kernel의 entry point로 jump 압축되어있지 않은 linux kernel entry point arch/*/kernel/head.s architecture와 관련 있는 hardware를 초기화 C 코드가 수행될 수 있도록 설정(stack k확보, bss 초기화) init/main.c에 있는 start_kernel() 함수를 호출 U-Boot 혹은 JTAG Debugger사용시 직접 부팅가능(압축해제 헤더없이) start_kernel() architecture dependent 한 부분 초기화 Linux sub system 초기화 kernel_thread(init, )함수로 PID가 1인 init kernel thread 생성 start_kernel() 함수 자체는 idle task 로 전환 나 이 텍 Embedded Linux System 환경구축 및 분석 276
277 커널 이미지 구조 zimage 구성 리눅스 커널 이미지는 크기를 줄 이기 위해 압축된 형태로 저장한 다. vmlinux zimage head.o, misc.o (압축 해제 코드) 압축 해제 시 지정된 물리주소에 해제 한다. arch/arm/mach- s5pc100/makefile.boot zreladdr- := 0x piggy.gz (압축된 커널 이미지) head.o, misc.o (초기 데이터) 나 이 텍 Embedded Linux System 환경구축 및 분석 277
278 리눅스 커널 로드 단계(S5PC100의 경우) 커널이 시작되면서 페이지 테이블이 만들어진다. MMU가 설정되면 리눅스 커널은 가상주소를 기준으로 메모리 맵을 사용한다. Trap init it 단계에서 리눅스에서 사용되는 exception vector와 handler가 복사된다. S5PC100의 경우는 일반적인 u-boot의 방법을 사용하지 않음(s3c64XX 부터 zimage 직접 이용함) 나 이 텍 Embedded Linux System 환경구축 및 분석 278
279 리눅스 커널 부팅 과정 Linux Kernel Start SVC 모드 전환 및 인터럽트 중지 프로세서 정보 검색 OK 머신 아키텍처 정보 검색 OK 페이지 테이블 설정 False False error_p error_a MMU 및 Cache 설정 Stack 및 시스템 정보 설정 BSS clear 시스템 정보 저장 start_kernel() 호출 Kernel 초기화 나 이 텍 Embedded Linux System 환경구축 및 분석 279
280 리눅스 커널 시작 Bootloader로부터 architecture number를 인자로 받음 Kernel Entry arch/arm/kernel/vmlinux.lds /k li ld 에 정의 대로 시작 ENTRY(stext) 커널이 시작되면 stext 부터 실행 arch/arm/kernel/head.s 에 정의 되어 있음 71 INIT 72.type stext, %function 73 ENTRY(stext) ENTRY()는 매크로로 정의 되어있으며, 어셈블리에서 라벨 심볼을 외부에서 사용할 수 있도록 해줌 #ifndef ENTRY #define ENTRY(name).globl name; ALIGN; name: #endif 나 이 텍 Embedded Linux System 환경구축 및 분석 280
281 프로세서 정보 검색 프로세서 정보 검색 76 mrc p15, 0, r9, c0, get processor id 77 bl r5=procinfo r9=cpuid 78 movs r10, invalid processor (r5=0)? 79 beq yes, error 'p' ARM Linux kernel이 정상적으로 동작하기 위하여 타깃 보드의 프로세서가 무엇인지 찾는다. 프로세서 정보가 없으면 커널 초기화가 중지되고 오류 메시지 출력 후 멈춘다. 프로세서 ID 값은 cp15의 레지스터 0에 명시되어 있다. cp15 register 0: ID Code register mrc p15, 0, r9, c0, c0 나 이 텍 Embedded Linux System 환경구축 및 분석 281
282 머신 타입 검색 (1/5) 머신 타입 검색 ARM Linux kernel이 정상적으로 동작하기 위하여 머신 타입 정보도 올바르 게 설정되어 있어야 한다. 해당하는 머신 타입 정보가 없으면 커널 초기화는 중단된다. 80 bl r5=machinfo 81 movs r8, invalid machine (r5=0)? 82 beq yes, error 'a' 개발 대상 보드의 타입을 말한다. 리눅스에서 지원되는 모든 머신은 고유의 번호를 사용한다. 개발 대상 보드의 타입 번호는 ARM 리눅스 관리 사이트에서 대상 머신을 등록한 후 부여 받는다. 개발 단계에서는 다른 보드와 중복되지 않는 임의의 값을 설정하여 사용할 수 있다. 나 이 텍 Embedded Linux System 환경구축 및 분석 282
283 머신 타입 검색 (2/5) 머신 타입 비교 부트로더에서 넘어온 R1 레지스터의 머신 타입 값과 machine_desc struct의 nr 필드 값과 비교 nr 필드의 초기값은 mach-types.h에 정의되어있음 mach-types.h 파일은 arch/arm/tools/mach-types 를 바탕으로 자동 생성 arch/arm/tools/mach-types # # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number # ebsa110 ARCH_EBSA110 EBSA110 0 riscpc ARCH_RPC RISCPC 1 stamp9g20 MACH_STAMP9G20 STAMP9G smdk6430 MACH_SMDK6430 SMDK smdkc100 MACH_SMDKC100 SMDKC tavorevb MACH_TAVOREVB TAVOREVB 1827 나 이 텍 Embedded Linux System 환경구축 및 분석 283
284 머신 타입 검색 (3/5) <linux>/include/asm-arm/mach-types.h include/asm-arm/mach-types.h(컴파일을 해야 생성됨) /* * This was automagically generated from arch/arm/tools/mach-types! * Do NOT edit */ #define MACH_TYPE_EBSA110 0 #define MACH_TYPE_RISCPC 1 #define MACH_TYPE_SMDK #define MACH_TYPE_SMDKC #ifdef CONFIG_MACH_SMDKC100 # ifdef machine_arch_type # undef machine_arch_type # define machine_arch_type machine_arch_type # else # define machine_arch_type MACH_TYPE_SMDKC100 # endif # define machine_is_smdkc100() (machine_arch_type == MACH_TYPE_SMDKC100) #else # define machine_is_smdkc100() (0) #endif 나 이 텍 Embedded Linux System 환경구축 및 분석 284
285 머신 타입 검색 (4/5) Machine description arch/arm/include/asm-arm/mach/arch.harm/mach/arch h struct machine_desc { /* * Note! The first four elements are used * by assembler code in head-armv.s */ unsigned int nr; /* architecture number */ unsigned int phys_io; /* start of physical io */ unsigned int io_pg_offst; /* byte offset for io page tabe entry */ const char *name; /* architecture name */ }; /* * Set of macros to define architecture features. This is built into * a table by the linker. */ #define MACHINE_START(_type,_name) static const struct machine_desc mach_desc_##_type attribute_used attribute (( section (".arch.info.init"))) = {.nr = MACH_TYPE_##_type,.name = _name, #define MACHINE_END }; 나 이 텍 Embedded Linux System 환경구축 및 분석 285
286 머신 타입 검색 (5/5) Machine define arch/arm/mach-s5pc100/mach-smdkc100.c MAC MACHINE_START(SMDKC100, "SMDKC100") /* Maintainer: Ben Dooks */.phys_io = S3C_PA_UART _ & 0xfff00000,.io_pg_offst = (((u32)s3c_va_uart) >> 18) & 0xfffc,.boot_params = S5PC1XX_PA_SDRAM + 0x100,.init_irq it i = s5pc100_init_irq, it i.map_io = smdkc100_map_io,.init_machine = smdkc100_machine_init,.timer = &s5pc1xx_timer, MACHINE_END 나 이 텍 Embedded Linux System 환경구축 및 분석 286
287 커널 진입 start_kernel() 리눅스 커널 부팅의 거의 모든 과정이 start_kernel()에서 이루어 진다. 가장 먼저 lock을 획득한다. lock_kernel() Big Kernel Lock Big Kernel Semaphore init kernel thread 생성 init/main.c asmlinkage void init start_kernel(void) { lock_kernel(); boot_cpu_init(); page_address_init(); printk(kern_notice); printk(linux_banner); setup_arch(&command_line); 나 이 텍 Embedded Linux System 환경구축 및 분석 287
288 init kernel thread init kernel thread rest_init()에서 init()는 함수를 kernel thread로 생성 root file system mount /dev/console open stdin stdout stderr Kernel argument가 있으면 command를 실행 시킴 /sbin/init, /etc/init, /bin/init, /bin/sh 순으로 프로세스 생성 시도. 하나라도 성공하면 PID 1번으로 init 프로세스 생성 init 프로세스 생성이 실패하면 kernel panic 발생 run_init_process(execute_command); command); 루틴에서 init실행 일반적으로 /sbin/init (System V init)이 실행됨 System V init 나 이 텍 Embedded Linux System 환경구축 및 분석 288
289 init kernel thread init kernel thread /dev/console open (file descriptor 0) dup system call을 이용하여 file descriptor 1번 과 file descriptor 2번을 똑 같은 device(/dev/console)로 만듦 file descriptor 0: stdin file descriptor 1: stdout file descriptor 2: stderr 지정한 init 프로그램이 있는 경우 kernel argument로 전달받은 프로그램을 실행 지정된 프로그램이 없는 경우 /sbin/init, /etc/init, bin/init, /bin/sh 순으로 init 프 로그램 실행을 시도하고, 하나라도 성공하면 PID 1 번으로 init 프로그램 실행 init 프로그램 실행에 실패하면 kernel panic 발 생 나 이 텍 Embedded Linux System 환경구축 및 분석 289
290 System V init(/sbin/init) System V init /etc/inittab 파일의 내용에 따라 순서대로 실행 runlevel init 이 수행할 여러 가지 서비스들의 그룹 예) 1번 runlevel: l A1, A2 서비스 실행 2번 runlevel: B1, B2 서비스 실행 숫자로 서비스 그룹 지정 0 ~ 6 번 까지 숫자로 나타냄 /etc/inittab 파일에 기술 되어 있음 나 이 텍 Embedded Linux System 환경구축 및 분석 290
291 runlevel runlevel 0: halt (시스템 종료와 관계된 서비스) 1: Single user mode 2: Multi-user mode(nfs 서비스를 제외한 다중 사용자 모드) 3: Multi-user mode(다중 사용자 모드) 4: Not used 5: X11 (X11을 이용한 login 화면을 내보내는 다중 사용자 모드) 6: reboot (리부팅과 관련된 서비스) 나 이 텍 Embedded Linux System 환경구축 및 분석 291
292 /etc/inittab inittab 파일 내용 <name>:<level>:<action>:<command> 형식으로 기술 되어 있음 name: 이름, 특별한 의미는 없음, 보통 4자 이하 level: command를 수행할 run level action: command를 수행할 때를 명시 command: 수행할 명령어 나 이 텍 Embedded Linux System 환경구축 및 분석 292
293 /etc/inittab 분석(1/3) /etc/inittab (System V 방식 RedHat Linux계열) id:3:initdefault: i i d # System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc / / 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 # Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now # When our UPS tells us power has failed, assume we have a few minutes of power left. Schedule a shutdown # for 2 minutes from now. This does, of course, assume you have powerd installed and your UPS connected # and working correctly. pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" # If power was restored before the shutdown kicked in, cancel it. pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" # Run xdm in runlevel 5 # xdm is now a separate service x:5:respawn:/etc/x11/prefdm -nodaemon 나 이 텍 Embedded Linux System 환경구축 및 분석 293
294 /etc/inittab 분석(2/3) id:3:initdefault: 시스템 부팅 시 default run level을 3으로 지정 대부분 리눅스 배포 판의 default run level 5 i3:3:wait:/etc/rc.d/rc 3 wait: 특정 run level에서 한번 실행되고 init는 해당 프로세스 종료 시까지 대 기 /etc/rc.d/rc <run level>: network 이나기타데몬들을start/stop 시키는 다른 shell script를 호출하는 스크립트 ca:ctrlaltdel:/sbin/shutdown t3 r now 모든 run level에서 ctrl+alt+del 이 눌렸을 경우 /sbin/shutdown t3 r now 를 실행 나 이 텍 Embedded Linux System 환경구축 및 분석 294
295 /etc/inittab 분석(3/3) 3:2345:respawn:/sbin/mingetty tty3 2345runlevel에서 2,3,4,5 /sbin/mingetty 실행 mingetty /etc/issue 파일 내용을 출력 login: 메시지 출력 사용자 입력 대기 respawn: command 가 종료되면 다시 command를 수행 ex) mingetty Login shell(bash) shell exit mingetty x:5:respawn:/etc/x11/prefdm -nodaemon 5번 run level 에서 /etc/x11/prefdm 을 respawn 방식으로 수행 /etc/x11/prefdm Graphic을 이용한 로그인 화면을 내보냄 나 이 텍 Embedded Linux System 환경구축 및 분석 295
296 run level action action Command 를 실행할 때와 방법을 명시 respawn 프로세스 종료 시 자동 재 시작 wait 특정 run level l 에서 한번 실행되고 init는i 는 해당 프로세스 종료 시까지 대기 once boot off initdefault powerwait powerfail powerfailnow ctrlaltdel 특정 run level 에서 한번만 실행 시스템 부팅 시 실행, run level 필드 무시 아무 동작도 안 함 시스템 부팅 후에 지정된 run level 실행 UPS 장치가 연결된 경우 전원이 다운될 때 UPS로부터 신 호를 받아 실행 전원 다운 시 프로세스 완료를 기다리지 않고 실행 UPS 배터리가 소모되어 전원이 차단될 경우 실행 CTRL+ALT+DEL 키 조합이 입력될 떄 실행 나 이 텍 Embedded Linux System 환경구축 및 분석 296
297 초기화 스트립트 디렉토리 /etc/rc.d 시스템 초기화 관련 스크립트가 있는 디렉터리 rc.sysinit init 프로세스가 가장 먼저 실행하는 스크립트 시스템 초기화 담당 rc.local init.d rcn.dn runlevel 2,3,5 의 마지막에 실행되는 스크립트 부팅시 실행되어야 할 작업을 설정 init 프로세스가 실행해야 할 데몬의 구동 스크립트가 있는 디렉터리 N 은 runlevel을 의미 runlevel을 의미하는 각 디렉터리에는 S로 시작하는 데몬과 K로 시작하는 종료 데 몬이 심볼릭 링크되어 있다. 나 이 텍 Embedded Linux System 환경구축 및 분석 297
298 부팅중 발생 가능 에러 (1/2) No init found. Try passing init= option to kernel. 커널에서 발생하는 에러 사용자가 지정한 init 프로그램을 찾지 못한 경우 /sbin/init, /etc/init, /bin/init, /bin/sh 순으로 실행을 시도하고 모 두 실패한 경우 프로그램이 존재하지 않는 경우 프로그램이 사용하는 shared object 가 없는 경우 프로그램과 shared object의 permission이 올바르지 않은 경우 나 이 텍 Embedded Linux System 환경구축 및 분석 298
299 부팅중 발생 가능 에러 (2/2) "Id "xxx" respawning too fast: disabled for x minutes" init (System V init)에서 발생하는 에러 action 이 respawn 인 줄에서 실행하는 command가 매우 빨리 재 실행 되는 경우 발생 프로세스가 너무 빨리 죽을 때 발생함 정상적으로 수행되고 죽는 프로그램인 경우 respawn action으로 지정하면 안됨 프로그램이 정상적으로 수행되지 않는 경우 위의 No init 에러와 같은 문제임 나 이 텍 Embedded Linux System 환경구축 및 분석 299
300 세부 목차 Linux kernel과 device driver와의 관계 나 이 텍 Embedded Linux System 환경구축 및 분석 300
301 리눅스 버전 규칙 Releases are versioned as x.y.z,r Stable versions x: Major release number y: Minor release (짝수) z: Build number (식별 번호) r: revision number 예) , , , Development versions y: 홀수 번호 예) , 나 이 텍 Embedded Linux System 환경구축 및 분석 301
302 커널 소스 트리 디렉토리 설 명 디렉토리 설 명 arch 아키텍처 종속적 코드 mm 메모리 관리 하위시스템 crypto 암호화 API net 네트워킹 하위시스템 Documentation 커널 소스 문서 scripts 커널을 빌드하는 데 사용되는 스크립트 drivers 디바이스 드라이버 security 리눅스 보안 모듈 fs VFS와 그 밖의 파일 시스템 sound 사운드 서브 시스템 include 커널 헤더 파일들 usr 초기 유저 공간 코드 init ipc kernel lib 커널 부트와 초기화 관련 프로세스간 통신 코드 스케줄러 등 핵심 하 위 시스템 유틸리티 루틴 <표. 커널 소스 트리의 루트에 있는 디렉토리 목록> 나 이 텍 Embedded Linux System 환경구축 및 분석 302
303 리눅스가 지원하는 하드웨어 아키텍처 arch/ 디렉토리를 살펴본다. Minimum: MMU를 포함하지 않았거나 포함한 32bit 프로세서 32-bit 아키텍처: alpha, arm, cris, h8300, i386, m68k, m68knommu, mips, parisc, ppc, s390, sh, sparc, um, v bit 아키텍처: ia64, mips64, ppc64 sh64, sparc64, x86_64 나 이 텍 Embedded Linux System 환경구축 및 분석 303
304 드라이버 개발자 관점 드라이버 개발자의 관점에서 디바이스드라이버를 위해 새롭게 코드를 만들 필요 없이 유사한 코드를 재사용할 수 있다. 자유공동체(free community)에 배포, 지원, 코드 리뷰와 테스팅을 할 수 있다. 커널과 함께 컴파일 하거나 모듈로 디바이스드라이버를 사용할 수 있다. 각 커널 버전과 패치 버전에 대한 바이너리 드라이버를 제공하지 않아도 된다. 나 이 텍 Embedded Linux System 환경구축 및 분석 304
305 디바이스 드라이버 소스의 구조 리눅스에서의 디바이스 드라이버 리눅스 커널에는 수많은 시스템에서 동작하는 하드웨어를 다루는 디바 이스 드라이버 소스를 담고 있다. 특히 임베디드 시스템에 리눅스를 적 용하는 사람들에게는 재 작성 하지 않고 소스를 분석하여 적용할 수 있 다. 디바이스 드라이버 디렉터리 di drivers/acorn/ / ACORN은 ARM 코어의 32bit 프로세서를 사용하는 시스템으로, 일반 PC와 유사하다. drivers/acpi/ ACPI(Advanced Configuration and Power Interface)는 인텔, MS, 도시바 등에 의해 개발된 전력 관리용 규격을 지원한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 305
306 리눅스 커널방식과 모듈 초기 리눅스 커널방식 초기 리눅스 커널은 모노리식 방식으로 커널에 모든 디바이스 드라 이버를 포함시켜야 했다. 이런 방식은 디바이스가 바뀔 때마다 커널 컴파일을 다시 해야 한다. 모듈 구동방식 커널이 동작중인 상태에서 디바이스 드라이버를 동적으로 추가하거 나 제거할 수 있는 개념으로 개발 시 개발 시간을 효과적으로 단축할 수 있다. PCI, USB, PCMCIA에 관련 된 디바이스의 PNP 기능을 지원하려면 모듈방식이 필요하다. 모듈 방식은 MMU가 있는 프로세서에서만 지원되며, 커널 버전이 동일해야 하는 문제가 있다. 나 이 텍 Embedded Linux System 환경구축 및 분석 306
307 커널 모듈 vs. 응용 프로그램 사용자 영역과 커널 영역 응용프로그램은 사용자영역에서 커널모듈은 커널 영역에서 실행된다. 현대적인 프로세서는 응용 프로그램이 자원을 불법으로 참조하려는 시도를 막도록 기본적으로 슈퍼바이저와 유저모드로 나뉘어 있다. Ex) ARM 프로세서의 모드 (abort, FIQ, IRQ, supervisor, system, undefined, user) 커널에서의 동시성 처리 커널은 특히 동시적으로 처리 되어야 하는 프로세스가 많이 발생한다. 동시성 발생 원인 특정 드라이버에 둘 이상의 프로세스가 접근할 때. 인터럽트 처리 (비동기식 처리) 프로세서가 둘 이상인 시스템에서 프로세스 처리. 커널 코드는 재진입이 가능 해야 한다. 다시 말하면, 동시에 여러 문맥에서 실행할 수 있어야 한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 307
308 디바이스 드라이버의 역할 디바이스 드라이버의 역할 디바이스 드라이버는 하드웨어를 사용 가능하게 만들어 줄 뿐 하드웨어 를 어떻게 사용할지에 대한 결정은 응용 프로그램에게 넘겨야 한다. 디바이스 드라이버는 온갖 상황을 고려해 균형 있게 작성한다. 최대한 유연하고 많을 기능을 사용자에게 제공하려고 할 수록 디바이스 드라이버 제작자는 많은 부분을 구현해야 한다. 동기식 비동기식 모두 지원할 것인가? 장치를 여러 번 열 것인가? 정책 독립성을 제공할 것인가? 제공 되는 디바이스드라이버 유틸리티 디바이스 제어와 구성을 도울 목적으로 간단한 유틸리티와 디바이스 드라이버를 같이 출시 하는 경우가 있다. 나 이 텍 Embedded Linux System 환경구축 및 분석 308
309 커널 서브시스템 구분 프로세스 관리 프로세스 생성, 제거 및 프로세스간 통신을 관리한다. CPU를 공유하는 방법을 제어하는 스케줄러 메모리 관리 커널은 모든 프로세스에 대한 가상 주소 영역을 구축한다. 함수 호출을 통하여 메모리 관리 하위 시스템과 통신한다.(malloc/free) 파일시스템 유닉스는 파일 시스템 구조에 크게 의존한다. 거의 모든 요소를 파일로 취급할 수 있다. 리눅스는 다양한 파일 시스템 형식을 지원할 수 있다. 디바이스 제어 프로세서, 메모리 기타 몇몇 디바이스를 제외하고는 나머지 모든 제어 활동은 해당 디바이스 드라이버가 관리하게 된다. 네트워킹 들어오는 패킷은 모두 비동기식 이벤트이므로 프로세스가 패킷을 처리 하려면 누군가가 각 패킷을 모아서 식별한 후 프로세스로 전달해 주어야 한다. 이것을 모두 커널에 구현해야 한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 309
310 커널 관점에서 본 리눅스 구조 proc1 proc2 proc3 proc4 proc5 procn User Space System Call Interface Filesystem Manager Process Manager Et2f Ext2fs proc xiafs if Task Management Memory Manager Scheduler minix nfs msdos Memory Management Signaling Buffer Cache Kernel Space Device Manager char block Console KBD SCSI CD-ROM PCI network Network Manager IPv6 Ethernet.. Device Interface dev1 dev2 dev3 dev4 devn <Fig. 커널 관점에서 본 리눅스 구조> 나 이 텍 Embedded Linux System 환경구축 및 분석 310
311 디바이스 드라이버 관점에서 본 리눅스 구조 Application area Application System Call Interface VFS Kernel area Buffer Cache Network Subsystem Character D/D Block D/D Network D/D Device Interface Hardware Hardware <Fig. 디바이스 드라이버 관점에서 본 리눅스 구조> 나 이 텍 Embedded Linux System 환경구축 및 분석 311
312 응용프로그램 관점에서 본 리눅스 구조 User Code C Library open read write close Application Layer sys_open sys_read sys_write sys_close Device Driver Selector 장치의 종류 장치의 번호 Kernel Layer dev_open dev_read dev_write dev_close Device Driver Layer 나 이 텍 Embedded Linux System 환경구축 및 분석 312
313 kernel userspace interface 구성된 /proc 디렉토리의 정보들 /proc/cpuinfo : CPU의 정보 /proc/meminfo: 메모리 정보 /proc/version: 커널 버전과 빌드 정보 /proc/cmdline:/ 커널의 명령행 인자 /proc/<pid>/environ: 프로세스에서 호출된 환경 변수 /proc/<pid>/cmdline: 프로세스의 명령행 인자 나 이 텍 Embedded Linux System 환경구축 및 분석 313
314 Q/A 및 정리 나 이 텍 Embedded Linux System 환경구축 및 분석 314
315 세부 목차 Kernel Module 나 이 텍 Embedded Linux System 환경구축 및 분석 315
316 커널 코드의 특징 커널 코드와 유저코드와의 차이점 커널은 C라이브러리에 접근할 수 없다. 커널은 GNU C로 작성된다. 커널에는 유저 공간에서와 같은 메모리 보호가 없다. 커널에서는 부동소수점 연산을 사용하기가 쉽지 않다. 커널은 고정 크기의 스택을 갖는다. No libc 커널 코드는 C라이브러리나 어떠한 라이브러리와도 링크되지 않는다. 대부분의 libc 함수들은 커널 안에 구현되어 있다. Ex) lib/string.c <linux/string.h> 나 이 텍 Embedded Linux System 환경구축 및 분석 316
317 Kernel Module 개요(1) 개요 Kernel의 일부 기능을 동적으로 로드 하여 사용 Object 형식의 파일로 Dynamic Library의 형태 주로 Device Driver에 사용 기본적인 기능은 커널에 두고 나머지 부가 기능은 모듈에서 제공. 장점 Kernel의 재 부팅 및 재 컴파일 없이 사용 가능 단점 런타임에 동적으로 커널에 코드를 삽입하거나 제거할 수 있다. Device Driver의 복잡도 증가 특정 부분은 Module화 할 수 없음 나 이 텍 Embedded Linux System 환경구축 및 분석 317
318 Kernel Module 개요(2) Linux에서 모듈 프로그래밍이 개발된 이유 초기의 리눅스는 모놀리딕 커널(monolithic kernel) 모든 기능이 커널 내부에 구현되어 있다. 사소한 커널 변경에도 커널 컴파일과 리부팅이 필요 유연하지 못함. 커널의 크기가 너무 크다. 커널의 일부 기능은 거의 사용되지 않지만, 메모리에 상주하고 있다. Kernel Module의 장점 커널의 일부 기능을 커널에서 빼고 모듈로 구현 그 기능이 필요할 때만 메모리에 적재 커널 크기를 줄일수 있어서 메모리의 효율적 이용이 가능 커널을 수정할 때마다 커널 컴파일 및 리부팅할 필요가 없다. 커널의 초기화 부분을 제외한 거의 모든 부분을 모듈로 구현가능 주로 파일시스템과 디바이스 드라이버 구현에 사용됨 나 이 텍 Embedded Linux System 환경구축 및 분석 318
319 Kernel Module 개요(3) Kernel Module의 장점(계속) 커널의 크기를 줄일 수 있으므로 고속 부팅에 유리 동적으로 디바이스 드라이버를 초기화 가능 기존 커널 부분의 디버깅 용으로 사용가능 단점 기존커널의 광역변수 혹은 함수명의 충돌 가능성(symbol이 겹칠 수 있음) 기존 커널의 기능을 사용할 경우 커널의 필요 부분을 미리 EXPORT_SYMBOL macro를 이용하여 symbol을 export해줘야 함(즉, 미리 모듈 프로그래밍에 염두를 둔 커널 코딩을 해야함) 커널 모드에서는 메모리 접근에 대한 보호없이 모든 영역에 접근이 가능하 므로 module로 인하여 동작되는 system이 crash될 수 있음. 나 이 텍 Embedded Linux System 환경구축 및 분석 319
320 Kernel Module 지원 Configuration Kernel의 configuration에서 지원되도록 세팅되어 있어야 함 나 이 텍 Embedded Linux System 환경구축 및 분석 320
321 Kernel Module 관련 utility 커널 모듈 install/remove 관련 명령어 insmod rmmod lsmod depmod module을 install, module install시 다른module에 대한의존 성이 있을 경우는 install이 안될 수 있음 module unload, 해당 module을 사용하고 있는 application등 이 있을 경우는 제거하지 못함(app제거 후 unload가능) load된 module의 list와 상태를 보여 줌 module에 대한 의존성 검사를 하고, dependency file 생성 modprobe depmod를 이용한 dependency를 이용하여 해당 모듈이 install 될 때 그 모듈에서 필요한 다른 모듈을 동시에 자동으로 install 해준다, dependency가 없는 모듈의 경우는 insmod와 동일하나, modprobe의 경우는 kernel 컴파일시 정식으로 make modules_install을 한 경우에만 loading이 이루어진다. 나 이 텍 Embedded Linux System 환경구축 및 분석 321
322 Kernel Module 관련 확인 설치된 모듈 정보 확인 설치된 모듈은 /proc/modules 파일에 기록된다 /proc/modules 파일을 이용한 현재 설치된 모듈을 확인 가능 # cat /proc/modules 모듈이 설치된 후에 커널 심볼 테이블에 있는 모듈 관련 심볼을 확인 # cat /proc/kallsyms grep ghello (여기서, ghello 모듈 이름) 나 이 텍 Embedded Linux System 환경구축 및 분석 322
323 모듈 관련 명령 정리 Module을 사용하기 위한 명령 # insmod 모듈명.ko 시스템에 모듈을 추가 # rmmod 모듈명 시스템에서 모듈을 제거 # lsmod 현재 등록된 모듈을 확인 # modprobe 모듈의 계층 검사 및 추가, 삭제(-r) 가능 # depmod 모듈의 의존성(Dependency)을 체크하여 업데이트 나 이 텍 Embedded Linux System 환경구축 및 분석 323
324 커널 모듈의 확인 과정 커널 모듈의 확인 과정 lsmod는 /proc/modules 파일을 읽어 정보를 얻는다. 커널은 모듈을 로드 하기 위해 modprobe를 실행 시킨다. modprobe에 모듈이름과 식별자가 전달된다. /etc/modules.conf / 파일에서 그 문자열을 찾는다. modprobe는 /lib/modules/version/modules.dep 파일을 조사해서 다른 모듈이 요구되는 의존성을 검사한다. 마지막으로 modprobe는 선행 모듈을 적재하기 위해 insmod를 사용해 요구된 모듈을 적재한다. Ex) 모듈로드 $ modprobe -a videocam 나 이 텍 Embedded Linux System 환경구축 및 분석 324
325 모듈의 기본 형태 초기화 함수 초기함수형태 static int my_init(void); 초기화 등록 매크로함수 module_init(my_init); 초기화 함수는 외부 코드에 의해 불려지지 않는다. 초기화가 성공하면 0을 리턴한다. 초기화는 대게 리소스를 등록하거나 자료구조를 생성한다. 라이선스 정보 매크로 MODULE_LICENSE() GPL이 아닌 모듈을 메모리에 로드하면 오염 플래그가 설정. 나 이 텍 Embedded Linux System 환경구축 및 분석 325
326 커널 내부 모듈의 자료 구조 include/linux/module.h struct t module { enum module_state state; // 모듈 상태 struct list_head list; // 모듈 리스트 char name[module_name_len]; // 중복되지 않는 모듈명... const struct kernel_symbol *syms; // 외부 참조가 가능한 모듈 심볼 관련 변수 unsigned int num_syms; const unsigned long *crcs;... }; int (*init)(void); // 모듈 적재 시 초기화 호출 함수 포인터 void *module_init; // 모듈 초기화 시 할당된 데이터 주소 void *module_core; // 실제 코드 데이터에 할당된 메모리 주소 unsigned long init_size, it i core_size; // 모듈 데이터 크기와 코어 크기 unsigned long init_text_size, core_text_size; // 실행 코드의 크기 struct mod_arch_specific arch; // 아키텍처 별 모듈 값 int unsafe; // 모듈이 제거되어도 안전한가? int license_gplok; // 모듈이 GPL 라이선스를 가졌는가?... /* The command line arguments (may be mangled). People like keeping pointers to this stuff */ char *args; // 커널 명령행 인자 나 이 텍 Embedded Linux System 환경구축 및 분석 326
327 모듈 빌드 2.6 (1) kbuild 2.6에 도입되어 모듈 빌드가 쉬워짐. 커널을 빌드 하기 위한 도구 처음 결정해야 할 것은 어디에 모듈 소스를 둘 것인가 하는 것. 커널 소스 트리에 있는 경우 {커널소스트리의 루트}/drivers/ 에 소스를 두고 분류. (일반적으로 엄격한 규칙인 있는 것인 아니다.) char/ 일반적인 캐릭터 디바이스 드라이버 block/ 일반적인 블록 디바이스 드라이버 usb/ USB 디바이스 드라이버 나 이 텍 Embedded Linux System 환경구축 및 분석 327
328 모듈 빌드 2.6 (2) 커널 소스 트리에 있는 경우 예 Fish Master XL 2000을 위한 디바이스 드라이버(캐릭터) 1) drivers/char/ 의 Makefile에 다음을 추가 obj-m += fishing.o 커널 옵션과 맞춰 줄 때 obj-$(config_fishing_pole) += fishing.o 2) drivers/char/fishing/ 안에 다음 내용을 포함하는 Makefile작성 obj-m += fishing.o 커널 옵션과 맞춰 줄 때 obj-$(config_fishing_pole) += fishing.o 3) 디바이스 드라이버 파일이 커 두 개로 나뉘어야 할 때 obj-$(config_fishing_pole) FISHING += fishing.o fishing-objs := fishing-main.o fishing-line.o 4) 이후 최종적인 fishing.ko가 만들어 진다. 나 이 텍 Embedded Linux System 환경구축 및 분석 328
329 모듈 빌드 2.6 (3) 커널 소스 밖에 있는 경우 예 Makefile 을 다음과 같이 구성할 수 있다. obj-m := fishing.o fishing-objs := fishing-main.o fishing-line.o 가장 큰 차이점이라면 build 과정이라고 할 수 있다. make -C /kernel/source/location SUBDIRS=$(PWD) modules -C 커널 소스 트리가 있는 위치 SUBDIRS 드라이버 소스가 있는 작업 디렉토리 빌드 하기 전에 소스디렉토리로 돌아오도록 한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 329
330 모듈 빌드 2.6 (3) 모듈 설치 컴파일된 모듈은 일반적으로 다음 위치에 설치. /lib/modules/version/kernel l / i /k l Ex) /lib/modules/ cfs-v19/kernel/drivers/char/fishing.ko 일반적인 커널은 다음 빌드 명령으로 적절한 위치에 설치한다. make modules_install 임베디드 시스템을 조직할 때는 적절한 램 디스크 위치에 넣어 두어야 한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 330
331 실습 예제 hello module 01.hello 나 이 텍 Embedded Linux System 환경구축 및 분석 331
332 간단한 Kernel 2.6 Module 실습(1/2) obj-m := ghello.o ghello-objs := hello.o EXTRA_CFLAGS += -I./include KDIR := /root/mds6410/kernel/linux mep6410 / / / default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean: rm -rf *.ko rm -rf *.mod.* rm -rf.*.cmd rm -rf *.o rm -rf *.bak 나 이 텍 Embedded Linux System 환경구축 및 분석 332
333 간단한 Kernel 2.6 Module 실습(2/2) #include <linux/module.h> #include <asm/uaccess.h> #include <asm/system.h> #include <linux/bitops.h> #include <linux/capability.h> #include <linux/module.h> #include <linux/types.h> #include <linux/kernel.h> #include <linux/sched.h> #include <linux/mm.h> #include <linux/errno.h> #include <linux/init.h> 실행및결과 # insmod ghello.ko Using ghello.ko Hello INIT # rmmod ghello Hello exit static int init ghello_init(void) { printk(" hello INIT \n"); return 0; } static void exit ghello_exit(void) { printk(" hello exit \n"); } module_init(ghello_init); module_exit(ghello_exit); MODULE_AUTHOR("mds technology"); MODULE_LICENSE( LICENSE("GPL/BSD Dual"); MODULE_DESCRIPTION("ghello test"); MODULE_SUPPORTED_DEVICE("ghellodevice"); 나이텍 Embedded Linux System 환경구축 및 분석 333
334 모듈의 적재 과정 insmod init_module( ) register_capability( ) capabilities[ ] printk( ).. rmmod cleanup_module( ) unregister_capability( ) <Fig. 모듈의 적재와 해제> 나 이 텍 Embedded Linux System 환경구축 및 분석 334
335 모듈의 적재 과정 (1) insmod hello.ko /lib/modules l 에 있는가? module 구조체를 저장하는 데 필요한 메모리 영역 크기 구함 create_module() 호출 find_module() 호출로 기존에 적재된 모듈이 있는가 검사 vmalloc() 호출로 메모리 할당 query_module() 호출로 심볼테이블 구성 사용자모드 공간의 메모리 영역 할당 init_module() 호출 나 이 텍 Embedded Linux System 환경구축 및 분석 335 <Fig. 커널 모듈의 적재 과정>
336 모듈의 적재 과정 (2) insmod 의 절차 1) 주어진 모듈명이 ".o"혹은 ".ko" 에서 모듈명을 얻는다. /lib/modules/ 의 하부 디렉토리에서 해당 파일명을 찾는다. 2) 읽어온 파일의 코드와 모듈명 그리고 module 구조체를 저장하는 데 필요한 메모리 영역의 크기를 구한다. 3) 구조체의 정보를 이용해 create_module() 함수를 호출한다. 이 함수는 모 듈의 권한을 검사하고, find_module() 함수를 이용해 이미 적재된 모듈인가를 검사한다. 만약, 적재되지 않았다면, vmalloc()함수를 호출해 새로운 모듈을 위한 메모리 영역을 할당한다. 4) query_module() 함수를 통해 커널 심볼 테이블과 커널에 적재된 다른 모듈의 심볼 테이블을 구한다. (QM_MODULES, MODULES QM_INFO, QM_SYMBOL) 나 이 텍 Embedded Linux System 환경구축 및 분석 336
337 모듈의 적재 과정 (3) 5) 커널에 적재하려는 현재 모듈의 메모리 시작번지를 이용해 읽어온 모듈의 프로그램 코드 주소를 재배치 한다. 6) 사용자 모드 주소 공간에 메모리 영역을 할당하고, 이곳에 모듈 구조체 의 내용과 모듈명 그리고 재배치된 모듈 코드를 복사한다. 7) 모듈 구조체의 init필드의 함수 주소와 exit 필드의 함수 주소를 할당한 다. 8) 사용자 모드 주소 공간에 할당된 메모리 주소를 이용해 init_module()함수를 호출한다. modprobe 종속성 해결과 지능적인 오류 검사 및 보고, 기타 고급 옵션을 포함하는 유틸리티 명령 적재 시: modprobe module [module parameters] 제거 시: modprobe -r modules 나 이 텍 Embedded Linux System 환경구축 및 분석 337
338 커널 메시지 출력 (1) printk() printf()와 유사하지만 커널의 메시지를 출력하고 관리할 수 있는 특성이 있다. 로그 레벨 지정 메시지 기록 관리를 위한 로그 레벨의 지정 원형 큐 구조의 관리 출력 디바이스의 다중 지정 콘솔에서 확인하거나 dmesg 명령을 이용해서 로그 파일을 확인 로그 레벨은 printk() 함수에 전달되는 문자열의 선두 문자에 <1> 과 같이 숫자로 등급을 표현한다. linux/kernel.h 에 정의된 선언문을 이용이 바람직하다. kernel/printk.c 에 default level로는 다음과 같이 지정되어 있다. #define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */ 상수 선언문 #define KERN_EMERG EMERG #define KERN_ALERT #define KERN_CRIT #define KERN_ERR ERR #define KERN_WARNING #define KERN_NOTICE #define KERN_INFO #define KERN_DEBUG 의미 <0> 시스템이 동작하지 않는다 <1> 항상 출력된다. <2> 치명적인 정보 <3> 오류 정보 <4> 경고 정보 <5> 정상적인 정보 <6> 시스템 정보 <7> 디버깅 정보 나 이 텍 Embedded Linux System 환경구축 및 분석 338
339 커널 메시지 출력 (2) 레벨에 대한 표시를 하지 않으면 KERN_WARNING와 같은 레벨이다. 다음의 처리 결과는 모두 같다. printk(kern_warning system ok\n ); printk( <4> system ok\n ); printk( <4> system ok\n ); printk( system ok\n ); 원형 큐 구조 관리 커널 메시지는 커널 내부에 있는 원형 큐 형식의 로그 버퍼에 저장된다. 이 로그 버퍼의 크기는 CONFIG_LOG_BUF_SHIFT 값으로 지정된다. (2의승수표현:default ,072byte(128Kbyte)) 정의된 헤더) include/config/log/buf/shift.h 로그 버퍼는 일반적으로 콘솔에 출력된다. 커널 메시지 관리 데몬 klogd: 커널에서 발생하는 메시지를 기록하고 관리한다. syslogd: 커널에서 발생하는 메시지와 응용 프로그램에서 요청한 시스템 정보를 기록하고 관리한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 339
340 커널 메시지 출력 (3) /proc/kmsg 커널 메시지가 발생할 때마다 관찰할 수 있다. cat /proc/kmsg dmesg 커널 메시지 출력 printk() 사용 시 주의점 printk를 과도하게 사용하지 않는다. 실행시간이 길다 개행 문자가 있어야 출력을 시작한다. '\n'을 포함 하도록 한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 340
341 드라이버 정보 매크로 사용 (1) init_module() 와 cleanup_module() 함수 변경 매크로 module_init() module_exit() linux/init.h 에정의되어있음 /* hello.c */ #include <linux/module.h> /* Needed by all modules */ #include <linux/kernel.h> /* Needed for KERN_INFO */ #include <linux/init.h> /* Needed for the macros */ static int init ghello_init(void) { printk(" hello INIT n"); return 0; } static void exit ghello_exit(void) { printk(" hello exit n"); } module_init(ghello_init); _ module_exit(ghello_exit); 나 이 텍 Embedded Linux System 환경구축 및 분석 341
342 드라이버 정보 매크로 사용 (2) init macro init 함수가 종료되었을 때 init함수를 버리고, 메모리를 free로 만듦 initdata 초기 변수에 대해 init와 유사한 작업을 함 exit 모듈이 커널 내로 삽입될 때 함수를 생략 MODULE_ LICENSE() GPL, GPL v2, Dual BSD/GPL, Proprietary 등 MODULE_DESCRIPTION() 모듈의 하는 일을 설명 MODULE_AUTHOR() 모듈 제작자 MODULE_SUPPORTED_DEVICE() 모듈이 지원하는 장치의 타입 나 이 텍 Embedded Linux System 환경구축 및 분석 342
343 드라이버 정보 매크로 사용 (3) #include <linux/module.h> #include <asm/uaccess.h> #include <asm/system.h> #include <linux/bitops.h> #include <linux/capability.h> #include <linux/module.h> #include <linux/types.h> #include <linux/kernel.h> #include <linux/sched.h> #include <linux/mm.h> #include <linux/errno.h> #include <linux/init.h> static int init ghello_init(void) { printk(" hello INIT \n"); return 0; } static void exit ghello_exit(void) { printk(" hello exit \n"); } module_init(ghello_init); module_exit(ghello_exit); MODULE_AUTHOR("mds technology"); // 부가적인 정보 예제 MODULE_LICENSE( LICENSE("GPL/BSD Dual"); MODULE_DESCRIPTION("ghello test"); MODULE_SUPPORTED_DEVICE("ghellodevice"); 나이텍 Embedded Linux System 환경구축 및 분석 343
344 모듈 매개변수 지정 개요 디바이스 드라이버는 고정된 내부 변수 값을 사용하는 경우가 많다. 필요한 경우 디바이스 드라이버가 실행되기 전에 시스템 상황에 따 라 변경할 필요가 있다. 예) PnP를 지원하지 않는 NIC의 I/O Address, IRQ 값 설정 디바이스 드라이버는 외부에서 변경할 수 있는 모듈 매개 변수를 지정할 수 있다. # insmod./test.ko onevalue=0x27 twostring="hello!" 모듈 매개 변수는 특정 매크로에 의해 모듈 적재 시 십진수, 8, 16진수 중 하나이다. 전달해야 할 값이 배열 형태라면 지정된 순서와 쉼표(,)로 구분된다. 각 요소는 값을 생략함으로써 넘어갈 수 있다. 나 이 텍 Embedded Linux System 환경구축 및 분석 344
345 모듈 매개변수 매크로 사용 2.4 MODULE_PARM(변수 명, 변수타입) [변수 타입] b: byte h: short i: int l: long s: string [코드 예] static int onevalue = 1; MODULE_PARM(onevalue, "i"); 사용될 변수는 사전에 선언해야 한다. 디바이스 드라이버 변수나 상수를 선언하는 경우 static ti 키워드를 사용하는 경우가 많은데, 방대한 소스코드 내에서 다른 소스내의 변수가 중복될 가능 성을 피하기 위해서이다. 나 이 텍 Embedded Linux System 환경구축 및 분석 345
346 모듈 매개변수 매크로 사용 2.6 #include <linux/moduleparam.h> module_param(변수 명, 변수타입, 접근속성) [변수 타입] short: short ushort: unsigned short int: int uint: unsigned int long: long ulong: unsigned long charp: char * bool: int invbool: int intarray: int * [접근 속성] 보통 0으로 지정하며, 사용자 권한에 따라 처리 허가 여부를 검사하려 할 때 퍼미션과 같은 개념으로 0644와 같은 8진수 값을 주면 된다. 기본적으로 2.4 형식을 지원하며 좀더 확장된 매크로를 사용할 수도 있다. 모듈 매개 변수 사용시 linux/moduleparam.h 파일을 포함 시켜야 한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 346
347 모듈 매개변수 매크로 정리 모듈 매개변수 매크로 정리 커널은 사용자가 매개변수를 부트시나 모듈 로드 시에 선언하고 드라이버 안에서는 이 매개변수들이 전역변수처럼 보이도록 하는 프레임웍을 제공한다. module_param() module_param_named() module_param_string() module_param_array() module_param_array_named() _ 나 이 텍 Embedded Linux System 환경구축 및 분석 347
348 모듈 매개변수 매크로 정리 module_param(name, type, perm) Command Line 인자를 얻음 Ex)./insmod mymodule.ko myvariable=5 module_param(name, type, perm) int myint = 3; module_param(myint, int, 0); module_param_array(name, type, nump, perm) 인자: 변수 명, 자료형, nump는 정수형 포인터, sysfs의 접근권한 24버전과 2.4 다르게 세 번째 인자로 배열 개수를 포인터로 넘겨줌 세 번째 인자로 배열 개수 대신 NULL을 넘겨 주어도 됨 int myintarray[2]; module_param_array(myintarray, int, NULL, 0); /* not interested in count */ int myshortarray[4]; int count; module_param_array(myshortarray, int, & count, 0); 나 이 텍 Embedded Linux System 환경구축 및 분석 348
349 모듈 매개변수 매크로 정리 module_param_string( name, string, len, perm ); charp 로 정의된 문자열을 지정할 때, len으로 길이와 함께 지정 할 수 있다. 길이는 sizeof(string) i 형태로 사용할 수 있다. module_param_named( name, value, type, perm ); 변수의 값(value)를 내부에 포함 시키고자 할 때 사용할 수 있다. MODULE_PARM_DESC() 모듈이 가질 수 있는 문서 인자들로 사용 두 개의 인자를 가짐 변수 이름, 변수를 묘사하는 문자열 나 이 텍 Embedded Linux System 환경구축 및 분석 349
350 모듈 매개변수 매크로 실습 실습 예제 02.hello_param 나 이 텍 Embedded Linux System 환경구축 및 분석 350
351 모듈 매개변수 매크로 모듈 파라메터 넘기기 예제 1 #include <linux/module.h> 2 #include <linux/moduleparam.h> 3 #include <linux/kernel.h> 4 #include <linux/init.h> 5 #include <linux/stat.h> 6 7 MODULE_LICENSE("GPL"); 8 MODULE_AUTHOR("Peter Jay Salzman"); 9 static short int myshort = 1; 10 static int myint = 420; 11 static long int mylong = 9999; 12 static char *mystring = "blah"; 13 static int myintarray[2] = { 1, 1 }; 14 static int arr_argc = 0; module_param(myshort, short, S_IRUSR S_IWUSR S_IRGRP S_IWGRP); MODULE_PARM_DESC(myshort, "A short integer"); module_param(myint, int, S_IRUSR S_IWUSR S_IRGRP S_IROTH); MODULE_PARM_DESC(myint, "An integer"); module_param(mylong, long, S_IRUSR); MODULE_PARM_DESC(mylong, "A long integer"); module_param(mystring, charp, 0000); MODULE_PARM_DESC(mystring, "A character string"); module_param_array(myintarray, int, &arr_argc, 0000); 나 이 텍 Embedded Linux System 환경구축 및 분석 351
352 모듈 매개변수 매크로 } MODULE_PARM_DESC(myintArray, "An array of integers"); static int init hello_5_init(void) { int i; printk(kern_info "Hello, world 5 n============= n"); printk(kern_info "myshort is a short integer: %hd n", myshort); printk(kern_info "myint is an integer: %d n", myint); printk(kern_info "mylong is a long integer: %ld n", mylong); printk(kern_info "mystring is a string: %s n", mystring); for (i = 0; i < (sizeof myintarray / sizeof (int)); i++) { printk(kern_info "myintarray[%d] = %d n", i, myintarray[i]); } printk(kern_info "got %d arguments for myintarray. n", arr_argc); return 0; } static void exit hello_5_exit(void) { printk(kern_info "Goodbye, world 5 n"); } module_init(hello_5_init); module_exit(hello_5_exit); 나 이 텍 Embedded Linux System 환경구축 및 분석 352
353 모듈 매개변수 매크로 실행 결과 - 실행 예 1 # insmod hello 5.ko mystring="bebop" myshort=255 myintarray= 1 myshort is a short integer: 255 myint is an integer: 420 mylong is a long integer: 9999 mystring is a string: bebop myintarray[0] = 1 myintarray[1] = 1 got 1 arguments for myintarray. -실행 예 2 # insmod ghello_param.ko mystring="ghcstop" myintarray=0,1 Hello, world 5 ============= myshort is a short integer: 1 myint is an integer: 420 mylong is a long integer: 9999 mystring is a string: ghcstop myintarray[0] = 0 myintarray[1] = 1 got t2 arguments for myintarray. 나 이 텍 Embedded Linux System 환경구축 및 분석 353
354 모듈 매개변수 넘기기의 다른 방법 /etc/modprobe.conf 파일을 이용한 매개변수 전달. (2.6) options ghello_param howmany=2 whom=universe /etc/modules 파일을 이용한 실행시간 매개변수 전달. 모듈을 kernel 에 정적으로 build 할 때, 명령라인을 지정하여 전달(kernel commandl line boot argument). options hello_param.howmany=2 \ hello_param.whom=universe 나 이 텍 Embedded Linux System 환경구축 및 분석 354
355 여러 개의 파일로 구성된 모듈 컴파일 실습 실습예제 03.hello_multi 나 이 텍 Embedded Linux System 환경구축 및 분석 355
356 전형적인 커널 Module 실습 실습예제 04.gmod 여기서는 run만 시켜보는 단계, 실제는 misc device에서 설명 나 이 텍 Embedded Linux System 환경구축 및 분석 356
357 세부 목차 Linux Device Driver의 동작원리 나 이 텍 Embedded Linux System 환경구축 및 분석 357
358 디바이스와 모듈 클래스 문자 디바이스 문자(char) 디바이스는 바이트 스트림 형태로 참조할 수 있다. 문자 드라이버는 최소한 open, close, read, write를 구현한다. 문자 디바이스는 대부분 파일 노드를 통해 접근한다. /dev/console 문자열 콘솔 /dev/ttys0 직렬 포트 파일접근과의 차이점이라면 파일은 항상 앞뒤로 이동이 가능한 반면 문자 디바이스는 데이터 채널에 불과하므로 순차적으로만 참조할 수 있다. 예) Keyboard, Mouse, Serial, MODEM, Video, 블록 디바이스 블록 디바이스도 /dev 디렉터리에서 파일시스템 노드로 참조한다. 대부분 파일 시스템을 수용하는 디바이스를 다룬다. 하나의 I/O를 완전한 블록(대개 512바이트) 단위로 작업을 수행한다. 예) 하드디스크, CD-ROM, 플로피디스크, 나 이 텍 Embedded Linux System 환경구축 및 분석 358
359 디바이스와 모듈 클래스 네트워크 디바이스 모든 네트워크 트랜잭션은 인터페이스, 즉 다른 호스트와 데이터를 교환해 주는 디바이스를 거친다. 그것이 하드웨어일 수도 있지만 loopback(lo) 디바이스처럼 순수 소프트웨어로 구현 되어 있을 수도 있다. 커널과 네트워크 드라이버 사이에서 일어나는 통신은 다른 드라이버와는 틀리다 나 이 텍 Embedded Linux System 환경구축 및 분석 359
360 디바이스 파일 목록의 예 /dev/의 디바이스 파일 예 dev]# ls -l console crw-rw root root 5, 1 2월 console # ls -l /dev/sd* brw-r root disk 8, 0 2월 /dev/sda brw-r----- r 1 root disk 8, 1 2월 /dev/sda1 brw-r root disk 8, 2 2월 /dev/sda2 Major Number Minor Number * 2.4에서는 2byte로 장치번호크기를 가졌지만 2.6에서는 4byte(32bit)의 크기를 갖는다. (Major 12, Minor 20) 나 이 텍 Embedded Linux System 환경구축 및 분석 360
361 디바이스 드라이버 Major Number Major Number의 결정 Kernel에서 기 지정. 개발자는 임의의 사용되지 않는 번호를 사용. /proc/devices 에 등록된 Major Number를 확인. Major Number Character devices Block Devices 0 1 mem Memory Device ramdisk 2 fd Floppy Disk 3 4 /tty Terminals /dev/console Terminals & AUX lp Parallel Interface Vcs Virtual Consoles misc Sd SCSI Disk < 표. Major Define code - linux/include/linux/major.h > 나 이 텍 Embedded Linux System 환경구축 및 분석 361
362 디바이스 파일 생성 Device File에 관련된 명령 # mknod Device File을 만든다. ( 물론 mknod도 시스템 콜을 이용하여 스스로 생성하는 프로그램을 제작할 수도 있다. ) 예 : # mknod /dev/minibuf/ ib c /dev/minibuf라는 이름으로 Character Device, Major Number 253, Minor 0 # mknod /dev/name type major minor Minor number Major number b(block) or c(character) Device Name 나 이 텍 Embedded Linux System 환경구축 및 분석 362
363 실례: mknod /dev/sk c 나 이 텍 Embedded Linux System 환경구축 및 분석 363
364 커널 모듈 대 응용 프로그램 응용 프로그램 대부분 처음부터 끝까지 한 작업만 수행. 절차 위주의 프로그램이 많다. exit으로 종료 시 문제가 될 경우 큰 영향을 미치지 않는다.(kill) 응용프로그램 외부 요인에 신경 쓸 필요가 없다. 커널 모듈 스스로를 등록한 후 초기화 함수를 종결하여 요청에만 응답. exit는 더 이상 요청을 받아들이지 않겠다는 의미. event-driven di 과 유사한 방식으로 동작한다. 종료 시 주의하지 않는다면 시스템을 재 부팅 하기 전까지 찌꺼기가 남을 수 있다. 끊임없이 자료구조와 자원테이블을 유지하며 갱신한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 364
365 경쟁의 제거 디바이스 사용 시 open한 프로세스가 가장 먼저 해야 할 것은 동일한 장치에 대해 또 다른 프로세스의 접근을 막아야 한다. open 함수에서 조건을 검사 후 busy로 셋팅 한다.(EBUSY) 플래그가 busy일 때 즉시 EBUSY로 리턴하지 않고 앞의 프로세스가 release 중이라면, EAGAIN 값을 리턴 해 다시 시도할 수도 있다. 시스템 시간을 할당 받은 프로세스가 어떤 루틴을 수행하는 중에 간섭을 받아서는 안 된다. 중요한 전역변수를 바꿀 때 제어가 넘어간 상태에서 이전 프로세스가 변경한 자원을 또 다시 쓰지 못하 게 할 때 독점적 액세스를 고려해야 한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 365
366 경쟁의 제거 커널 프로세스의 모든 경쟁을 막고 독점할 때의 예 cli()가 수행되는 순간 restore_flags함수의 수행이 끝날 때까지는 커널의 블록명령이나 인터럽트가 무시된다. * 2.6에서는 local_irq_disable()로 명칭이 변경되어 있다. 호환성을 유지하기 위해 맵핑 되어 있다. (include/linux/interrupt.h)... u_long flags; save_flags(flags); cli(); change_variable(); do_critical_job(); recover_variable(); variable(); restore_flags(flags);... // 2.6 local_save_flags(flags) // 2.6 local_irq_disable(); 자주 사용되는 경우 커널의 성능이 저하될 우려 가 있다. 이때는, 세마포어를 사용할 수 있다. // 2.6 local_irq_restore(flags) 나 이 텍 Embedded Linux System 환경구축 및 분석 366
367 디바이스 드라이버 작성 특성 리눅스 디바이스 드라이버의 공통적 특성 커널 코드 디바이스 드라이버는 커널의 한 부분이므로, 커널의 다른 코드와 마찬가지로 잘못되면 시스템에 치명적인 피해를 줄 수 있다 커널 인터페이스 디바이스 드라이버는 리눅스 커널이나 자신이 속한 서브시스템에 표준 인터 페이스를 제공해야 한다. 커널 메커니즘과 서비스 디바이스 드라이버는 메모리 할당, 인터럽트 전달, wait queue같은 표준 커널 서비스를 사용할 수 있다. Loadable 대부분의 리눅스 디바이스 드라이버는 커널 모듈로서, 필요할 때 로드하고 더 이상 필요하지 않을 때 언로드 할 수 있다. 설정가능(Configurable) 리눅스 디바이스 드라이버를 커널에 포함하여 컴파일 할 수 있다. 어떤 장치 를 넣을 것인지는 커널을 compile 할 때 설정할 수 있다 나 이 텍 Embedded Linux System 환경구축 및 분석 367
368 write() system call 호출 시 버퍼 복사 원리 <Fig. 드라이버 처리 과정 - write > 나 이 텍 Embedded Linux System 환경구축 및 분석 368
369 사용자 공간에서의 디바이스 드라이버 장점 C Library 사용 가능 디버깅의 용이성 드라이버의 오류가 커널의 오류로 이어지지 않음 메모리를 항상 차지할 필요가 없다. 필요할 때만 로드 가능. 디바이스에 대한 동시 접근도 지원할 수 있다. 작성 방법 예 커널로부터 "하드웨어 제어에 책임이 있는 단일 관리자" 역할을 부여 받은"서버" 프로세스 형태. libusb.sourceforge.net 에서 사용자 영역의 USB 드라이버. X 서버와 같은 환경을 프레임 버퍼 환경으로 전이하려는 경우. 나 이 텍 Embedded Linux System 환경구축 및 분석 369
370 사용자 공간에서의 디바이스 드라이버 단점 인터럽트 사용 불가. 메모리 직접 접근 제한. /dev/mem에 매핑된 영역만, 또 특권 사용자만 가능. I/O 포트 직접 접근 제한. ioparm이나 iopl을 호출한 다음에만, 또 특권 사용자만 가능. 성능 저하 드라이버 코드 자체가 swapout될 수 있음. 중요 드라이버에는 사용하지 않는 것이 바람직함. 나 이 텍 Embedded Linux System 환경구축 및 분석 370
371 Embedded Linux 분석 및 환경구축 Linux Multimedia
372 목차 Framebuffer FFMPEG Mplayer Linux Multimedia Reference Audio format/codec SDL Library Video의 신호처리 동영상 압축 format GStreamer Multimedia container MFC을 이용한 media player 제작 나 이 텍 Embedded Linux System 환경구축 및 분석 372
373 Embedded Linux 분석 및 환경구축 Framebuffer
374 리눅스 환경 리눅스 프레임 버퍼 장치 fbdev 리눅스 프레임버퍼 장치 드라이버 그래픽 하드웨어 독립적인 추상 계층 (abstraction layer) 임베디드 시스템에서 널리 사용됨 이유 X-windows용 가속 드라이버를 제작하기 힘든 환경때문 직접 제어하기가 편하다 여러 개의 framebuffer를 생성 가능하다(임베디드 system의 hw가속 plane이 많은경우) X-Window System Framebuffer Device 나 이 텍 Embedded Linux System 환경구축 및 분석 374
375 리눅스 환경 리눅스 프레임 버퍼 include/linux/fb.h /dev/fb0/fb0 를 통해 access ioctl calls FBIOGET_FSCREENINFO 고정 스크린 정보(fb_fix_screeninfo)를 가져옴 FBIOGET_VSCREENINFO 가변 스크린 정보(fb_var_screeninfo)를 가져옴 fb.h의 나머지 ioctl call 들은 framebuffer에 그림을 그리는 것과는 직접적인 연관이 없음 나 이 텍 Embedded Linux System 환경구축 및 분석 375
376 스크린 정보 (fb_fix_screeninfo) fb_fix_screeninfo 변경되지 않는 하드웨어 정보 struct fb_fix_screeninfo { char id[16]; /* identification string eg "TT Builtin" */ unsigned long smem_start; /* Start of frame buffer mem */ /* (physical address) */ u32 smem_len; /* Length of frame buffer mem */ u32 type; /* see FB_TYPE_* */ u32 type_aux; /* Interleave for interleaved Planes */ u32 visual; /* see FB_VISUAL_* */ u16 xpanstep; /* zero if no hardware panning */ u16 ypanstep; /* zero if no hardware panning */ u16 ywrapstep; p /* zero if no hardware ywrap */ u32 line_length; /* length of a line in bytes */ unsigned long mmio_start; /* Start of Memory Mapped I/O */ /* (physical address) */ u32 mmio_len; /* Length of Memory Mapped I/O */ u32 accel; /* Indicate to driver which */ /* specific chip/card we have */ u16 reserved[3]; /* Reserved for future compatibility */ }; 나 이 텍 Embedded Linux System 환경구축 및 분석 376
377 스크린 정보 (fb_fix_screeninfo) id 장치 드라이버의 식별용도 (문자열) smem_start 프레임 버퍼의 시작 주소 physical address이므로 응용프로그램에서 에서 직접 접근할 수 없 음 smem_len type 프레임 버퍼의 크기 비디오 메모리에 픽셀 데이터가 맵핑되어 있는 방식 FB_TYPE_PACKED_PIXELS 이 가장 보편적 line_lengthlength 한 라인(폭)의 길이를 바이트 단위로 나타냄 bits per pixel width 8 나 이 텍 Embedded Linux System 환경구축 및 분석 377
378 스크린 정보 (fb_var_screeninfo) fb_var_screeninfo struct fb_bitfield { 변경 가능한 정보 u32 offset; /* beginning i of bitfield */ u32 length; /* length of bitfield */ u32 msb_right; /*!= 0 : Most significant bit is */ /* right */ }; struct fb_var_screeninfo { u32 xres; /* visible resolution */ u32 yres; u32 xres_virtual; /* virtual resolution */ u32 yres_virtual; u32 xoffset; /* offset from virtual to visible */ u32 yoffset; /* resolution */ u32 bits_per_pixel; /* guess what */ u32 grayscale; /*!= 0 Graylevels instead of colors */ struct fb_bitfield red; /* bitfield in fb mem if true color, */ struct fb_bitfield green;/* else only length is significant */ struct fb_bitfield blue; struct fb_bitfield transp;/* transparency */ u32 nonstd; format */ /*!= 0 Non standard pixel u32 activate; /* see FB_ACTIVATE_* */ u32 height; /* height of picture in mm */ u32 width; /* width of picture in mm */ 나 이 텍 Embedded Linux System 환경구축 및 분석 378
379 스크린 정보 (fb_var_screeninfo) xres, yres X,Y 방향의 해상도 (resolution) 프레임 버퍼의 폭과 너비를 pixel단위로 나타낸 것 bits_per_pixel pixel 한 픽셀을 나타내는데 사용하는 비트의 수 1, 4, 8, 16, 24, 32 bpp fb_bitfield MSB의 위치 해당 색상값의 길이와 오프셋 (Packed format) 나 이 텍 Embedded Linux System 환경구축 및 분석 379
380 스크린 정보 가져오기 int main(void) { int ret, fd_fb; struct fb_fix_screeninfo fix_scrinfo; struct fb_var_screeninfo var_scrinfo; } /* open video device */ fd_fb = open("/dev/fb0", O_RDWR); if(fd_fb < 0) { perror("framebuffer open"); exit(1); } /* get screen info */ ret = ioctl(fd_fb, FBIOGET_VSCREENINFO, &var_scrinfo); if(ret < 0) { perror("framebuffer ioctl"); exit(1); } ret = ioctl(fd_fb, FBIOGET_FSCREENINFO, &fix_scrinfo); if(ret < 0) { perror("framebuffer ioctl"); exit(1); } close(fd_fb); 나 이 텍 Embedded Linux System 환경구축 및 분석 380
381 Embedded Linux 분석 및 환경구축 FFMPEG
382 FFMPEG-개요 FFMPEG 특징 is a complete, cross-platform solution to record, convert and stream audio and video. audio/video에 대한 recording, converting, player등을 제공하는 통합 codec software library와 Application으로 이루어진 통합 package임 원래의 개발은 libavcodec을 중심으로한 audio/video codec library로 개 발되었음 Linux에서 개발되었으나, 현재는 Cross Platform을 지원한다(많은 OS에 포 팅이 되었음) 현존하는 Codec중에 하나의 package에서 가장 많은 codec을 지원하며 MS windows용(wince 포함) Application과 DirectShow filter등이 ffmpeg의 library등을 이용(License위반하는 경우 많음) 나 이 텍 Embedded Linux System 환경구축 및 분석 382
383 FFMPEG-개요 FFMPEG 특징(계속) 0.5 version까지 공식 version이 release되었으나, 대부분 개발버전 (subversion, git를 이용한)을 사용하도록 해 놓았음 에 0.5 version 공식 release(0.4.9와는 몇 년의 차이가 있음) 독자적으로 개발되었으나, mplayer에서 주로 사용하기 시작하면서, mplayer개발팀과 공동개발을 시작함(현재는 같이 개발) mplayer에서도 ffmpeg의 code를 점점 많이 사용하는 추세임 Lincense LGPL(v1) GPL(v2) 원래는 LGPL만 사용을 하다, mplayer와 합쳐지면서 GPL code 들이 많이 들어 가게 됨 libswscale, liba52(dolby AC-3)을 지원할 경우는 GPL로 compile해야함(-- enable-gpl option) Program 사용법에 대한 것과 library 사용법에 대한 자료가 극히 적음 library등의 사용법은 0.5 version에서 바뀐 부분이 있고, 자료가 굉장히 적고 example등이 예전 version의 코드로 되어 있음 나 이 텍 Embedded Linux System 환경구축 및 분석 383
384 FFMPEG-개요 Package 구성(Application) It includes ffmpeg a command line tool to convert multimedia files between formats. ffserver ffplay a multimedia streaming server for live broadcasts. a simple media player based on SDL and the FFmpeg libraries. 나 이 텍 Embedded Linux System 환경구축 및 분석 384
385 FFMPEG-개요 Package 구성(library) It includes libavcodec a library containing decoders and encoders for audio/video codecs libavformat a library containing demuxers and muxers for multimedia container formats. libavutil a small lightweight library of generally useful functions a library containing i functions for simplifying i programming, including random number generators, data structures, mathematics routines and much more. libavdevice a library containing input and output devices for grabbing from and rendering to many common multimedia input/output software frameworks, including Video4Linux, Video4Linux2, VfW, and ALSA libavfilter a high quality audio and video filter API libswscale a library performing highly optimized image scaling and color space/pixel format conversion operations 나 이 텍 Embedded Linux System 환경구축 및 분석 385
386 FFMPEG Codec/Format FFMPEG에서 지원되는 Codec/Format 현존하는 거의 모든 Codec과 Format 지원 Microsoft사의 WMV/WMA format의 경우는 지원하지 않음 WMV/WMA 7/8 version은 지원 WMV/WMA 9 서부터는 지원하지 않음(MS로부터의 소송문제) 최근 0.5 버전에서는 지원됨 Decoding용 codec은 대부분 내장하고 있으나, Encoding용 codec은 외부의 codec(대부분 원천기술 source)를 사용하는 경우가 많다 뒤부분참조 지원하는 codec과 format에 대한 정보는 h l 와 homepage의 Documentation 부분 참조 나 이 텍 Embedded Linux System 환경구축 및 분석 386
387 FFMPEG 설치(x86) FFMPEG의 설치 Intel x86 계열의 경우는 주로 Encoding을 위해서 많이 사용이 된다 이에 따라 FFMPEG에 내장되어 있지 않은 encoding용 codec들을 별도로 설 치해 줘야 한다. 설치해야 하는 encoder or format list lame(or libmp3lame) xvidcore libogg libvorbisbi faac AAC encoding faad 2.7 AAC decoding x264 etc 나 이 텍 Embedded Linux System 환경구축 및 분석 387
388 Embedded Linux 분석 및 환경구축 MPlayer
389 Mplayer 개요 MPlayer is a free and open source media player.(license is GPL) MPlayer is a movie player for Linux (runs on many other Unices, and non-x86 CPUs, and so on...) Development of MPlayer began in 2000 by original author, Arpad Gereoffy (known as A'rpi / Astral in the demoscene). 나 이 텍 Embedded Linux System 환경구축 및 분석 389
390 Mplayer개요(계속) Supported media formats Physical media: CDs, DVDs, Video CDs Container formats: 3GP, AVI, ASF, FLV, Matroska, MOV (QuickTime), MP4, NUT, Ogg, OGM, RealMedia Video formats: Cinepak, DV, H.263, H.264/MPEG-4 AVC, HuffYUV, Indeo, MJPEG, MPEG-1, MPEG-2, MPEG-4 Part 2, RealVideo, Sorenson, Theora, WMV Audio formats: AAC, AC3, ALAC, AMR, FLAC, Intel Music Coder, Monkey's Audio, MP3, Musepack, RealAudio, Shorten, Speex, Vorbis, WMA Subtitle bil formats: AQTitle, il ASS/SSA, CC, JACOsub, MicroDVD, MPsub, OGM, PJS, RT, Sami, SRT, SubViewer, VOBsub, VPlayer Image formats: BMP, JPEG, PCX, PTX, TGA, TIFF, SGI, Sun Raster Protocols: RTP, RTSP, HTTP, FTP, MMS, Netstream (mpst://), SMB 나 이 텍 Embedded Linux System 환경구축 및 분석 390
391 Mplayer개요(계속) MEncoder (MPlayer's Movie Encoder) simple movie encoder, designed to encode MPlayer-playable movies It can encode with various codecs, like MPEG-4 (DivX4) (one or two passes), libavcodec, PCM/MP3/VBR MP3 audio. 국내에서는 BADAK이란 프로그램이 mencoder를 이용(PDA용 동영상 encoder) 나 이 텍 Embedded Linux System 환경구축 및 분석 391
392 Mplayer개요(계속) 설치시 필요한 software들 POSIX system - You need a POSIX-compatible shell and POSIX-compatible system tools like grep, sed, awk, etc. in your path. GNU make 3.81 or later binutils - GNU binutils 2.11 or later is known to work. compiler - We mostly use gcc, the recommended versions on x86 are 2.95 and Xorg/XFree86 - recommended d version is 4.3 or later. FreeType or later is required for the OSD and subtitles ALSA - optional, for ALSA audio output support. At least 0.9.0rc4 is required. libjpeg - required for the optional JPEG video output driver libpng - required for the optional PNG video output driver directfb - optional, or later required for the directfb video output driver lame or later is recommended, necessary for encoding MP3 audio with MEncoder. zlib - recommended, many codecs use it. LIVE555 Streaming Media - optional, needed for some RTSP/RTP streams cdparanoia - optional, for CDDA support libxmms - optional, for XMMS input plugin support. At least is required. libsmb - optional, for SMB networking support libmad - optional, for fast integer-only MP3 decoding on FPU-less platforms 나 이 텍 Embedded Linux System 환경구축 및 분석 392
393 Mplayer의 구성요소 Stream Player의입력source를얘기함 File, HTTP, FTP등 여러가지중 선택 가능 Demuxer 입력되는 동영상의 Container를 말함. AVI, MPEG, MKV, MP4(MOV)등을 말함 동영상 play에서의 가장 기본적인 요소로, 이 루틴에서 A/V sync에 대 한 기본적인 PTS(Presentation Time Stamp)를 계산 추출하게 됨 Subtitle 자막을 얘기하며, 동영상 play에서는 별도의 요소로 생각함. 즉, 없어도 큰 상관이 없는 모듈로 처리가 됨. Mplayer는 유럽형의 자막처리를 기반으로 작성이 되어, 여러 포맷을 처 리가능함. 자막은 Video영상의 Frame time에 기반을 두며, output의 경우는 video out device에 영향을 받음 Font와도 관련이 깊음(ex> Freetype - TTF library) 나 이 텍 Embedded Linux System 환경구축 및 분석 393
394 Mplayer의 구성요소 Audio Codec 압축/비압축된 Audio를 PCM형태의 데이터로 변환하는 모듈 대부분 압축된 코덱을 사용함. MP3, AAC등 Mplayer의 A/V sync에서의 중요한 부분을 담당함(Audio가 기준이 됨) ARM과 같은 CPU의 경우는 Floating Point Unit이 없는 경우가 많아 Fixed Point Decoding Library가 따로 필요한 경우가 많음 Audio Filter 압축 해제된 audio data에 어떠한 조작을 할 경우 사용됨 일반적으로 사용이 되지는 않지만, 효과를 주거나, sampling rate의 변 환, mono audio의 경우 등등에 사용됨 Audio out과 밀접하게 관련되어 있음. audio out에서 지원 안될 경우는 filter에서 처리 ex> mono -> stereo 변환 Filter동작 시는 A/V sync routine에도 변화가 생김 나 이 텍 Embedded Linux System 환경구축 및 분석 394
395 Mplayer의 구성요소 Audio out 최종 사운드가 출력되는 장치를 얘기함 일반적으로는 Sound Device Driver를 얘기하지만, mencoder동작시는 mencoder의 입력이 됨. Mplayer의 경우는 A/V sync를 audio파트에 기초를 두기 때문에, 제일 중요한 요소가 됨 사운드 디바이스 드라이버의 작성과도 밀접한 관계를 갖게 됨(A/V sync 관련) Video codec 압축된 video data를 frame단위로 decoding해주는 루틴 압축 코덱 별로 차이가 많이 나는 경향이 있지만 대부분은 MPEG기반의 codec들 FFMPEG의 libavcodec에 의존을 많이 함(성능이 좋고 많은 코덱 지원) Hardware Codec의 경우는 지원하지 않으므로 특정 SoC에 포팅할 경우 는 이 부분에 대한 수정이 필요함 나 이 텍 Embedded Linux System 환경구축 및 분석 395
396 Mplayer의 구성요소 Video filter 압축해제된 video frame에 어떤 조작을 하기 위한 요소 Resize등의 여러가지 동작을 함 Video out도 video filter의 일종으로 처리하나 실제로는 별도의 output 처리가 이루어진다 Video out 압축해제된 video frame이 출력되는 것을 말함 주로 video device를 얘기함 자막처리를 할 경우 video out과 관련이 많음 A/V sync요소에서의 delay가 이 부분에서 많이 발생함 동영상의 경우 YUV -> RGB 변환에 많은 시간이 소요됨(대략 2~30%정 도) 나 이 텍 Embedded Linux System 환경구축 및 분석 396
397 Mplayer의 구성요소 Timer Audio/Video의 시간흐름 측정 루틴 정밀한 시계가 요구되나, high h level l OS의 경우는 이 부분이 정밀하지 못함 Mplayer에서는 다른 player에서와 다르게 Timer루틴을 A/V sync의 기 본 요소로 다루지는 않음 즉, 별도의 Sync용 timer는 사용하지 않는다 A/V sync 요소 Audio에 기반을 둔 sync algorithm을 사용 별도의 metronome timer를 사용하지 않음 두 개의 알고리즘으로 되어 있음 첫째는 각 video frame당 A/V sync계산 및 보정 둘째는전체A/V PTS간의차이보정루틴 이 때 보정된 값은 첫번째 video frame간으로 feedback되는 구조 이 과정에서 sound device driver의 요소가 중요한 역할을 함(첫 번째 루틴에서의 시간측정에) 나 이 텍 Embedded Linux System 환경구축 및 분석 397
398 Embedded Linux 분석 및 환경구축 Audio format/codec
399 오디오 압축에 쓰이는 주요 단어 Dictionary Methods Huffman Coding PCM Pulse Code Modulation DPCM Differential PCM Wave Form Bit Rate (CBR, VBR) Sample Rate Quantization Digitalization 나 이 텍 Embedded Linux System 환경구축 및 분석 399
400 오디오 파일 포맷과 codec들 Wav (.wav) Microsoft사와 IBM 사가 PC의 사운드 표준 형식으로 공동 개발 Windows 기반 PC에서 주로 사용 Header와 Body로 구성 Header : 압축방식, 표본화율 등의 정보를 설정 Body : 머리 부분에서 정의한 형식에 맞추어 사운드 데이터를 저장 같은 wav확장을 가져도 구체적인 압축 방식은 상이할 수 있음 일반적으로 ADPCM방식이 많이 사용되고, 그 외에 Truespeech, u-law 등도 많이 사용 Au u-law 방식으로 압축된 형식으로 유닉스 환경에서 사용 일반적인 형식이며 다른 형식으로 변환하기 위한 크로스 플랫폼 형식 Sun이나 NeXT가 표준으로 채택 나 이 텍 Embedded Linux System 환경구축 및 분석 400
401 오디오 파일 포맷과 codec들 MP3 (.mp3) MPEG-1의 오디오 규격으로 개발된 손실압축 포맷 가장 대중적인 음악파일 포맷 인코딩/디코딩 알고리즘에 특허가 걸려 있음(미국,독일) Real Audio (.ra,.rm) 인터넷에서 스트리밍 기술을 이용, 실시간에 사운드를 전송 받으며 플레 이 할 수 있는 사운드 형식 기존의 방식은 접속 시 처음의 대역폭에 따라 음질이 결정 대역폭이 동적으로 변함에 따라 음질도 동적으로 변화시키는 SureStreaming이라는 기술을 이용하여 항상 최적의 음질을 재생시켜줌 나 이 텍 Embedded Linux System 환경구축 및 분석 401
402 오디오 파일 포맷과 codec들 AAC (.aac) Advanced Audio Coding MPEG-4 4Audio MP3를 대체하기 위함 DRM 지원 itunes 와 ipod 에서 주로 사용됨 WMA (.asf.wma) 특허가 걸려 있는 MP3 나 AAC의 대안으로서 MS가 개발 VBR (가변 비트레이트), 비손실 압축 가능 DRM 지원 나 이 텍 Embedded Linux System 환경구축 및 분석 402
403 오디오 파일 포맷과 codec들 Ogg Vorbis Ogg + Vorbis Ogg : 멀티미디어 스트림을 위한 컨테이너 Vorbis : 압축 코덱 로열티 없음 VBR 지원 MP3보다 음질이 좋은 것으로 알려짐 공개된 source code와 no license의 특징을 갖는다 사용의 빈도가 mp3보다 훨 적은 format임 Flac 비손실 압축임 스트리밍 지원 Ogg 사용 나 이 텍 Embedded Linux System 환경구축 및 분석 403
404 오디오 파일 포맷. 압축률 비교 Format/bitrate 64 kbit/s 128 kbit/s 192 kbit/s 256 kbit/s Wav 100 % MP3 (lame ) 4.6% (22:1) 9.1% (11:1) 13.6% (7:1) 18.2% (5:1) Ogg Vorbis (oggenc 1.0.1) 4.3% (23:1) 8.5% (12:1) 12.7% (8:1) 17.7 % (6:1) Flac (flac 1.1.0) 56.30% bzip2 (1.0.2) 89.50% 나 이 텍 Embedded Linux System 환경구축 및 분석 404
405 다채널 코덱(Multichannel Codecs) Windows Media9 and RealAudio10 include multichannel coding, AAC and AAC+ support multichannel coding AC3 (Audio Coding, Dolby) proprietary largest installed user base quality close to mp3 production point of view taken into account DTS (Digital Theater Systems) proprietary high bitrate, high quality MLP (Meridian Lossless Packing) proprietary p lossless SDDS (Sony Dynamic Digital Sound) proprietary based on ATRAC 나 이 텍 Embedded Linux System 환경구축 및 분석 405
406 Lossless Codecs Compression ratios 1/3-1/2 depending on the material FLAC (Free Lossless Audio Coding) free Monkey s Audio free Windows Media Many others exist MPEG has an ongoing standardization work 나 이 텍 Embedded Linux System 환경구축 및 분석 406
407 Low-Delay Codecs G.722 based teleconferencing codecs low quality, enough for 64kbps AAC-LC (Low Complexity) MPEG 4 Quality better than mp3 Most ordinary codecs not good enough for two-way communications, especially AAC+ has a very high delay 나 이 텍 Embedded Linux System 환경구축 및 분석 407
408 New Codecs Spectral Band Replication AAC+ = MPEG HE-AAC, very high quality around 48kbps mp3+ AMR-WB+ (Adaptive Multi-Rate WideBand, Nokia) good quality around 24kbps optional codec in 3GPP alongside with AAC+ Discreet multichannel AAC+ discreet 128kbps E-AC3 (Enhanced Audio Coding, Dolby) Binaural Cue Coding mp3 surround 192kbps (FhG, Agere) HE-AAC surround 64kbps, supposedly better than AC-3 at???kbps MPEG standardization about to start Spectral Band Replication & Binaural Cue Coding E-AAC+ (Enhanced AAC+, FhG, CT, Philips) 나 이 텍 Embedded Linux System 환경구축 및 분석 408
409 Other Codecs SBC (Sub Band Coding) used with bluetooth low complexity, low power near CD 320 kbps Dolby-E multichannel synchronous with video frames high bitrates, but studied tandem coding quality 나 이 텍 Embedded Linux System 환경구축 및 분석 409
410 Embedded Linux 분석 및 환경구축 SDL Library
411 SDL 이란 무엇인가? SDL(Simple Direct layer) low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer 정형화 되어 있지 않은 화면을 구성하는데 적합한 구조 Multi-Platform Graphic Libarary UNIX, MacOS, Win32, Game 개발용 Library Support OS Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX Officially support AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS, and dos/2 - Not officially i supported Windows의 경우 Direct-X를 호출하는 방식으로 되어 있음. 나 이 텍 Embedded Linux System 환경구축 및 분석 411
412 SDL(Simple Directmedia Layer) Windows DirectX와 유사한 기능을 하는 Game Development Library. Sam Lantinga라는 개발자에 의해 1995년도서부터 개발됨. LGPL Free Cross-Platform 멀티미디어 개발용 API. Linux, Windows(/CE), BeOS, MacOS, BSD계열 등에 포팅. 대표적 게임 : 윈도우용 심시티, 레일로드, 타이쿤, 리눅스용 둠, 퀘이 크 시리즈 포팅. SDL과 연계해서 사용할 수 있는 지원 라이브러리가 많음(ex> SDL_ttf) SDL을 이용한 범용 GUI Library(ex> ParaGUI, guichan) OpenGL 지원 나 이 텍 Embedded Linux System 환경구축 및 분석 412
413 SDL의 주요기능 주요기능 게임용 라이브러리로 정형화된 화면과 비주얼한 화면구현 가능. 즉, TV, PMP, MP3P, 게임기등에 사용. 비디오 - 각 OS별 platform 고속 video 처리루틴을 지원(ex> DirectX) 실제로 Windows용 SDL의 경우 Direct-X를 호출함. 이벤트 - keyboard, mouse, joystick등에 대한 지원 오디오 - Mixing기능, Sampling rate 변환, 각 OS별 audio routine지 원(SDL_mixer CD-ROM CD-ROM 지원 가능 API 지원. Thread Thread 생성 API 제공. Timer 엔디안(Endian)독립성 나 이 텍 Embedded Linux System 환경구축 및 분석 413
414 SDL-1.2.X Library 공통된 제어부분을 SDL 라이브러리가 담당 나머지 다양한 기능은 서브 라이브러리를 이용하여 처 리 SDL_1.2.X SDL_image SDL_gfx SDL_mixer SDL_gl SDL_ttf 나 이 텍 Embedded Linux System 환경구축 및 분석 414
415 SDL Image Library SDL_image 는 image를 다루는 SDL sub-library. 지원되는 파일 - jpg, png, bmp, gif 등 화면 LOCK 이 가능하며, 빠른 화면 전환이 가능. 일부영역이 투명하게 그려지는 스프라이트(sprite)구현 가능. Blit 함수 지원, R,G,B 화면 지원 및 R,G,B,A 화면 지원. 참조 SDL_image Documentation - 나 이 텍 Embedded Linux System 환경구축 및 분석 415
416 SDL gfx Library 2D graphic 전용 라이브러리. 선, 도형, 박스 그리기 Image 의 사이즈 변환 및 회전 가능. 여러 개의 화면 분할 기능. SDL_gfx Documentation Homepage 참조 나 이 텍 Embedded Linux System 환경구축 및 분석 416
417 SDL_ttf SDL에서의 TrueType Font 처리용 라이브러리. 한글처리는 UTF8로 출력함 변환 과정 필요 사전 렌더링 작업이 필요 최적화 폰트가 큰 경우 초기 로딩 시간이 꽤 걸리므로 낮은 사양의 시스템 일 경우 최적화 필요 Input method 제공하지 않음. 참조 나 이 텍 Embedded Linux System 환경구축 및 분석 417
418 SDL로 만든 Game Screenshot 나 이 텍 Embedded Linux System 환경구축 및 분석 418
419 Embedded Linux 분석 및 환경구축 Video의 신호처리
420 TV 신호 형태 비디오 정지화상(프레임) 의 연속 Frame Rate(프레임 재생율) NTSC PAL FPS(Frame Per Second) 25 FPS 일반 Flash Animation 12~20 FPS 나 이 텍 Embedded Linux System 환경구축 및 분석 420
421 TV의 주사방식 Non Interlace Scanning 순차적으로 주사선을 이동 Interlace Scanning 짝수, 홀수 라인을 교대로 제공 나 이 텍 Embedded Linux System 환경구축 및 분석 421
422 Interlace Scanning 순차 스캔에 비해 1/2의 스캔라인 신호 순차 스캔신호보다 작은 대역폭으로 전송 가능 초당 60번의 데이터를 전송 자연스럽게 초당 60회 CRT 화면에 새롭게 재생(refresh)되어 깜 박거림이 없어지게 됨 국내 TV 방식(NTSC) 525 주사선으로 구성 매초 30프레임인 인터레이스 스캔 방식 매초 60개의 필드가 전송 나 이 텍 Embedded Linux System 환경구축 및 분석 422
423 YUV 변환 밝기(luminance)와 색상(chrominance)정보 분해 밝기 = Y 성분, 색상 = U, V 성분 채도를 줄여 합성하게 되면 대역폭의 차이로 간섭이 발생하지 않아 한 채널에 전송 가능 Y성분은 오차에 민감 색상성분인 U와 V보다 많은 비트를 코딩 전형적인 Y:U:V의 비율은 4:2:2 RGB신호를 YUV 변환 Y = 0.3R G B U = (B-Y) x V = (R-Y) x YUV신호를 RGB 변환 R = Y U V G = Y U V B = Y U V 나 이 텍 Embedded Linux System 환경구축 및 분석 423
424 TV의 색상전송 하나의 명도신호와 두개의 색상신호로 변환하여 전송 흑백 텔레비전 : 명도신호를 이용하여 흑백영상을 출력 칼라 텔레비전 : 명도신호와 색상신호를 혼합하여 칼라 영상을 생성 나 이 텍 Embedded Linux System 환경구축 및 분석 424
425 YUV pixel format Packed format RGB 픽셀 포맷과 같이 하나의 macropixel에 packing 되어 있는 형 태 하나의 배열에 저장됨 Planar format 각 색상 컴포넌트별로 별도의 배열을 사용하여 저장됨 하나의 최종 이미지가 만들어지기 위해서는 분리된 새 개의 색상 면 (plane)이 합쳐져야 함 나 이 텍 Embedded Linux System 환경구축 및 분석 425
426 YUV pixel format YUV 4:n:n 4 는 NTSC 나 PAL신호로부터 Y성분을 샘플링 할때 사용하는 sampling rate 인 13.5MHz를 의미 (ITU-RBT.601) n은 Cb, Cr 성분이 샘플링되는 비율 Chroma subsampling 보통 색상 (Cb, Cr)성분 밝기(Y)성분보다 더 낮은 비율로 샘플링됨 YUV444 no chroma subsampling Y 성분과 동일한 비율로 샘플링 전송이나 저장시 비효율적임 보통 다른 pixel format으로 변경될 때 사용 나 이 텍 Embedded Linux System 환경구축 및 분석 426
427 YUV pixel format YUV422 색상 성분은 Y 성분의 수평 해상도의 절반으로 샘플링 고화질 전문가용 비디오 등에 사용 나 이 텍 Embedded Linux System 환경구축 및 분석 427
428 YUV pixel format YUV411 색상 성분은 Y 성분의 수평 해상도의 1/4로 샘플링 나 이 텍 Embedded Linux System 환경구축 및 분석 428
429 YUV pixel format YUV420 색상 성분은 Y 성분의 수평/수직 해상도의 1/2로 샘플링 나 이 텍 Embedded Linux System 환경구축 및 분석 429
430 Embedded Linux 분석 및 환경구축 동영상 압축 format
431 동영상 압축의 기본 원리 기본 원리 화면내(공간적) 상관관계에 의한 압축 이웃하는 샘플과 유사성이 높다 화면간(시간적) 상관관계에 의한 압축 프레임율이 높을수록 상관도는 더 크다 부호의 발생 확률에 따른 가변장부호화를 이용한 정보 압축 Entropy coding 색채표현에 따른 압축 YUV/RGB 등의 color 변환 H.261/H.263/H.264, MPEG1/2/4등의 국제 표준 동영상 압축에서 가장 중요한 포인트 모든 압축결과물은 Entropy coding의 입력으로 들어감 Entropy coding의 효율은 입력데이터가 얼마나 중복성이 많은가에 따 라 결정됨 화면내/화면간의 압축 방법의 모든 목적은 entropy coding의 효율을 높일 수 있도록 구성하는데 있다 나 이 텍 Embedded Linux System 환경구축 및 분석 431
432 MPEG 소개 Moving Picture Experts Group 의 약자 정식 명칭은 ISO/IEC/JTC1/SC29/WG11 이다. 이 명칭은 국제 표 준화 기구 (ISO)와 국제 전기기술위원회(IEC)가 정보 표현의 표준화 를 위하여 구성한 공동위원회(JTC) 산하의 작업반인 JTC1/SC29/WG11 / 의 이름 나 이 텍 Embedded Linux System 환경구축 및 분석 432
433 MPEG의 표준화 흐름 현재 MPEG-1 MPEG-2 MPEG-4 MPEG-7 저장 미디어용 범용 범용 콘텐트 기술 (CD-ROM) (방송) (멀티미디어) ~1.5Mbps ~10Mbps ~1.5Mbps MPEG-21 멀티미디어 콘텐트 나 이 텍 Embedded Linux System 환경구축 및 분석 433
434 MPEG 년 ISO(국제표준화기구) 11172로 규격화된 영상 압축 기술 CD-ROM과 같은 디지털 저장매체에 VHS 테이프 수준의 동영상과 음향 을 최대 1.5Mbps로 압축 저장할 수 있는 방식. 화면사이즈 : 352*240(320*240) (보통 0.5 ~ 2Mbps로 인코딩을 받음) MPEG-1의 특징 B 프레임(양방향 예측 기술 도입) 움직임 보상의 정밀도 개선 DCT 변환 및 고속 접속을 위한 GOP (Group of Picture) 사용 응용사례 : Video CD, 가라오케 나 이 텍 Embedded Linux System 환경구축 및 분석 434
435 MPEG 년 ISO 13818로 규격화된 영상압축기술. 디지털 TV, 대화형 TV, DVD 등은 높은 화질과 음질을 필요로 하는 분야 로 높은 전송속도 처리가 필요, 영상 및 음향을 압축하기 위해 MPEG1 을 개선한 것. 현재 DVD 등의 컴퓨터 멀티미디어 서비스, 직접 위성방송 유선방송 고화질 TV 등의 방송서비스, 영화나 광고편집 등에서 널리 쓰이고 있다. 특징 MPEG-2 비디오는 일종의 범용 압축 알고리즘 MPEG-1 비디오를 발전 시킴 부호화 단위를 매크로 블록으로 한다. DCT에 의한 공간적 압축을 한다. DPCM(Differential PCM)에 의한 시간적 압축을 한다. 독립 실행을 위한 GOP 그룹을 가지고 있다.(랜덤 액세스 가능 ) 스케일러빌리티 기능을 가지고 있다. 적용사례 :HDTV 나 이 텍 Embedded Linux System 환경구축 및 분석 435
436 MPEG-4 멀티미디어 통신을 전제로 1998년 완성. 특징 64kb/bps, 19.2kb/bps의 저속 전송으로 동화상을 구현. 초당 10 kbps정도 이하의 낮은 비트율에서 수 Mbps의 높은 비트율에 이르기까지 광범위한 범위의 비트율에서 사용 가능한 부호화 기술을 사 용. 내용기반 부호화 (Content-based Coding)에 중점. 즉, 영상 내용을 각 각의 객체(Object) 단위로 나누어 처리하여 전송. 양방향성(Interactivity), 높은 압축율(High Compression Ratio) 및 다 채로운 접속을 가능케 하는 멀티미디어 표준 부호화 방식. 응용분야 인터넷 유선망, 이동통신망 등 무선망에서 멀티미디어 통신 화상회의 시스템 컴퓨터, 방송, 영화, 교육, 오락, 원격감시 등의 분야에서 쓰임. 나 이 텍 Embedded Linux System 환경구축 및 분석 436
437 H.264 명칭 H.264 / AVC ( MPEG-4 PART 10 ) 표준 ITU-T T 와 ISO 공동표준 Joint Video Team (JVT) 에 의해서 표준이 정해짐 MPEG-4 PART 10 AVC, ITU-T recommanation H.264 특징 DMB, DVB-H 등의 방송 서비스나 VOD 서비스에서 사용되고 있는 코 덱 MPEG-4 보다 약 15%의 복잡도 상승이 있으나 50%이상의 압축률 향상 Baseline, Main, Extended, High Profile 이 존재 각 Profile 마다 여 러 Level 이 존재 나 이 텍 Embedded Linux System 환경구축 및 분석 437
438 Embedded Linux 분석 및 환경구축 GStreamer
439 GStreamer란 멀티미디어의 여러 컴퍼넌트의 그래프를 구성해주는 플랫폼 라이브러리 플러그인 구조의 코덱 및 필터 개발을 가능케 하는 구조 Microsoft사의 Directshow 와 유사 LGPL 라이센스하의 오픈 소스 나 이 텍 Embedded Linux System 환경구축 및 분석 439
440 기본 구조 플러긴 구조의 엘리먼트와 코어 프레임워크, 애플리케이션으로 구성 나 이 텍 Embedded Linux System 환경구축 및 분석 440
441 플랫폼 확장성 다양한 OS 및 개발 환경에 포팅될 수 있으나 대부분 Linux 환경에서 각광받고 있으며 최근 Embedded Linux 에서 멀티미디어 플랫폼으 로 주목 다른 플랫폼과 컴포넌트 호환이 가능한 구조로 발전 Linux/Unix: OpenMAX-IL (via gst-openmax) Windows: DirectShow MaxOS X: QuickTime 나 이 텍 Embedded Linux System 환경구축 및 분석 441
442 주요특징 그래프 구조의 자유로운 파이프라인 설계 OOP 개념 개발을 위해 Glib 2.0 오브젝트 모델에 기반을 둠 500KB이하의 라이브러리 사이즈, 6만5천라인 코드 멀티쓰레드 지원 데이터 패싱 오버헤드를 최소화 디버깅 시스템 구축 스트림간 싱크 기능 지원( A/V Sync) QOS 지원 나 이 텍 Embedded Linux System 환경구축 및 분석 442
443 Plug-in 아키텍쳐 XML을 이용한 다이내믹 로딩 지원 엘리먼트 인터페이스를 통한 소스,필터,싱크 제어 MIME 타입을 이용한 엘리먼트 호환성 체크 자동 패스 구성 및 XML 자료화 동적 할당으로 리소스 사용량을 최소화 나 이 텍 Embedded Linux System 환경구축 및 분석 443
444 상용 애플리케이션 Totem player GNOME Desktop 기반의 대표적인 동영상 플레이어 Kaffeine KDE 기반의 멀티미디어 플레이어 Amarok, Banshee, BMP, Exile등 많은 상용 멀티미디어 프로그램등 에서 사용중 나 이 텍 Embedded Linux System 환경구축 및 분석 444
445 스크린샷 나 이 텍 Embedded Linux System 환경구축 및 분석 445
446 버전 & 히스토리 1999년 project start 2002년 glib2.0 지원(0.3.3) 2004년 0.8버젼 release 2005년 현재 0.10버젼 release stable version : 0.8, 0.10 unstable version : 0.9, 만 maintenance 되고 있음 나 이 텍 Embedded Linux System 환경구축 및 분석 446
447 Embedded Linux 분석 및 환경구축 Multimedia container
448 AVI RIFF? The Resource Interchange File Format (RIFF) Generic meta-format t for storing data in tagged chunks(data의 모음을 말함). Introduced in 1991 by Microsoft and IBM, and was presented by Microsoft as the default format for Windows 3.1 multimedia files. Microsoft에서 사용되는 AVI/WAV등의 data들은 RIFF의 형태로 되어 있다 나 이 텍 Embedded Linux System 환경구축 및 분석 448
449 FOURCC FourCC? FOURCC(4 문자 코드)란, 4 개의 ASCII 문자를 연결해 생성 한 32비트 의 unsigned int형의 data ex> FOURCC인 'abcd'는, little endian 시스템에서는 0x 로 표현 FOURCC 에서는 공백 문자를 포함할 수가 있다 ex>' abc' ==> valid FOURCC FourCC는 주로 AVI 파일의 영상 코덱을 구분할 때 사용된다. AVI 파일 포맷은 FOURCC 코드를 사용해, 스트림 타입, 데이터 체크, 인 덱스 엔트리, 그 외의 정보를 식별. 참고 사이트 나 이 텍 Embedded Linux System 환경구축 및 분석 449
450 AVI RIFF Format(1) AVI RIFF AVI 파일은, RIFF 헤더내의 FOURCC 'AVI '에 의해 식별된다. 모든 AVI 파일에는, 2 개의 LIST chunk가 포함되어 있어 각각이 stream header와 stream data의 포맷을 정의. Index chunk AVI 파일에는 index chunk가 포함되는 경우도 있다(거의 필수적임). 파일 내에서의 데이터 chunk의 위치를 지정. 이러한 요소를 포함한 AVI 파일은, 다음과 같은 포맷을 갖는다 나 이 텍 Embedded Linux System 환경구축 및 분석 450
451 AVI RIFF Format(2) AVI RIFF 다시 자세하게 표현하면 다음과 같은 구조이다 나 이 텍 Embedded Linux System 환경구축 및 분석 451
452 AVI Index List AVI index list AVI Index List chunk는 AVI를 탐색하는데 필요한 index정보를 갖는다 이 부분은 old index와 open DML(AVI의 나중버전) index가 서로 상이 하다. 만일 이 부분이 없을 경우는 index부분이 없기 때문에 AVI file에 대한 seek기능이 현저히 떨어진다. AVI spec과 code를 참조할 것 나 이 텍 Embedded Linux System 환경구축 및 분석 452
453 Matroska(1) 마트료시카 멀티미디어 컨테이너(Matroska Multimedia Container) 오픈 표준 자유 컨테이너 포맷 개수 제한 없이 비디오, 오디오, 그림, 자막 트랙을 한 파일 안에 담을 수 있는 파일 형식 흔히 쓰이는 영화/드라마 등의 멀티미디어 콘텐트를 담기 위한 보편적 인 포맷으로서 개발 AVI, MP4 혹은 ASF 등을 대체하기 위해 만들어졌음 파일 확장자로는 비디오 파일에는.MKV를 쓰고, 오디오 파일에는.MKA를 쓴다 나 이 텍 Embedded Linux System 환경구축 및 분석 453
454 Matroska(2) 마트료시카는 EBML에 뿌리를 두고 지속 가능성과 확장성을 염두에 두고 설계 목표 스트리밍에 대한 강건한 지원; EBML에 기반한 "DVD-like" 메뉴 시스템; 마트료시카 파일을 생성하고 편집해줄 수 있는 다양한 툴 개발; 개발자들이 마트료시카 포맷 지원 기능을 애플리케이션에 쉽게 첨가할 수 있는 라이브러리 개발; 하드웨어 제조사들이 임베디드 멀티미디어 기기에서의 마트료시카 포맷 지원 기능을 추가하도록 도움; 여러 운영 체제 상에서 마트료시카의 네이티브(native) 지원. 나 이 텍 Embedded Linux System 환경구축 및 분석 454
455 그외의format.. MP4, RealVideo, WMV(ASF), OGM, OGV 등등 나 이 텍 Embedded Linux System 환경구축 및 분석 455
456 Embedded Linux 분석 및 환경구축 MFC(Mulfi-Format Codec)을 이용한 media player 제작
457 MFC를 이용한 Media Player 만들기 개요 MFC Media Player개요 MFC를 이용하는 데의 제약사항 및 조건 오직 Video codec만 S3C6410에서는 지원한다. Media file에 대한 Parsing은 외부에서 처리해야한다(demuxer) Demo application의 경우 Frame단위로 처리하도록 되어 있지 않고, 연속된 video element stream을 입력으로 넣어줘야 한다. 하나의 file(video stream만 가지고 있는)만을 입력으로 받는다 Demo application에서 연속된 video stream을 frame단위로 분리하는 기능을 가지고 있음 첫번째 frame데이터를 읽어야만 영상에 대한 width/height 정보를 세팅할 수 있게 되 어 있음(avi file등은 그렇게 처리하지 않고, header를 읽어서 처리하는 경우가 많음) audio에 대한 처리는 따로 software적으로 해야 함 이에 따른 Audio/Video sync도 외부에서 처리해 줘야 함 기존의 Media Player 중 video만 hw적으로 처리가 가능한 software를 기 반으로 작업하는 것이 가장 좋은 선택이고, 전체 performance에 대한 테스 트도 가능하게 됨 Mplayer를 선택 나 이 텍 Embedded Linux System 환경구축 및 분석 457
458 MFC를 이용한 Media Player 만들기 개요 MFC Media Player개요(계속) MFC를 Mplayer에 적용하기 위하여 해야하는 일의 순서 MFC용 각 codec별 video element stream을 생성해야 함 avi등의 container에서 video elment stream만 추출하여 각 코덱별 data를 추 출하는 프로그램 작성(여기서는 MPEG4/H.264만 작성) 첫째: 전체 video frame을 하나의 file로 만드는 avi demuxer 작성 둘째: frame단위로 데이터를 file로 저장해서 실제 동영상 player에서 처리하는 것처 럼 처리가 가능하도록 해주는 avi demuxer 작성 위의 추출물에 따른 MFC를 이용한 video decoding application작성 첫째: 각 codec별 전체 video frame이 하나의 file로 구성된 것을 decoding하는 프로 그램 둘째: 각 frame file로부터 하나의 frame data를 읽어서 decoding하는 프로그램 나 이 텍 Embedded Linux System 환경구축 및 분석 458
459 MFC를 이용한 Media Player 만들기 개요 MFC Media Player개요(계속) MFC를 Mplayer에 적용하기 위하여 해야하는 일의 순서(계속) 위의 frame 단위 decoding 함수를 이용해서 avi demuxer와 Merge avi demuxer와 frame단위 decoding함수를 이용하여 avi를 읽어서 video만 decoding하는 프로그램 작성 이 program작성시 주의 사항은 AVI file안에 MUX되어 있는 video file의 구조와 decoding routine을 적절하게 배치할 수 있도록 코딩을 수정하는 것이다 이 작업은 기존의 Multimedia Player의 구조에 MFC codec을 붙일 수 있도록 MFC demo application의 구조를 수정해야 한다.(libmfc stage 1) 각 codec별로 따로 작업을 한 후에(frame단위, plug-in형태를 대비한) 그 결과를 가지고 plug-in 형태로 만들 수 있도록 코드에 대한 수정을 해야 한다 media player의 경우는 내부에서 AVI file의 헤더를 읽어서 각 코덱을 세팅하기 때문에 plug-in 형태로 MFC video codec을 동작시킬 수 있도록 코드를 작성한다. 이 때 작성된 Application을 gavi라고 이름을 붙인다(설명의 편의성을 위하여) 위의 작업이 끝난 후에 MFC library를 Mplayer의 구조에 merge 할 수 있는 형태의 library로 다시 수정을 한다(ex> libmfc stage 2) 나 이 텍 Embedded Linux System 환경구축 및 분석 459
460 MFC를 이용한 Media Player 만들기 개요 MFC Media Player개요(계속) MFC를 Mplayer에 적용하기 위하여 해야하는 일의 순서(계속) 작성된 libmfc(stage 2) library를 Mplayer의 source tree로 복사 이 때 libmfc의 singal 처리 관련 함수들은 모두 주석처리한다 Makefile을 적절하게 수정한다 configure를 하고, 컴파일이 제대로 되는지 테스트한다. Mplayer의 main routine인 mplayer.c를 적절하게 수정한다. 실제 MPEG4/H.264로 encoding된 AVI 혹은 MP4 파일 등을 테스트 한다 기존의 Media Player에 Hardware Codec Engine을 포팅할 경우 가장 중 요한 점은 media player의 구조에 알맞게 앞에서 작성한 gavi라는 형태의 프로그램을 얼마 나 잘 작성하느냐에 따라서 포팅작업의 난이도가 결정이 된다는 것이다. 나 이 텍 Embedded Linux System 환경구축 및 분석 460
461 MFC용 video stream 추출 avilib Rainer Johanni에 의해 1999년 작성됨 Linux 혹은 UNIX에서 AVI file을 다룰 수 있게 작성된 open source library It provides a framework for extracting or adding raw audio and single raw (=compressed) frames from/to AVI Files. 압축에 대한 routine은 제공하지 않고, 오직 AVI in/out routine만 제공 AVI file은 여러 개의 video/ audio track을 가질 수 있지만 avilib는 하나의 track만 다룰 수 있다(video/audio 하나씩) AVI에서 video stream만 추출하는데 avilib를 사용한다. 나 이 텍 Embedded Linux System 환경구축 및 분석 461
462 MFC용 total video frame 추출 avilib_total_frame avilib를 이용하여 avi file에 포함되어 있는 video frame data를 추출하는 프로그램 모든 유효 video frame data만을 모아서 video.dat라는 출력 파일로 저장 을 한다. 주의할 점은 video frame을 읽어올 때 frame length가 8보다 작은 frame 은 저장하지 않아야 하는 경우가 있다. 이 frame은 MPEG4의 Bf frame이 있는 영상의 경우 frame sync를 맞추기 위하 여 들어있는 sync code로 볼 수 있기 때문이다. S3C6410 MFC에서는 이 부분도 decoding을 알아서 처리해 주지만, 처리를 못 하는 hw의 경우는 이 부분을 frame data로 처리하면 안되는 경우가 있다(ex> mp2530) 나 이 텍 Embedded Linux System 환경구축 및 분석 462
463 MFC용 AVI video player작성 avilib와 MFC를 이용하여 MPEG4/H264 player작성 앞에서 작성된 demo application들인 MPEG4/H264를 수정하여 새로운 application을 만든다 최종 목표인 기존의 media player에 포함하기 위해서는 media player가 원하는 방식의 API함수를 작성해 주어야 한다. 1. MFC Demo application을 수정하여 library 형태로 만들고 2. library 형태로 만든 것을 media player용 API 함수 형태로 분리하고 이유는 기존 demo app가 하나의 함수에서 모든것을 처리하기 때문이다. video data만 처리할때는 상관이 없지만, media player로는 적합하지 않은 구조 이다. 3. library와 API로 된 것을 codec별로 테스트 한 후에 4. module 형태의 함수 포인터로 수정한 후 test 한다. 5. 이렇게 만들어진 app와 library를 약간 다시 수정한 후, media player용 library를 만들면 된다 API와 library만 추출해서 media player(mplayer)에 통합작업을 한다 나 이 텍 Embedded Linux System 환경구축 및 분석 463
464 감사 합니다. 나 이 텍 Embedded Linux System 환경구축 및 분석 464
슬라이드 제목 없음
< > Target cross compiler Target code Target Software Development Kit (SDK) T-Appl T-Appl T-VM Cross downloader Cross debugger Case 1) Serial line Case 2) LAN line LAN line T-OS Target debugger Host System
PowerPoint 프레젠테이션
(Host) set up : Linux Backend RS-232, Ethernet, parallel(jtag) Host terminal Target terminal : monitor (Minicom) JTAG Cross compiler Boot loader Pentium Redhat 9.0 Serial port Serial cross cable Ethernet
ESP1ºÎ-04
Chapter 04 4.1..,..,.,.,.,. RTOS(Real-Time Operating System)., RTOS.. VxWorks(www.windriver.com), psos(www.windriver.com), VRTX(www.mento. com), QNX(www.qnx.com), OSE(www.ose.com), Nucleus(www.atinudclus.
Microsoft PowerPoint - chap01-C언어개요.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을
Microsoft PowerPoint - em8-리눅스설치.ppt
임베디드리눅스커널설치개요 임베디드리눅스설치 Linux Kernel* Root File System* jffs2.img 1 2 구성요소 리눅스커널 필수구성요소 하드웨어를초기화하고 kernel image를 에올려주어수행을넘겨주는역할을하는프로그램 OS Kernel OS 의핵심프로그램 Root File System Kernel 에서사용할 File System 임베디드리눅스에서는
망고100 보드로 놀아보자-4
망고 100 보드로놀아보자 -4 Minicom,tftp,nfs 설정,vnc 설정 minicom 설정 Minicom 설정 >#yum install minicom >#ls /dev/ttyusb* ># minicom s Minicom 설정 Serial Device :/dev/ttyusb0 Baudrate:115200 Hardware Flow control: NO
Microsoft PowerPoint - 03-Development-Environment-2.ppt
개발환경 2 임베디드시스템소프트웨어 I 차례 부트로더의기능, 컴파일방법 커널의기능, 컴파일방법 파일시스템의기능, 생성방법 Host-KIT 네트워크연결방법 (Bootp, TFTP, NFS) 개발환경 2 2 부트로더의기능 하드웨어초기화 CPU clock, Memory Timing, Interrupt, UART, GPIO 등을초기화 커널로드 커널이미지를 flash
PowerPoint 프레젠테이션
BOOTLOADER Jo, Heeseung 부트로더컴파일 부트로더소스복사및압축해제 부트로더소스는웹페이지에서다운로드 /working 디렉터리로이동한후, wget으로다운로드 이후작업은모두 /working 디렉터리에서진행 root@ubuntu:# cp /media/sm5-linux-111031/source/platform/uboot-s4210.tar.bz2 /working
Mango220 Android How to compile and Transfer image to Target
Mango220 Android How to compile and Transfer image to Target http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys
임베디드시스템설계강의자료 4 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 4 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 Outline n n n n n n 보드개요보드연결필수패키지, Tool-Chain 설치 Kernel, file system build Fastboot 및 Tera Term설치 Kernel, file system 이미지전송및설치 - 2 - Young-Jin Kim X-Hyper320TKU
DE1-SoC Board
실습 1 개발환경 DE1-SoC Board Design Tools - Installation Download & Install Quartus Prime Lite Edition http://www.altera.com/ Quartus Prime (includes Nios II EDS) Nios II Embedded Design Suite (EDS) is automatically
Windows Embedded Compact 2013 [그림 1]은 Windows CE 로 알려진 Microsoft의 Windows Embedded Compact OS의 history를 보여주고 있다. [표 1] 은 각 Windows CE 버전들의 주요 특징들을 담고
OT S / SOFTWARE 임베디드 시스템에 최적화된 Windows Embedded Compact 2013 MDS테크놀로지 / ES사업부 SE팀 김재형 부장 / [email protected] 또 다른 산업혁명이 도래한 시점에 아직도 자신을 떳떳이 드러내지 못하고 있는 Windows Embedded Compact를 오랫동안 지켜보면서, 필자는 여기서 그와 관련된
PowerPoint 프레젠테이션
임베디드리눅스개발환경구축 Jo, Heeseung 개발환경 HBE-SM5-S4210 개발환경 타겟보드와리눅스가설치된호스트컴퓨터가필요 임베디드리눅스개발환경 - 호스트컴퓨터환경설치 - 호스트와타겟연결 - 디버그환경 호스트컴퓨터는임베디드시스템의동작을모니터링하는디버깅환경으로서의역할도수행 임베디드시스템을위한소프트웨어를개발하기위해서호스트시스템에구축하는개발환경 교차개발환경
PowerPoint 프레젠테이션
임베디드리눅스개발환경실습 Jo, Heeseung 타겟보드모니터링동작실습 호스트 PC 에서시리얼포트를통해서타겟보드를모니터링 타겟보드가프로그램을실행하는동안일어나는일을시리얼포트로메시지를출력하면호스트 PC 에서는시리얼포트를통해메시지를수신하여이를화면에출력 minicom 프로그램사용 - minicom 이정상적으로설정이되고, 타겟보드에최소한부트로더가올라간상태라면 minicom
PowerPoint 프레젠테이션
임베디드리눅스개발환경구축 Jo, Heeseung 개발환경 HBE-SM5-S4210 개발환경 타겟보드와리눅스가설치된호스트컴퓨터가필요 임베디드리눅스개발환경 - 호스트컴퓨터환경설치 - 호스트와타겟연결 - 디버그환경 호스트컴퓨터는임베디드시스템의동작을모니터링하는디버깅환경으로서의역할도수행 임베디드시스템을위한소프트웨어를개발하기위해서호스트시스템에구축하는개발환경 교차개발환경
<4D6963726F736F667420506F776572506F696E74202D20C0BDBCBA484D4920C0FBBFEB20C5DAB7B9B8C5C6BDBDBA20B4DCB8BBB1E228B9DFC7A5C0DAB7E129>
Terminal Platform 권오일 ([email protected]) 현대오토넷 목차 1. 텔레매틱스 시스템 개요 P3 2. 텔레매틱스 단말기 개요 P4 3. 텔레매틱스 단말기 하드웨어 P9 4. 텔레매틱스 단말기 소프트웨어 P15 5. 음성 HMI 적용 전체 시나리오 P22 6. 향후 계획 P26 2 1. 텔레매틱스 시스템 개요 3 Block Diagram
Microsoft PowerPoint - 02_Linux_Fedora_Core_8_Vmware_Installation [호환 모드]
리눅스 설치 Vmware를 이용한 Fedora Core 8 설치 소프트웨어실습 1 Contents 가상 머신 실습 환경 구축 Fedora Core 8 설치 가상 머신 가상 머신 가상 머신의 개념 VMware의 설치 VMware : 가상 머신 생성 VMware의 특징 실습 환경 구축 실습 환경 구축 Fedora Core 8 설치 가상 머신의 개념 가상 머신 (Virtual
ARM01
0 1 Chapter 1.1 1.2 1.3 1.4 1.5 ARM System Developer s guide 32, ARM., ARM,,,. ARM 1985, ARM1, 2001 20 ARM. ARM,., ARM,., ARM ARM7TDMI, 120 Dhrystone MIPS 1),. ARM7TDMI. ARM, RISC(Reduced Instruction Set
Microsoft Word - MV210_CPUSpec.doc
Hardware Specification Brief 마이크로비젼 / Microvision 서울특별시구로구구로 3 동 235 번지한신 IT 타워 1004 호 ( 전화 ) 02-3283-0101, ( 팩스 ) 02-3283-0160 (Web) http://www.microvision.co.kr Copyright 2011 Microvision 1 Contents
Microsoft PowerPoint - 02-Development-Environment-1.ppt
개발환경 1 임베디드시스템소프트웨어 I 차례 개발환경 Host와 Target의연결 Host 및 target 사양 Toolchain이란, 설치방법 시험 Cross Compile Minicom 설정및사용방법 JTAG 설치및사용방법 Bootloader, kernel, file system flash 방법 개발환경 1 2 개발환경 Host 시스템 임베디드소프트웨어를개발하는시스템
이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론
이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 2. 관련연구 2.1 MQTT 프로토콜 Fig. 1. Topic-based Publish/Subscribe Communication Model. Table 1. Delivery and Guarantee by MQTT QoS Level 2.1 MQTT-SN 프로토콜 Fig. 2. MQTT-SN
<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>
i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,
USB 케이블만을이용한리눅스 NFS 개발환경 (VirtualBox) 최초작성 : 2010 년 10 월 21 일 작성자 : 김정현 수정내용 최초작성 by 김정현 스크립트추가, 설명보충 by 유형목 1. VritualBox
USB 케이블만을이용한리눅스 NFS 개발환경 (VirtualBox) 최초작성 : 2010 년 10 월 21 일 작성자 : 김정현 수정내용 2010. 10. 21. 최초작성 by 김정현 2010. 10. 24. 스크립트추가, 설명보충 by 유형목 1. VritualBox 설정 Windows 환경에서 VirtualBox 를설치한다음게스트 OS 로우분투리눅스를사용하는경우,
KDTÁ¾ÇÕ-2-07/03
CIMON-PLC CIMON-SCADA CIMON-TOUCH CIMON-Xpanel www.kdtsys.com CIMON-SCADA Total Solution for Industrial Automation Industrial Automatic Software sphere 16 Total Solution For Industrial Automation SCADA
Mango-IMX6Q mfgtool을 이용한 이미지 Write하기
Mango-IMX6Q mfgtool 을 이용한이미지 Write 하기 http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 1 Document
PowerPoint 프레젠테이션
HBE-SM5-S4210 시스템개요 Jo, Heeseung HBE-SM5-S4210 시스템개요 HBE-SM5-S4210 은... 여러가지운영체제를지원 - 리눅스는그중에하나임 부트로더, 리눅스커널, 루트파일시스템등이제공 Application module 을제어하기위한모듈프로그램, 어플리케이션프로그램, 예제프로그램들을제공 안드로이드 / 리눅스및펌웨어실습을할수있는임베디드장비
Microsoft PowerPoint - eSlim SV5-2410 [20080402]
Innovation for Total Solution Provider!! eslim SV5-2410 Opteron Server 2008. 3 ESLIM KOREA INC. 1. 제 품 개 요 eslim SV5-2410 Server Quad-Core and Dual-Core Opteron 2000 Series Max. 4 Disk Bays for SAS and
KDTÁ¾ÇÕ-1-07/03
CIMON-PLC CIMON-SCADA CIMON-TOUCH CIMON-Xpanel www.kdtsys.com CIMON-PLC Total Solution for Industrial Automation PLC (Program Logic Controller) Sphere 8 Total Solution For Industrial Automation PLC Application
지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. AR
Configure Kernel Build Environment And kernel & root file system Build 2018-09-27 VLSI Design Lab 1 지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함.
Microsoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
AGENDA 01 02 03 모바일 산업의 환경변화 모바일 클라우드 서비스의 등장 모바일 클라우드 서비스 융합사례
모바일 클라우드 서비스 융합사례와 시장 전망 및 신 사업전략 2011. 10 AGENDA 01 02 03 모바일 산업의 환경변화 모바일 클라우드 서비스의 등장 모바일 클라우드 서비스 융합사례 AGENDA 01. 모바일 산업의 환경 변화 가치 사슬의 분화/결합 모바일 업계에서도 PC 산업과 유사한 모듈화/분업화 진행 PC 산업 IBM à WinTel 시대 à
PowerPoint 프레젠테이션
INSTALL LINUX Jo, Heeseung DOWNLOAD PROGRAMS Download VMWare player http://www.vmware.com/products/player/playerproevaluation.html Download Ubuntu iso file http://ubuntu.com - server, 64bit version http://cslab.jbnu.ac.kr/_down/ubuntu-18.04.2-live-serveramd64.iso
<목 차 > 제 1장 일반사항 4 I.사업의 개요 4 1.사업명 4 2.사업의 목적 4 3.입찰 방식 4 4.입찰 참가 자격 4 5.사업 및 계약 기간 5 6.추진 일정 6 7.사업 범위 및 내용 6 II.사업시행 주요 요건 8 1.사업시행 조건 8 2.계약보증 9 3
열차운행정보 승무원 확인시스템 구축 제 안 요 청 서 2014.6. 제 1장 일반사항 4 I.사업의 개요 4 1.사업명 4 2.사업의 목적 4 3.입찰 방식 4 4.입찰 참가 자격 4 5.사업 및 계약 기간 5 6.추진 일정 6 7.사업 범위 및 내용 6 II.사업시행 주요 요건 8 1.사업시행 조건 8 2.계약보증 9 3.시운전 및 하자보증 10
PowerPoint 프레젠테이션
Install Linux Jo, Heeseung Download Programs Download VMWare player http://www.vmware.com/products/player/playerproevaluation.html Download Ubuntu iso file http://cslab.jbnu.ac.kr/_down/ubuntu-16.04.2-desktopamd64.iso
chapter4
Basic Netw rk 1. ก ก ก 2. 3. ก ก 4. ก 2 1. 2. 3. 4. ก 5. ก 6. ก ก 7. ก 3 ก ก ก ก (Mainframe) ก ก ก ก (Terminal) ก ก ก ก ก ก ก ก 4 ก (Dumb Terminal) ก ก ก ก Mainframe ก CPU ก ก ก ก 5 ก ก ก ก ก ก ก ก ก ก
슬라이드 1
사용 전에 사용자 주의 사항을 반드시 읽고 정확하게 지켜주시기 바랍니다. 사용설명서의 구성품 형상과 색상은 실제와 다를 수 있습니다. 사용설명서의 내용은 제품의 소프트웨어 버전이나 통신 사업자의 사정에 따라 다를 수 있습니다. 본 사용설명서는 저작권법에 의해 보호를 받고 있습니다. 본 사용설명서는 주식회사 블루버드소프트에서 제작한 것으로 편집 오류, 정보 누락
MAX+plus II Getting Started - 무작정따라하기
무작정 따라하기 2001 10 4 / Version 20-2 0 MAX+plus II Digital, Schematic Capture MAX+plus II, IC, CPLD FPGA (Logic) ALTERA PLD FLEX10K Series EPF10K10QC208-4 MAX+plus II Project, Schematic, Design Compilation,
목차 개발환경 JTAG Bootp TFTP NFS 1
Chapter. 3 Development Environment Settings Professor. Jaeheung, Lee 목차 개발환경 JTAG Bootp TFTP NFS 1 개발환경 기본구성 JTAG RS-232 Ethernet Host System Target System 2 개발환경 개발환경구성요소 Host System Target System을개발하기위한환경을제공하는시스템교차개발환경제공
1217 WebTrafMon II
(1/28) (2/28) (10 Mbps ) Video, Audio. (3/28) 10 ~ 15 ( : telnet, ftp ),, (4/28) UDP/TCP (5/28) centralized environment packet header information analysis network traffic data, capture presentation network
Chapter. 5 Embedded System I Bootloader, Kernel, Ramdisk Professor. Jaeheung, Lee
Chapter. 5 Bootloader, Kernel, Ramdisk Professor. Jaeheung, Lee 목차 Bootloader Kernel File System 1 Bootloader Bootloader 란? 리눅스커널부팅이전에미리실행되면서커널이올바르게부팅되기위해필요한모든관련작업을마무리하고최종적으로리눅스커널을부팅시키기위한목적으로짜여진프로그램 Bootloader
Assign an IP Address and Access the Video Stream - Installation Guide
설치 안내서 IP 주소 할당 및 비디오 스트림에 액세스 책임 본 문서는 최대한 주의를 기울여 작성되었습니다. 잘못되거나 누락된 정보가 있는 경우 엑시스 지사로 알려 주시기 바랍니다. Axis Communications AB는 기술적 또는 인쇄상의 오류에 대해 책 임을 지지 않으며 사전 통지 없이 제품 및 설명서를 변경할 수 있습니다. Axis Communications
1. GigE Camera Interface를 위한 최소 PC 사양 CPU : Intel Core 2 Duo, 2.4GHz이상 RAM : 2GB 이상 LANcard : Intel PRO/1000xT 이상 VGA : PCI x 16, VRAM DDR2 RAM 256MB
Revision 1.0 Date 11th Nov. 2013 Description Established. Page Page 1 of 9 1. GigE Camera Interface를 위한 최소 PC 사양 CPU : Intel Core 2 Duo, 2.4GHz이상 RAM : 2GB 이상 LANcard : Intel PRO/1000xT 이상 VGA : PCI x
Microsoft PowerPoint - ARM 개발 환경.ppt
ARM 개발환경 Yongjin Kim CASP Lab. Hanyang Univ. [email protected] 1 대의 PC 를위한개발환경 (1) JTAG 1 Parallel cable 4 Host PC (Window 또는 Linux) 1. JTAG 2 Serial SMC S3C2410x Hardware 개발환경 3 NOR Flash (Boot
5" TFT- LCD 및감압터치지원 : 800x480 USB Host 2.0, USB OTG 2.0, GPS, Wireless LAN, Ethernet 10/100Mbps 통신지원 300 만화소 CMOS Image Sensor 고해상도카메라모듈내장 전원은베이스보드에서공
CT210-FPGA Platform-ARM Developer Kit 규격서 1. 특징 CT210 FPGA 플랫폼은 Samsung 의 32bit Application Processor 인 S5PV210 을기반을설계된안드로이드 / 임베디드 FPGA 플랫폼입니다. CT210 FPGA 플랫폼은삼성 PV210 기반의임베디드시스템에서 FPGA 를연결하여사용할수있도록하였습니다.
컴퓨터관리2번째시간
Company 컴퓨터 관리 참고 자료 PC 운영체제 POST 기능 :, ROM BIOS ( : [F8]) 1. Windows XP Windows XP 사용자 계정 :,,, 강화된 디지털 미디어 지원 기능 : (Windows Movie Maker), CD (Windows Media Player), Windows 홈 네트워크 기능 :, 강화된 시스템 관리 :,
PCServerMgmt7
Web Windows NT/2000 Server DP&NM Lab 1 Contents 2 Windows NT Service Provider Management Application Web UI 3 . PC,, Client/Server Network 4 (1),,, PC Mainframe PC Backbone Server TCP/IP DCS PLC Network
기술 이력서 2.0
Release 2.1 (2004-12-20) : : 2006/ 4/ 24,. < > Technical Resumé / www.novonetworks.com 2006.04 Works Projects and Technologies 2 / 15 2006.04 Informal,, Project. = Project 91~94 FLC-A TMN OSI, TMN Agent
VZ94-한글매뉴얼
KOREAN / KOREAN VZ9-4 #1 #2 #3 IR #4 #5 #6 #7 ( ) #8 #9 #10 #11 IR ( ) #12 #13 IR ( ) #14 ( ) #15 #16 #17 (#6) #18 HDMI #19 RGB #20 HDMI-1 #21 HDMI-2 #22 #23 #24 USB (WLAN ) #25 USB ( ) #26 USB ( ) #27
Contents I. 칼라스 네트워크 플레이어란 1. Pc-Fi를 넘어서 발전한 차세대 음악 플레이어 ---------------- 4 2. 칼라스 네트워크 플레이어의 장점 3. 시스템 기본 구성 ------------------------ 6 -------------
[ CALLAS Network Player ] Owner s Manual ( 주 ) 금 잔 디 음 향 예.술.을.담.는.스.피.커.과.학 Contents I. 칼라스 네트워크 플레이어란 1. Pc-Fi를 넘어서 발전한 차세대 음악 플레이어 ---------------- 4 2. 칼라스 네트워크 플레이어의 장점 3. 시스템 기본 구성 ------------------------
Microsoft PowerPoint - e7.pptx
교차개발환경 교차개발환경 임베디드시스템플랫폼 커널을올리기전엔 target 시스템에아무프로그램도올라가있지않음 target 시스템은일반적으로메모리용량이적어서 compiler 를포함한프로그램개발환경을올리기가어려움 교차개발환경 target 시스템용프로그램은대개별도의 host 시스템에서개발됨 host와 target에사용되는 processor가다른경우, 컴파일러의실행은
APOGEE Insight_KR_Base_3P11
Technical Specification Sheet Document No. 149-332P25 September, 2010 Insight 3.11 Base Workstation 그림 1. Insight Base 메인메뉴 Insight Base Insight Insight Base, Insight Base Insight Base Insight Windows
PowerPoint Presentation
Data Protection Rapid Recovery x86 DR Agent based Backup - Physical Machine - Virtual Machine - Cluster Agentless Backup - VMware ESXi Deploy Agents - Windows - AD, ESXi Restore Machine - Live Recovery
슬라이드 1
13 장실제타깃제작하기 시작하면서 2 목차 13.1 타깃개발개요 13.2 안드로이드모바일하드웨어플랫폼 13.3 실제타깃개발홖경구축 13.4 실제타깃커널제작 13.5 타깃으로이미지다운로드 13.6 파일시스템구성 13.7 부팅및실행 13.1 타깃개발개요 3 porting 어떻게안드로이드소프트웨어플랫폼을빌드하여포팅하는가? 계층구조의플랫폼을빌딩하는방법? 교차컴파일
Microsoft Word - windows server 2003 수동설치_non pro support_.doc
Windows Server 2003 수동 설치 가이드 INDEX 운영체제 설치 준비과정 1 드라이버를 위한 플로피 디스크 작성 2 드라이버를 위한 USB 메모리 작성 7 운영체제 설치 과정 14 Boot Sequence 변경 14 컨트롤러 드라이버 수동 설치 15 운영체제 설치 17 운영체제 설치 준비 과정 Windows Server 2003 에는 기본적으로
서현수
Introduction to TIZEN SDK UI Builder S-Core 서현수 2015.10.28 CONTENTS TIZEN APP 이란? TIZEN SDK UI Builder 소개 TIZEN APP 개발방법 UI Builder 기능 UI Builder 사용방법 실전, TIZEN APP 개발시작하기 마침 TIZEN APP? TIZEN APP 이란? Mobile,
Microsoft PowerPoint - eSlim SV5-2510 [080116]
Innovation for Total Solution Provider!! eslim SV5-2510 Opteron Server 2008. 03 ESLIM KOREA INC. 1. 제 품 개 요 eslim SV5-2510 Server Quad-Core and Dual-Core Opteron 2000 Series 6 internal HDD bays for SAS
Raspbian 설치 라즈비안 OS (Raspbian OS) 라즈베리파이 3 Model B USB 마우스 USB 키보드 마이크로 SD 카드 마이크로 SD 카드리더기 HDM I 케이블모니터
운영체제실습 Raspbian 설치 2017. 3 표월성 [email protected] cherub.sungkyul.ac.kr 목차 Ⅰ. 설치 1. 라즈비안 (Raspbian 설치 ) 2. 설치후, 설정 설정사항 Raspbian 설치 라즈비안 OS (Raspbian OS) 라즈베리파이 3 Model B USB 마우스 USB 키보드 마이크로 SD 카드 마이크로
Copyright 2012, Oracle and/or its affiliates. All rights reserved.,,,,,,,,,,,,,.,..., U.S. GOVERNMENT END USERS. Oracle programs, including any operat
Sun Server X3-2( Sun Fire X4170 M3) Oracle Solaris : E35482 01 2012 9 Copyright 2012, Oracle and/or its affiliates. All rights reserved.,,,,,,,,,,,,,.,..., U.S. GOVERNMENT END USERS. Oracle programs, including
PowerPoint 프레젠테이션
Install Linux Jo, Heeseung Download Programs On the class web page 2 가상머신 (Virtual Machine) 의소개 지금쓰는 Windows 를그대로사용하면서도여러대의리눅스서버를운영하는효과를내는프로그램 1 대의 PC 에서추가로 3 개의가상머신을구동한화면 3 Virtual Machines Host computer
LCD Display
LCD Display SyncMaster 460DRn, 460DR VCR DVD DTV HDMI DVI to HDMI LAN USB (MDC: Multiple Display Control) PC. PC RS-232C. PC (Serial port) (Serial port) RS-232C.. > > Multiple Display
(Microsoft PowerPoint - AndroG3\306\367\306\303\(ICB\).pptx)
w w w. g b t e c. c o. k r 6 안드로이드 App 적용하기 115 1. 안드로이드개요 모바일 OS 의종류 - 스마트폰 : 스마트폰운영체제탑재 애플의 IOS(iPhone OS) - 아이폰, 아이패드, 아이팟터치 구글의안드로이드 - Nexus, 갤럭시 A, S, 모토로이, 시리우스,... MS 의윈도우모바일 ( 윈도우폰 7) - 옴니아 2,
<C7D1B1B9C1A4BAB8BBEABEF7BFACC7D5C8B82D535720C7C3B7A7C6FB20C7D8B9FD20536F4320C0B6C7D5C0B8B7CE2DB3BBC1F62E687770>
표지 면지와 동일 SW 플랫폼 해법: SoC 융합으로 임채덕, 김선태, 정영준, 김태호, 유현규 목 차 1. 서론 1 2. 플랫폼 현주소 2 2.1. 모바일 OS 엿보기 2 2.2. SW 기업의 최신 동향 4 2.3. SoC 기업의 최신 동향 7 2.4. 시사점 11 3. SW 플랫폼 Innovative Mover 전략 13 3.1. 후발 주자의 고민 13
PowerPoint 프레젠테이션
임베디드리눅스개발환경실습 Jo, Heeseung 타겟보드모니터링동작실습 호스트 PC 에서시리얼포트를통해서타겟보드를모니터링 타겟보드가프로그램을실행하는동안일어나는일을시리얼포트로메시지를출력하면호스트 PC 에서는시리얼포트를통해메시지를수신하여이를화면에출력 minicom 프로그램사용 - minicom 이정상적으로설정이되고, 타겟보드에최소한부트로더가올라간상태라면 minicom
LXR 설치 및 사용법.doc
Installation of LXR (Linux Cross-Reference) for Source Code Reference Code Reference LXR : 2002512( ), : 1/1 1 3 2 LXR 3 21 LXR 3 22 LXR 221 LXR 3 222 LXR 3 3 23 LXR lxrconf 4 24 241 httpdconf 6 242 htaccess
PowerPoint 프레젠테이션
1 Tizen 실습예제 : Remote Key Framework 시스템소프트웨어특론 (2014 년 2 학기 ) Sungkyunkwan University Contents 2 Motivation and Concept Requirements Design Implementation Virtual Input Device Driver 제작 Tizen Service 개발절차
hd1300_k_v1r2_Final_.PDF
Starter's Kit for HelloDevice 1300 Version 11 1 2 1 2 3 31 32 33 34 35 36 4 41 42 43 5 51 52 6 61 62 Appendix A (cross-over) IP 3 Starter's Kit for HelloDevice 1300 1 HelloDevice 1300 Starter's Kit HelloDevice
Special Theme _ 모바일웹과 스마트폰 본 고에서는 모바일웹에서의 단말 API인 W3C DAP (Device API and Policy) 의 표준 개발 현황에 대해서 살펴보고 관 련하여 개발 중인 사례를 통하여 이해를 돕고자 한다. 2. 웹 애플리케이션과 네이
모바일웹 플랫폼과 Device API 표준 이강찬 TTA 유비쿼터스 웹 응용 실무반(WG6052)의장, ETRI 선임연구원 1. 머리말 현재 소개되어 이용되는 모바일 플랫폼은 아이폰, 윈 도 모바일, 안드로이드, 심비안, 모조, 리모, 팜 WebOS, 바다 등이 있으며, 플랫폼별로 버전을 고려하면 그 수 를 열거하기 힘들 정도로 다양하게 이용되고 있다. 이
문서 대제목
Linux OS Backup 교육자료 v1.1 2013. 12. 27. 이스턴네트웍스 기술지원팀전흥수 목차 1. Linux OS Backup & Cloning Layout 2. Solution Install & Configuration 3. Recovery Procedure 4. Reference Site - 1 - 1. Linux OS Backup / Cloning
Copyright 2012, Oracle and/or its affiliates. All rights reserved.,.,,,,,,,,,,,,.,...,. U.S. GOVERNMENT END USERS. Oracle programs, including any oper
Windows Netra Blade X3-2B( Sun Netra X6270 M3 Blade) : E37790 01 2012 9 Copyright 2012, Oracle and/or its affiliates. All rights reserved.,.,,,,,,,,,,,,.,...,. U.S. GOVERNMENT END USERS. Oracle programs,
CL100B_manual_kor_m.0.2.indd
ULTIMATE SAMRT CAR BLACK BOX BLACKSYS CL-100B USER MANUAL 2CH Full HD Car DVR with brilliant image Simultaneous recording of front with Full HD resolution (1920x1080, 25fps) and rearview with HD resolution
CZ-KETI-IOTG200
CZ-KETI-IOTG200 Hardware Manual http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 1 Document
6주차.key
6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running
1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation
1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation Board(EVB B/D) 들과 TCP/IP Protocol로연결되며, 연결된 TCP/IP
2005 2004 2003 2002 2001 2000 Security Surveillance Ubiquitous Infra Internet Infra Telematics Security Surveillance Telematics Internet Infra Solutions Camera Site (NETWORK) Monitoring & Control
인켈(국문)pdf.pdf
M F - 2 5 0 Portable Digital Music Player FM PRESET STEREOMONO FM FM FM FM EQ PC Install Disc MP3/FM Program U S B P C Firmware Upgrade General Repeat Mode FM Band Sleep Time Power Off Time Resume Load
Adobe Flash 취약점 분석 (CVE-2012-0754)
기술문서 14. 08. 13. 작성 GNU C library dynamic linker $ORIGIN expansion Vulnerability Author : E-Mail : 윤지환 [email protected] Abstract 2010 년 Tavis Ormandy 에 의해 발견된 취약점으로써 정확한 명칭은 GNU C library dynamic linker
10X56_NWG_KOR.indd
디지털 프로젝터 X56 네트워크 가이드 이 제품을 구입해 주셔서 감사합니다. 본 설명서는 네트워크 기능 만을 설명하기 위한 것입니다. 본 제품을 올바르게 사 용하려면 이 취급절명저와 본 제품의 다른 취급절명저를 참조하시기 바랍니다. 중요한 주의사항 이 제품을 사용하기 전에 먼저 이 제품에 대한 모든 설명서를 잘 읽어 보십시오. 읽은 뒤에는 나중에 필요할 때
À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp
l Y ( X g, Y g ) r v L v v R L θ X ( X c, Yc) W (a) (b) DC 12V 9A Battery 전원부 DC-DC Converter +12V, -12V DC-DC Converter 5V DC-AC Inverter AC 220V DC-DC Converter 3.3V Motor Driver 80196kc,PWM Main
User Guide
HP Pocket Playlist 사용 설명서 부품 번호: 699916-AD2 제 2 판: 2013 년 1 월, 초판: 2012 년 12 월 Copyright 2012, 2013 Hewlett-Packard Development Company, L.P. Microsoft, Windows 및 Windows Vista 는 Microsoft Corporation
Microsoft PowerPoint - AME_InstallRoutine_ver8.ppt
AMESim Install Routine and License Manager Tel : +82-31-608-0434 Fax : +82-31-608-0439 E-mail :[email protected] http://www.shinho-systems.co.kr Ssangyong IT Twin Tower 702, Sandaewon-dong,
[Brochure] KOR_TunA
LG CNS LG CNS APM (TunA) LG CNS APM (TunA) 어플리케이션의 성능 개선을 위한 직관적이고 심플한 APM 솔루션 APM 이란? Application Performance Management 란? 사용자 관점 그리고 비즈니스 관점에서 실제 서비스되고 있는 어플리케이션의 성능 관리 체계입니다. 이를 위해서는 신속한 장애 지점 파악 /
Code Generation in Rapid
임베디드시스템설계실습 (3) Embedded System Design Real-Time Computing and Communications Lab. Hanyang University 자료복사 USB 파일복사 파일및폴더리스트 PL2303_Prolific_DriverInstaller (Windows) toolchain-s5pc1xx.tar.gz u-boot-1.3.4.tar.gz
소개 TeraStation 을 구입해 주셔서 감사합니다! 이 사용 설명서는 TeraStation 구성 정보를 제공합니다. 제품은 계속 업데이트되므로, 이 설명서의 이미지 및 텍스트는 사용자가 보유 중인 TeraStation 에 표시 된 이미지 및 텍스트와 약간 다를 수
사용 설명서 TeraStation Pro II TS-HTGL/R5 패키지 내용물: 본체 (TeraStation) 이더넷 케이블 전원 케이블 TeraNavigator 설치 CD 사용 설명서 (이 설명서) 제품 보증서 www.buffalotech.com 소개 TeraStation 을 구입해 주셔서 감사합니다! 이 사용 설명서는 TeraStation 구성 정보를
Microsoft Word - Armjtag_문서1.doc
ARM JTAG (wiggler 호환 ) 사용방법 ( IAR EWARM 에서 ARM-JTAG 로 Debugging 하기 ) Test Board : AT91SAM7S256 IAR EWARM : Kickstart for ARM ARM-JTAG : ver 1.0 ( 씨링크테크 ) 1. IAR EWARM (Kickstart for ARM) 설치 2. Macraigor
Microsoft Word - HD-35 메뉴얼_0429_.doc
자주 묻는 질문들...2 제품의 특장점...3 안전을 위한 주의사항...5 사용을 위한 주의사항...5 각 부분의 이름...6 HD-35 조립/분리하기...7 PC와 USB 케이블 연결하기...8 1. 윈도우 98/ME에서 설치과정...9 2. NTFS를 FAT32 포맷방식으로 바꾸기...11 설치 및 연결하기...14 1. 비디오 연결방법...14 2. 오디오
LN_5_Rootfs
프로젝트 2 Root Filesystem 단국대학교 컴퓨터학과 2009 백승재 [email protected] http://embedded.dankook.ac.kr/~baeksj Ramdisk 에대한이해 강의목표 Root filesystem 의구조이해 Root filesystem 제작과정이해 Ramdisk 기반 root filesystem 제작 3 RAMdisk?
Integ
HP Integrity HP Chipset Itanium 2(Processor 9100) HP Integrity HP, Itanium. HP Integrity Blade BL860c HP Integrity Blade BL870c HP Integrity rx2660 HP Integrity rx3600 HP Integrity rx6600 2 HP Integrity
Microsoft PowerPoint - e2.ppt [호환 모드]
임베디드시스템하드웨어구조 2. 임베디드시스템하드웨어 / 프로세서 SRAM/ROM CPU timer interrupt UART GPIO DMA USB I/F LAN ROM Flash SRAM 2 - 마이크로프로세서를사용한시스템 - 마이크로콘트롤러를사용한시스템 microprocessor timer interrupt DMA CPU micro-, SoC timer
Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx
To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse
<4D F736F F F696E74202D20454D43BCB3B0E8B4EBC3A5BBE7B7CA2828C1D629B8B6B7E7C0CEC6F75FBDC5C1D6C8A3292E707074>
제품에대한 EMC 설계 대책사례 마루인포 신주호선임 2009. 5. 29 목차 1. Network Camera System 2. Navigation 2-1. PND (Portable Navigation Device) 2-2. AVN (Audio Video Navigation) 2 1. Network Camera System 1. U-City 주차관리시스템 그림
05Àå
CHAPTER 05 NT,, XP,. NT NTFS, XP. D,,. XP x NT,,, ( x, x ). NT/ /XP,.. PC NT NT. + Guide to Software: Understanding and Installing Windows 2000 and Windows NT + SOFTWARE Guide to Software 3/e SOFTWARE
ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O
Orange for ORACLE V4.0 Installation Guide ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE...1 1....2 1.1...2 1.2...2 1.2.1...2 1.2.2 (Online Upgrade)...11 1.3 ORANGE CONFIGURATION ADMIN...12 1.3.1 Orange Configuration
목차 제 1 장 inexio Touch Driver소개... 3 1.1 소개 및 주요 기능... 3 1.2 제품사양... 4 제 2 장 설치 및 실행... 5 2.1 설치 시 주의사항... 5 2.2 설치 권고 사양... 5 2.3 프로그램 설치... 6 2.4 하드웨
최종 수정일: 2010.01.15 inexio 적외선 터치스크린 사용 설명서 [Notes] 본 매뉴얼의 정보는 예고 없이 변경될 수 있으며 사용된 이미지가 실제와 다를 수 있습니다. 1 목차 제 1 장 inexio Touch Driver소개... 3 1.1 소개 및 주요 기능... 3 1.2 제품사양... 4 제 2 장 설치 및 실행... 5 2.1 설치 시
