분류 전체보기 779

[ Linux Kernel ] 26. 다중 입출력 - select()

26. 다중 입출력 - select() '다중 입출력'은 프로그램(단일 스레드)에서 여러 개의 파일을 작업하고자 할 때 사용할 수 있는 메커니즘입니다. 사실 '단일 스레드'에서 여러 개의 파일을 작업하고자 할 때 사용할 수 있는 다른 방법으로는 '논블록(Non-Block) 입출력'을 사용하는 방법도 있긴 합니다만, '논블록(Non-Block) 입출력'은 프로그래밍 작업이 까다롭습니다. 이제부터 설명할 'select'는 '블록/비동기적 입출력'에서의 '다중 입출력' 모델입니다. A, B, C, D 4개의 파일을 다루는 작업을 하고싶다고 가정해볼때 다음과 같은 시나리오를 생각해볼 수 있습니다. A 파일에 대한..

[ Linux Kernel ] 25. 파일 입출력 - open(), read(), write()

25. 파일 입출력 유닉스 시스템에서는 거의 모든 것을 파일로 표현하므로 '파일 입출력'은 매우 중요한 부분입니다. 알다시피 파일은 '읽기'나 '쓰기' 전에 반드시 '열기(open)'를 해야합니다. 그리고 커널은 '파일 테이블'이라고 하는 프로세스별로 열린 파일 목록을 관리합니다. 각 프로세스에는 기본적으로 0, 1, 2 값을 가지는 파일 디스크립터가 open되어 있습니다. 0 - 표준 입력(stdin) 1 - 표준 출력(stdout) 2 - 표준 에러(stderr) 위의 3가지 파일 디스크립터를 직접 참조하는대신 C 라이브러리는 #define 매크로 정의를 제공합니다. 따라서, 해당 파일 디스크립터를 사용하고싶다면 아래 정의된 매크로로 참조하는게 좋습니다. #define STDIN_FILENO 0 #d..

[ Linux Kernel ] 24. 커널 프로그래밍에서 쉘 명령을 실행하는 방법

24. 커널 프로그래밍에서 쉘 명령을 실행하는 방법 유저레벨에서 커널에 있는 API 를 동작시키는 인터페이스는 시스템 콜로써 항상 사용되는 것이다. 하지만 커널 레벨에서 사용자 공간의 어플리케이션을 실행하는 것은 그다지 알려져 있지 않다. 하지만 가만히 생각해 보면 핫플러그인과 같이 USB 가 꼽히면 자동으로 마운트되는 것을 우리는 알고 있다. 과연 어플리케이션에서 주기적으로 USB 꼽힌 것을 체크해서 마운트 하는 것일까? 그렇지 않다. 커널 레벨에서 USB가 인식되면 종류에 따라 마운트를 시켜주는 함수가 실행되게 된다. 혹은 모듈이 필요하면 모듈까지도 로딩을 시켜준다. 이런 인터페이스가 가능한 커널 함수를 소개한다. 그 인터페이스의 이름은 usermodehelper API 이다. 그 API를 한번 살펴..

[ VoIP ] 07. LINUX Audio Programming

LINUX Audio Programming OSS(Open Sound System) 리눅스 커널에서는 기본적으로 사운드 디바이스 드라이버를 제공한다. 하지만, 리눅스 커널에 기본적으로 포함되어 있는 드라이버는 수가 적어 다양한 사운드 디바이스를 사용할 수 없다. 따라서, 몇가지의 대안이 존재한다. 리눅스의 커널에 기본적으로 포함된 사운드 디바이스 드라이버를 OSS/Free라고 한다. OSS/Free는 4Front Technologies에서 개발한 OSS를 따르는 공개 드라이버로 4Front Technologies의 OSS 개발자가 대부분을 개발하였다. 그러나 다양한 드라이버가 OSS/Free에는 존재하지 않고, 그 외의 많은 드라이버는 4Front Technologies에 의해 상용으로 개발된다. 따라서..

[ DB ] 02. SQLite3 with C/C++ (기본편)

SQLite3 with C/C++ 이 포스트는 Zetcode.com의 글 "SQLite C Tutorial"을 번역한 것이다. http://zetcode.com/db/sqlitec/ SQLite C 튜토리얼 SQLite 는 관계형 데이터베이스 엔진입니다. 개발자는 SQLite 를 자급자족하는, 서버도 필요 없고, 설정도 필요없는 트랜잭셔널 SQL 데이터베이스 엔진이라고 표현합니다. 지금은 전세계에 수십 수백만 개가 사용되고 있을 정도로 유명하죠. SQLite 는 Solaris 10, Mac OS, 안드로이드, 아이폰에도 사용됩니다. Qt4 라이브러리도 파이썬, PHP 와 함께 SQLite 를 내부적으로 지원하죠. 또 파이어폭스, 구글 크롬 등의 아주 유명한 애플리케이션들도 내부적으로 SQLite 를 사용..

[ Linux Kernel ] 23. Platform Device & Driver

23. Platform Device & Driver 플랫폼디바이스는 하드웨어에 내장되어 있기 때문에 hot-pluggable이 아니다. 이 장치를 위한 드라이버는 장치의 존재를 확인할 필요가 없고 그냥 작동시키고(전원을 켜고) 장치가 작동하게 할 수 있도록 필요한 것을 작업한다. 만약 장치가 발견되지 않으면 드라이버는 가볍게 무시된다. 플랫폼 디바이스는 리눅스 커널이 USB나 PCI와 같은 버스를 통해 동적으로 감지할 수 없는 SoC(System-on-Chip)에 내장된 시스템 장치이다. 커널은 플롯폼 디바이스 메커니즘을 제공함으로써 실제로 존재하는 하드웨어에 대해 알 수 있다. 이 글에서는 플랫폼 디바이스의 커널 인터페이스에 대해 설명하며 디바이스 트리와 통합을 하기 위한 내용을 설명하겠다. Platf..

[ Network ] 12. NAT(Network Address Translation)란?

NAT Network Address Translation NAT(네트워크 주소 변환)은 IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술이다. 패킷에 변화가 생기기 때문에 IP나 TCP/UDP의 체크섬(checksum)도 다시 계산되어 재기록해야 한다. 그렇기 때문에 네트워크의 성능에 영향을 줄 수밖에 없다! NAT를 쓰는 이유는 여러 대의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위한 경우가 대부분이다. 예를 들어 인터넷 회선을 하나 개통하고 인터넷 공유기를 달아서 여러 PC를 연결하여 사용 하는데, 이것이 가능한 이유가 인터넷 공유기에 NAT기능이 탑재되어 있기 때문이다. 중요한 자료가 들어있는 서..

[ Network ] 11. Proxy Server란?

Proxy Server 네트워크 프로그램의 일종으로서 클라이언트 기준으로 방화벽을 넘어가서 서버와 클라이언트 간에 인터넷으로 직접 접속을 허용하여 특정 서비스를 중계해주는 역할을 하는 구조물이다. 프록시 서버는 서버에 있는 소켓을 열고, 그 소켓을 통해 인터넷으로의 통신을 허용한다. 예를 들어, 사용자의 컴퓨터가 보호받는 네트워크의 안쪽에 있고, 웹 브라우저를 사용하여 웹 검색을 하고 싶다면 방화벽 상에서 Proxy Server를 설정해야 한다. 클라이언트는 필요한 서비스를 프록시 서버에 요청하고, 서버는 클라이언트의 요청에 따라 외부 네트워크와 연결해주는 서비스 중계 역할을 한다. 클라이언트(자신의 컴퓨터)와 서버(목적지) 사이 데이터를 중계하는 중간 서버 역할!! 보통 어떤 서버에 우회 접속하거나 내..

[ Linux Kernel ] 22. 커널에 모듈 추가하기

22. 커널에 모듈 추가하기 Kconfig => Kernel에 새로운 장치를 추가하고, 해당하는 모듈을 추가하기 위해서는 먼저 Kconfig라는 파일을 알아야한다~ Kconfig를 정리하자면 Tree구주로 된 Configuration option들의 집합으로 자신만의 종속성을 가지고 있음 Child Entry는 Parent Entry가 선택되어 볼 수 있게 되었을 때만 보임 Menu entry들은 각각의 config option을 정의하고 있음. 각각의 config option들은 자신만의 type을 가지며, tristate, bool type이 있음 tristate : bool : 이 type에 따라 어떤 선택을 하느냐에 따라 Kernel에 해당 모듈을 포함하는 여부가 결정된다.( 보통 make men..

[ Embedded ] 22. 임베디드 리눅스 구성요소(BSP)

6. 임베디드 리눅스 구성요소(BSP) - BSP란? BSP(Board Support Package)란 말은 본래 RTOS에서 나온 용어로, "보드를 떠받치는(지원하는)" 소프트웨어 패키지란 뜻으로, "보드(하드웨어)를 동작 시키기 위해 필요한 (임베디드) 소프트웨어 묶음" 이다. 위 그림은 Firmware와 RTOS로 구동되는 시스템과 Non-RTOS로 구동되는 시스템의 차이를 보여주고 있다. WindRiver 사의 VxWorks와 같은 일부 상용 RTOS를 제외하고 대부분의 RTOS와 자체 Firmware에는 Non-RTOS와 같은 파일 시스템(File System)이 없다. 즉 소스들이 아무리 많다 하더라도 결국 컴파일이 끝나면 최종적으로 (CPU에 종속적인) 바이널 실행 코드 하나만 생성된다. 따..

[ Embedded ] 21. 임베디드 개발환경(Toolchain, Compile...)

5. 임베디드 개발환경 Tool - Chain ? 리눅스에는 “gcc” 라는 C 컴파일러가 있다. 리눅스에서 gcc 컴파일러로 컴파일할 때 별도의 출력 파일 이름을 지정하지 않으면 a.out이라는 이름으로 생성된다. 생성된 파일은 “실행 가능한 ELF 파일” 타입으로 되어 있다. 즉, UNIX나 Linux에서 gcc로 컴파일하면 무조건 ELF 파일이 생성된다. 컴파일 과정(Compile) 텍스트로 되어 있는 소스 코드 파일을 이진 바이너리(Binary) 코드로 변환하는 과정. 가장 먼저 실제 컴파일을 진행하기 전에 소스 코드 상에 "#"(전처리기, Preprocessor)으로 처리되어 있는 부분들을 먼저 처리한다. 이후에 처리가 끝나면 C 문법 검사를 하게 된다. 오류가 없다면 이진 바이너리 코드로 변환..

[ Embedded ] 20. 임베디드 시스템의 개요와 이해

4. 임베디드 시스템의 이해 - 임베디드 시스템 개요 1. 임베디드 시스템의 의미 임베디드 시스템은 특정 목적을 지닌 시스템이다. PC는 특정 목적이 아닌 범용 목적을 갖는 시스템이다. 예를 들어 PC는 프로그램 개발뿐 아니라 그래픽 작업도 할 수 있고, 게임, 멀티미디어 기능 등 범용의 기능을 제공한다. 하지만 임베디드 시스템인 핸드폰은 통신기능에 특화하여 개발되었고, 게임기도 게임기능에 특화하여 개발된 시스템이다. 임베디드 시스템의 구성은 정해진 기능에 필요한 하드웨어와 소프트웨어로 이루어진다. 2. 임베디드 시스템의 예 가전제품, 유비쿼터스 시스템, 휴대용 정보기기, 의료기기, 공장 자동화 시스템, 비행기, 우주선, 자동차내 정보기기 3. 임베디드 시스템의 특징 기능이 제한적이다 특정 기능에 특화된..

[ Embedded ] 19. 임베디드 OS(운영체제)

3. 운영체제 Non-RTOS 같은 자원에 여러 개의 태스크가 동시에 접근해야 할 경우 사용자 응용 프로그램은 자원에 직접 접근할 수 없다. 사용자 응용 프로그램이 OS를 통해 자원에 접근하는 과정 디바이스 드라이버(Device Driver) 등록: 실제 (하드웨어) 자원을 제어할 디바이스 드라이버가 미리 OS에 등록되어 있어야 한다. 사용자 응용 프로그램 자원 요청: 사용자 응용 프로그램은 OS에게 자원에 대한 접근 권한 요청 해당 디바이스 드라이버 검색: 요청을 받은 OS는 해당 자원을 실제로 제어할 디바이스 드라이버가 자신(OS)에게 등록되어 있는지 검색. 없으면 오류 메세지, 있으면 실행 디바이스 드라이버 자원 제어: 실제 하드웨어 지원을 제어하고 결과를 전달. RTOS 이든 Non-RTOS이든 ..

[ Embedded ] 18. 마이크로 프로세서란?

임베디드 처음 접할 때 MCU가 뭔지 MPU가 뭔지 참 헷갈리는 분들이 많을 겁니다. 이번 챕터에서 확실히 익혀두고 넘어갑시다. 2. 마이크로 프로세서 2.1 MPU vs MCU 마이크로프로세서(CPU) CPU = CPU Core(CPU Architecture) + CPU Peripherals(Controllers) ARM9 프로세서 = ARM9 Core + USB,Ethernet MAC, UART, ADC, … CPU Core CPU Core는 8, 16, 32비트 프로세서로 구분, ARM9 Core는 32비트 리눅스(Linux)구동 가능 CPU Core가 하는 일은 소프트웨어를 실행시킨다. 연산 처리 담당 CPU Peripheral 처리된 연산 결과를 CPU 주변 하드웨어를 제어하는 일 CPU Cor..

[ Embedded ] 17. 임베디드 플랫폼이란?

임베디드 기초 개념을 지금 올리긴 좀 늦은감이 있지만,, 중요한 개념이고 꼭 확실히 짚고 넘어가야 하는 부분 같아서 처음 부터 다시 올리겠습니다 ^^ 1. 임베디드 플랫폼이란? 1.1 임베디드 시스템의 특징 임베디드 시스템의 정의 특정 목적을 수행하기 위해 최적화된 시스템 특정한 제품이나 솔루션에서 주어진 작업을 수행할 수 있도록 추가로 탑재되는 솔루션이나 시스템 핵심 키워드: 특정 목적, 최적화(Optimization), 시스템 확장(Upgrade) 불가능 임베디드 시스템의 반대말이 범용 시스템(General Purpose System) 최적화에 대한 기준은 비용(Cost) 1.2 임베디드 플랫폼 임베디드 플랫폼: 비용 중심의 최적화된 하드웨어와 소프트웨어의 결합 임베디드 개발의 첫 단추는 마이크로 프..