본문 바로가기

분류 전체보기

(37)
[Embedded]Initializing an Interrupt Handler interrupt handler는 보통 device driver에 구현이 되어 있다. 그렇다면 이러한 interrupt handler의 등록인 request_irq 함수의 동작은 어떤 시기에 해야 하는 것일까? 두가지의 경우가 있을 것이다. 1. 모듈 init 할 때 2. device open 할 때 모듈 init 할 때 request_irq 한다고 가정해보자. 말 그래도 insmod 를 통하여 kerne에 등록하는 경우로 init 함수가 실행 될 때이다. 모듈 init 하는 것이 바로 디바이스 드라이버를 kernel에 등록하는 것이기 때문에 해당 시기에 interrupt handler도 커널에 등록하는 것이 이상적이라고 생각될 수 있다. 하지만 그렇지 않다. 만약 initialization에 modul..
[Embedded] Interrupt Handling - Top / Bottom Half (Softirqs, Tasklets, Workqueues) Interrupt Handling- Top/Bottom half 커널의 하드웨어 interrupt 처리 방식인 interrupt handling는 종종 긴 시간 처리가 필요한 경우가 있다. 하지만 interrupt handling는 비동기적(asynchronize)으로 실행되기 때문에 다른 interrupt handling를 포함한 다른 중요한 코드를 중단 시키게 되는데, 이 중단을 너무 오래 하면 안되기 때문에 가능한 빠르게 interrupt 처리가 진행 되어야 한다. 또한, interrupt handling 가 처리되는 동안은 모든 interrupt를 disable 하게 만들게 되는데 모든 hw 와 통신할 수 없게 되고, 이는 시스템 반응속도, 성능에 많은 영향을 미치기 때문에 가능한 빠르게 inte..
[Embedded] Interrupt Context interrupt handler 를 실행하는 동안 커널은 interrupt context 상태가 된다. 이와 다르게 process context는 커널 동작 상태 중 하나로 system call 을 실행하거나 kernel thread를 실행할 때와 같이, 프로세스 대신에 커널이 실행되는 상태이다. 따라서 process context에서 current 매크로는 관련 태스크를 가리키고, 커널과 프로세스가 연관되어 있는 상태이다 보니, 휴면 상태가 되거나, 스케줄러를 호출할 수 있다. 반면 interrupt context는 특정 프로세스와 묶여 있지 않기 때문에 current 매크로는 큰 의미가 없을 뿐더러, 뒤에 버티고 있는 프로세스가 없어 interrupt context는 휴면 상태가 될 수 없다. 만약 ..
[Embedded]Install / Free an Interrupt Handler Interrupt Handler는 HW를 관리하는 device driver가 담당한다. 각 장치 별로 driver가 존재하며, interrupt를 사용하는 장치라면 driver에서 interrupt handler를 등록하게 된다. driver는 파일에 정의된 request_irq() 함수를 이용해 interrupt를 활성화 시키고, interrupt handler를 등록한다. linux에서의 interrupt handling 과정은 위 그림과 같다. 1. device driver에서 request_irq 함수를 이용하여 interrupt handler를 kernel에 등록 시킨다. ->insmod 시 등록됨 2. HW에서 IRQ interrupt가 발생하면 해당 번호에 맞는 IRQ interrupt ha..
[Embedded] Android Application Components, Android Intents andorid application components에 대해 알아보자. 크게 4가지 구성요소가 있다. activity, service, broadcast receiver, content provider 가 있다. Activity activity는 화면에 뿌려주는 ui를 구성하는 역할을 한다. 안드로이드 앱은 화면에 UI를 표시하기 위해 최소 하나의 Activity를 가져야 하며, 앱 실행 시 지정된 Activity를 실행하여 사용자에게 UI를 표시하게 된다. 이런 activity는 AppCompactActivity라는 class를 상속받아 함수등을 재정의 하여 구성한다. Service 사용자에게 인터페이스를 제공하지 않고 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소이다. ..
[Embedded] Android Runtime Walkthrough 안드로이드 실행 과정 android architecture에 대해 다시 보면 다음과 같다. Application level, Application Framework level, Android Runtime level, Libraries level, Linux kernel level 로 전체적으로 5개의 level로 나뉘어 있음을 확인할 수 있었다. 그럼 실제로 android 실행은 어떻게 되는 것일지에 대해 알아보자. ANDORID BOOTING PROCESS Runtime Walkthrough(init) 안드로이드가 맨 처음 실행되게 되면 대부분의 Linux 기반 시스템과 같이 1. bootloader가 linux kernel에 load가 되고 2. init process가 시작하게 된다. 3. 해당 init process..
[Embedded] Android Architecture Android architecture Android architecture에 대해서 알아보도록 하자. 안드로이드는 구글에 의해 2007년에 개발된 모바일 os 이다. 위 표는 안드로이드의 역사를 나타낸 표이다. ANDROID SDK 안드로이드 SDK(software development kit) 는 말 그대로 안드로이드 소프트웨어를 개발하기 위한 툴 킷을 의미한다. ANDROID NDK 안드로이드 NDK(Native Development Kit) 란 안드로이드에서 C, C++ 코드를 사용할 수 있게 해주는 일련의 도구 모음이다. 리눅스 system call을 사용할 수 있으며, ndk는 일반적으로 게임이나 물리 시뮬레이션 같은 집약적 연산 intensive operations 의 경우에 사용하면 유용하다..
[Embedded] Cross Development Environment What is Cross Development Environment? 우리가 일반적으로 PC 환경에서 개발하는 경우에는, 키보드, 모니터, 하드디스크 등 여러 주변 장치, 보조기억장치 등이 존재한다. 하지만 임베디드 시스템의 경우는 위에 해당하는 것들의 대부분 없다. 임베디드 시스템의 경우는 특수 목적으로 만들어진 시스템이다 보니 모니터나 키보드가 필요하지 않는 경우가 많다. 그렇기 때문에 임베디드 시스템 자체에서 개발을 하는 것은 거의 불가능하다고 보면 된다. 그럼 임베디드 시스템의 개발은 어떻게 진행되는 것인가? 바로 Cross Development Environment, 교차 개발 환경을 이용하여 개발한다. 교차개발환경이 무엇인지 알아보자. 먼저, PC용 SW 개발의 경우에는 개발환경과 실행환경이 ..