CS/[Embedded]Embedded System Software (11) 썸네일형 리스트형 [Embedded] /proc Interface procfs 는 커널 메모리 상에 있는 가상 파일 시스템으로 보통 /proc 위치에 mount 되어 있다. hw interrupt 가 발생하게 되면 device가 작동하고 있는지 아닌지를 check 하기 위해 internel counter가 증가하게 되는데 시스템의 interrupt 와 관련된 통계 정보를 저장하는 /proc/interrupts 파일이 있는데 해당 파일에서 확인할 수 있다. 구체적인 내용은 다음과 같다. 첫 번째 열은 interrupt # 번호이다. 현재 이 시스템은 0,2,8,10,11,12번으로 interrupt가 있는 것이다. 핸들러가 설치되지 않는 경우에는 표시되지 않는다. 두번째 열 부터는 CPU 개수만큼 표시되고 아래의 숫자들은 interrupt 발생 힛수를 의미한다. 네 번째.. [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 의 경우에 사용하면 유용하다.. 이전 1 2 다음