GoogleTV Update Procedure

Size: px
Start display at page:

Download "GoogleTV Update Procedure"

Transcription

1 Android Device Driver Hacks : platform driver, kernel thread, work queue, tasklet, wakelock chunghan.yi@gmail.com, slowboot

2 Revision 작성자비고 0.1 이충한 최초작성 11/11/ 이충한 11/15/ 이충한 11/16/ 이충한 11/17/ 이충한 11/28/2011

3 목차 1. Platform Device & Driver 2. Task & Scheduling 3. Bottom Halves and Deferring Work Tasklet, Softirq, Work Queue, Kernel thread, Threaded Interrupt 4. Timer 5. Wakelock 6. Synchronization 7. Notifier 8. Send signal from kernel to userspace 9. kobjects & sysfs 10. Example Drivers bluetooth sleep mode driver SDIO driver Appendix TODO References

4 0. 이문서에서다루고자하는내용 1) Platform driver 2) (hard/threaded)interrupt handler, tasklet, work queue, kernel thread, timer 3) Wakelock, synchronization & wait queue issue 4) Kernel panic/oops debug 평이하고일반적인내용은빼고 ( 이건 device driver book 을참조하시길 ), Qualcomm Device Driver 에서자주사용되는방식위주로기술 단순코드나열보다는그림을통해분석하고함!!! (*) 본문서는 Gingerbread 2.3.4(linux kernel ) 를기준으로작성하였으나, 일부내용은 kernel version 과정확히일치하지않을수있음. (*) 본문서에기술되어있는 API 혹은 data structure 내용중에는오탈자가포함되어있을수있으며, 경우에따라서는의도적으로생략한부분도있으니, 정확한정보를위해서는관련헤더파일을참조해주시기바람.

5 1. Platform Device & Driver(1) - 개념 1) Embedded system 의시스템의경우, bus 를통해 device 를연결하지않는경우가있음. bus 는확장성 (enumeration), hot-plugging, unique identifier 를허용함에도불구하고... 2) platform driver/platform device infrastructure 를사용하여이를해결할수있음. platform device 란, 별도의 bus 를거치지않고, CPU 에직접연결되는장치를일컬음. bus CPU bus Platform Device 1 Platform Device 2 Platform Device 3

6 1. Platform Device & Driver(1) - 개념 - platform_device 정의및초기화 - resource 정의 (arch/arm/mach-msm/board- XXXX.c 파일에위치함 ) < 예 bluetooth sleep device> struct platform_device my_bluesleep_device = {.name = bluesleep,.id = 0,.num_resources = ARRAY_SIZE(bluesleep_resources),.resource = bluesleep_resources, }; - platform_driver 정의및초기화 - probe/remove.name 필드 ( bluesleep ) 로상호연결 (drivers/xxxx/xxxx.c 등에위치함 ) struct platform_driver bluesleep_driver = {.remove = bluesleep_remove,.driver = {.name = bluesleep,.owner = THIS_MODULE, }, };

7 1. Platform Device & Driver(2) platform driver (*) drivers/serial/imx.c file 에있는 imx serial port driver 를예로써소개하고자함. 이드라이버는 platform_driver structure 를초기화함. (*) init/cleanup 시, register/unregister 하기

8 1. Platform Device & Driver(3) platform_device (*) 플랫폼디바이스는동적으로감지 (detection) 가될수없으므로, static 하게지정해주어야함. static 하게지정하는방식은 chip 마다다를수있는데, ARM 의경우는 board specific code (arch/arm/mach-imx/mx1ads.c) 에서객체화및초기화 (instantiation) 를진행하게됨. (*) Platform 디바이스와 Platform 드라이버를 matching 시키기위해서는 name( 아래의경우는 "imx-uart") 을이용함.

9 1. Platform Device & Driver(4) - platform_device( 초기화 ) (*) platform device 는아래 list 에추가되어야함. (*) platform_add_devices() 함수를통해서실제로시스템에추가됨.

10 1. Platform Device & Driver(5) - platform_device(resource) (*) 특정드라이버가관리하는각장치 (device) 는서로다른 H/W 리소스를사용하게됨. I/O 레지스터주소, DMA 채널, IRQ line 등이서로상이함. (*) 이러한정보는 struct resource data structure 를사용하여표현되며, 이들 resource 배열은 platform device 정의부분과결합되어있음. (*) platform driver 내에서 platform_device 정보 (pointer) 를이용하여 resource 를얻어오기위해서는 platform_get_resource_byname( ) 함수가사용될수있음.

11 1. Platform Device & Driver(6) - platform_device(device specific data) (*) 앞서설명한 resource data structure 외에도, 드라이버에따라서는자신만의환경혹은데이터 (configuration) 을원할수있음. 이는 struct platform_device 내의 platform_data 를사용하여지정가능함. (*) platfor_data 는 void * pointer 로되어있으므로, 드라이버에임의의형식의데이타전달이가능함. (*) imx 드라이버의경우는 struct imxuart platform data 가 platform_data 로사용되고있음.

12 1. Platform Device & Driver(7) platform driver(probe, remove) (*) 보통의 probe 함수처럼, 인자로 platform_device 에의 pointer 를넘겨받으며, 관련 resource 를찾기위해다른 utility 함수를사용하고, 상위 layer 로해당디바이스를등록함. 한편별도의그림으로표현하지는않았으나, probe 의반대개념으로드라이버제거시에는 remove 함수가사용됨.

13 다음장으로넘어가기전에 <work 정의 > 1) task 2) some function routines : interrupt handler, softirq, tasklet, work queue, timer function (*) 앞으로설명할 task/scheduling, top/bottom halves, timer routine 등은모두아래와같은형태로일반화시켜생각해볼수있을듯하다. 너무일반화시켰나 ^^ (*) 한가지재밌는것은이러한구조는 kernel 내에서뿐만아니라, Android UI 내부 Message 전달구조및 media framework 의핵심인 stagefright event 전달구조에서도유사점을찾을수있다는것이다 ^^. < 실행요청 > 1) schedule 2) Interrupt 3) it s own schedule func < 처리루틴 > w/, w/o queue 1) runqueue, waitqueue 2) work queue 3) irq queue(interrupt) 4) tasklet queue 5) Timer queue 1) scheduler 2) interrupt handling, tasklet processing, timer processing, 3) worker thread, Thread for threaded Interrupt handler

14 2. Task & Scheduling(1) 1) add_wait_queue 는 task 를 wait queue 에추가하고, task 의상태를 TASK_INTERRUPTIBLE 로변경시킴. 2) 이어호출되는 schedule() 함수는 task 를 runqueue 에서제거해줌. TASK_RUNNING current task_struct task_struct task_struct thread_info task_struct task_struct task_struct thread_info TASK_INTERRUPTIBLE <run queue> <wait queue> 1) Task 가기다리던 event 가발생하면, try_to_wake_up() 함수는 task 의상태를 TASK_RUNNING 으로변경시키고, activate_taks() 함수를호출하여 task 를 runqueue 에추가시킴. 2) remove_wait_queue 는 task 를 wait queue 에서제거함. (*) task 관련 queue 로는 wait queue 와 run queue 가있으며, run queue 에등록된 task 는실행되고, wait queue 에등록된 task 는특정조건이성립될때까지기다리게된다. (*) 위에서언급된특정함수는버전에따라차이가있을수있음. 단, 전체적인개념은동일함.

15 2. Task & Scheduling(2) (*) task, wait queue, run queue 간의관계를다른각도에서보여주는그림으로, wake_up 함수가호출되면, 대기중이던해당 task 가 run queue 로이동하여 CPU 를할당받게된다 (Scheduler 가그역할을담당함 ). wake_up CPU current wait queue wait queue wait queue 프로세스 task_struct 프로세스 task_struct 프로세스 task_struct run queue 프로세스 task_struct

16 2. Task & Scheduling(3) - schedule 함수 (*) schedule(), waitqueue, runqueue 등의개념을정확히이해하면앞으로설명하게될 bottom half & deferring work 관련코드를이해하는데도많은도움이될수있겠다 ^^ schedule( ) : runqueue 에서 process(task) 를하나꺼내어, 그것을 CPU 에게할당해주는것을의미 (scheduler 가작업해줌 ). 여러 kernel routine 에의해서직 / 간접적으로호출됨. < 직접호출방법요약 > 1) Insert current in the proper wait queue. current process(task) 를 wait queue 에넣어둠. 2) Changes the state of current either to TASK_INTERRUPTIBLE or to TASK_UNINTERRUPTIBLE. current process 의상태를 TASK_INTERRUPTIBL 혹은 TASK_UNINTERRUPTIBLE 로지정함. 3) Invokes schedule( ). schedule 함수를호출함. 즉, 다른 process(task) 에게 CPU 를사용할기회를줌. 4) Checks if the resource if available; if not, goes to step 2. current process 가사용할 resource 가사용가능한지체크하여, 없으면 2 로 jump 하여대기함. 5) Once the resource is available, removes current from the wait queue. current process 가사용할 resource 가사용가능하면, current process 를 wait queue 에서빼냄 (runqueue 로이동함 ).

17 2. Task & Scheduling(4) - sleeping & waking up /* 아래코드에서 q 는 wait queue 임 */ (*) 아래내용은이전 page 의내용을 Sleeping & Waking up 관점에서다시정리한것임. DEFINE_WAIT(wait); 매크로를이용하여 wait queue entry 를하나생성함. add_wait_queue(q, &wait); 자신을 wait queue 에넣는다. Wait queue 는깨어날조건이발생할때, 해당 process 를깨운다. while (!condition) { /* condition is the event that we are waiting for */ prepare_to_wait(&q, &wait, TASK_INTERRUPTIBLE); process 상태를 TASK_INTERRUPTIBLE 로바꾼다. if (signal_pending(current) /* handle signal */ wakeup signal 이도착하면, process 는깨어날수있는상태가된다. 여기서 signal 을처리하고, while loop 을빠져나오게됨. schedule(); wakeup 할조건이성립되지않으면, 해당 process 는여전히 sleep 한다. ( 즉, 다른 process 가 CPU 를사용할수있도록 schedule 함수를호출 ) } finish_wait(&q, &wait); 깨어나기위해자신을 wait queue 에서제거한다.

18 3. Bottom Halves and Deferring Work - 개념 0. Interrupt Handler 를 top half 라고하며, 지연처리 (deferring work) 가가능한루틴을 bottom half 라고함. 1. (bottom half 중에서도 ) 해당작업이 sleep 가능하거나 sleep 이필요할경우 : work queue 사용 process context 에서실행 2. 1 의조건에해당하지않으며빠른처리가필수적인경우 : tasklet 사용 interrupt context 에서실행 Softirq 도 tasklet 과동일한구조이나, 사용되는내용이정적으로정해져있음. 따라서 programming 시에는동적인등록이가능한 tasklet 이사용된다고이해하면될듯 ^^ 3. tasklet 과 softirq 의관계와마찬가지로, work queue 는 kernel thread 를사용하여구현되어있음. 4. Threaded interrupt handler 를사용하면, thread 기반의 interrupt handling 도가능하다. CPU Interrupt handler(top half) Device interrupt I S R Tasklet( 지연가능, sleep 불가능 ) X Work Queue( 지연가능, sleep 가능 ) kernel thread 와연계 (*) 단, request_threaded_irq() 를사용하면가능함.

19 3. Bottom Halves and Deferring Work - 개념 Threaded interrupt handler Generic Kernel Thread Work Queue Tasklet & softirq (*) 위의화살표가특별한의미를부여하는것은아님. 다만, deferring work 관련하여대략적으로위와같이발전 ( 진전 ) 하고있는것으로보이며, 따라서본문서에서도위의순서를따라설명을진행하고자함.

20 3. Bottom Halves and Deferring Work interrupt & process context <interrupt context(=atomic context) 의제약사항 > (*) user space 로의접근이불가능하다. Process context 가없으므로, 특정 process 와결합된 user space 로접근할방법이없다 ( 예 : copy_to_user(), copy_from_user() 등사용불가 ) (*) current 포인터 ( 현재 running 중인 task pointer) 는 atomic mode 에서는의미가없으며, 관련코드가 interrupt 걸린 process 와연결되지않았으므로, 사용될수없다 (current pointer 에대한사용불가 ). (*) sleeping 이불가하며, scheduling 도할수없다. Atomic code 는 schedule() 함수를 call 해서는안되며, wait_event 나 sleep 으로갈수있는어떠한형태의함수를호출해서도안된다. 예를들어, kmalloc(, GFP_KERNEL) 을호출해서는안된다 (GFP_ATOMIC 을사용해야함 ). Semaphone 도사용할수없다. (*) 위의내용은앞으로설명할 interrupt handler 와 tasklet 에모두적용되는내용임. (*) 반대로, work queue 는 process context 에서동작하므로위에서제약한사항을모두사용할수있음 ^^.

21 3. Bottom Halves and Deferring Work - Interrupt Handler(top half) (*) Bottom half 를설명하기에앞서, top half(interrupt handler) 를먼저언급할필요가있어, 이곳에정리하였음. int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev); Interrupt handler 등록및실행요청 < 두번째 argument handler> typedef irqreturn_t (*irq_handler_t)(int, void *); (*) /proc/interrupts 에서인터럽트상태를확인할수있음! Interrupt handler H/W interrupt 가발생할때마다호출됨 synchronize_irq() free_irq 를호출하기전에호출하는함수로, 현재처리중인 interrupt handler 가동작을완료하기를기다려줌. free_irq() 인터럽트 handler 등록해제함수 disable_irq() 해당 IRQ 라인에대한 interrupt 리포팅을못하도록함. disable_irq_nosync() Interrupt handler 가처리를끝내도록기다리지않고바로 return 함 enable_irq() 해당 IRQ 라인에대한 interrupt 리포팅을하도록함. *) 인터럽트처리중에또다른인터럽트가들어올수있으니, 최대한빠른처리가가능한코드로구성하게됨. *) 이부분을 tasklet 코드로도채울수있음!

22 3. Bottom Halves and Deferring Work - Interrupt Handler(top half) <Interrupt handler 사용예 >

23 Threaded Interrupt handler 는 kernel thread 다음에설명함. See page 39.

24 3. Bottom Halves and Deferring Work - Tasklet tasklet list (*) tasklet 과 softirq 의동작원리는동일함. 다만, softirq 는 compile-time 에이미내용 (action) 이정해져있으며, tasklet 은 dynamic 하게등록할수있는형태임. (*) tasklet 은동시에하나씩만실행됨 (count 와 state 값을활용 ) 이는 multi-processor 환경에서도동일하게적용됨. (*) tasklet 은 task 개념과는전혀무관하며, 또한 work queue 와는달리 Kernel thread 를필요로하지않음 ( 그만큼간단한작업을처리한다고보아야할듯 ^^). my_tasklet my data my_tasklet_handler { } tasklet_schedule(&my_tasklet) 이것이호출되면 tasklet handler 실행됨 reference count, state tasklet_init(&my_tasklet, my_tasklet_handler) or DECLARE_TASKLET(my_tasklet, my_tasklet_handler, my_data) 초기화 (*) tasklet_enable(&my_tasklet) disable 된 tasklet 를 enable 시킬때사용 (*) tasklet_disalbe(&my_tasklet) enable 된 tasklet 를 disable 시킬때사용 (*) tasklet_kill( ) tasklet 를 pending queue 에서제거할때사용 my_tasklet_handler(my_data) will be run! 얘는빠르게처리되는코드이어야함!

25 3. Bottom Halves and Deferring Work - Tasklet <Tasklet scheduling 절차 > 1. Tasklet 의상태가 TASKLET_STATE_SCHED 인지확인한다. 만일그렇다면, tasklet 이이미구동하도록 schedule 되어있으므로, 아래단계로내려갈필요없이즉시 return 한다. 2. 그렇지않다면, tasklet_schedule( ) 함수를호출한다. 3. Interrupt system 의상태를저장하고, local interrupt 를 disable 시킨다. 이렇게함으로써, tasklet_schedule( ) 함수가 tasklet 를조작할때, 다른것들과엉키지않게된다. 4. Tasklet 을 tasklet_vec(regular tasklet 용 ) 이나 tasklet_hi_vec(high-priority tasklet 용 ) linked list 에추가한다. 5. TASKLET_SOFTIRQ 혹은 HI_SOFTIRQ softirq 를발생 (raise) 시키면, 잠시후 do_softirq( ) 함수에서이 tasklet 을실행하게된다. do_softirq( ) 는마지막 interrupt가 return할때실행하게된다. do_softirq( ) 함수내에서는 tasklet processing의핵심이라할수있는 tasklet_action( ) 및 tasklet_hi_action() handler를실행하게된다. 이과정을다음페이지에상세하게정리 6. Interrupt 를이전상태로복구하고, return 한다.

26 3. Bottom Halves and Deferring Work - Tasklet <Tasklet handler 수행절차 > 1. Local interrupt delivery 를 disable 시킨후, 해당 processor 에대한 tasklet_vec 혹은 tasklet_hi_vec 리스트정보를구해온다. 이후, list 를 clear(null 로셋팅 ) 시킨후, 다시 local interupt delivery 를 enable 시킨다 에서얻은 list 를구성하는각각의 (pending) tasklet 에대해아래의내용을반복한다. 3. CPU 가두개이상인 system 이라면, tasklet 이다른 processor 상에서동작중인지체크한다 (TASKLET_STATE_RUN 플래그사용 ). 만일그렇다면, tasklet 을실행하지않고, 다음번 tasklet 을검사한다. 4. Tasklet 이실행되지않고있으면, TASKLET_STATE_RUN 플래그값을설정한다. 그래야다른 procssor 가이 tasklet 을실행하지못하게된다. 5. Tasklet 이 disable 되어있지않은지를확인하기위해 zero count 값을검사한다. 만일 tasklet 이 disable 되어있으면, 다음 tasklet 으로넘어간다. 6. 이제 tasklet 을실행할모든준비가되었으므로, tasklet handler 를실행한다. 7. Tasklet 을실행한후에는 TASKLET_STATE_RUN 플래그를 clear 한다. 8. 이상의과정을모든 pending tasklet 에대해반복한다.

27 3. Bottom Halves and Deferring Work - Tasklet (*) 아래 code 는 softirq 및 tasklet 을실제로처리해주는 ksoftirqd kernel thread 의메인루틴을정리한것임. (*) softirq or tasklet 이발생할때마다실행하게되면, kernel 수행이바빠지므로, user space process 가처리되지못하는문제 (starvation) 가있을수있으며, interrupt return 시마다실행하게되면, softirq(tasklet) 처리에문제 (starvation) 가발생할수있어, 해결책으로써, ksoftirqd kernel thread 를두어처리하게됨. (*) ksoftirqd 는평상시에는낮은우선순위로동작하므로, softirq/tasklet 요청이많을지라도, userspace 가 starvation 상태로빠지는것을방지하며, system 이 idle 상태인경우에는 kernel thread 가즉시 schedule 되므로, softirq/tasklet 을빠르게처리할수있게된다. ksoftirqd 의메인루틴 for (;;) { if (!softirq_pending(cpu)) schedule( ); set_current_state(task_running); while (softirq_pending(cpu)) { do_softirq( ); if (need_resched( )) schedule( ); } set_current_state(task_interruptible); }

28 3. Bottom Halves and Deferring Work - Tasklet <data structure 일부발췌 include/linux/interrupt.h>

29 3. Bottom Halves and Deferring Work - Tasklet <tasklet 사용예 >

30 3. Bottom Halves and Deferring Work - Work Queue(default) <my work work_struct> data func (work handler) (*) work queue 라고하면, work, queue, worker thread 의세가지요소를통칭함. (*) work queue 를위해서는반드시 worker thread 가필요함. (*) 기정의된 worker thread(events/0) 를사용하는방식과새로운 worker thread 및 queue 를만드는두가지방법이존재함. (*) work queue 에서사용하는 work 는 sleep 이가능하다. (*) worker thread 관련보다자세한사항은 kernel/workqueue.c 파일참조 <worker thread> Set task state to TASK_INTERRUPTIBLE schedule_work or schedule_delayed_work < 기정의된 work thread 를사용하는경우 > work queue schedule_work( ) 엔트리를 work queue 에추가함 schedule_delayed_work( ) 엔트리를 work queue 에추가하고, 처리를지연시킴 flush_scheduled_work( ) work queue 의모든엔트리를처리 ( 비움 ). 모든 entry 가실행됨. Entry 를취소하는것이아님 ( 주의 ). 또한 schedule_delayed_work 은 flush 시키지못함. cancel_delayed_work( ) delayed work( 엔트리 ) 를취소함. Add itself(thread) to wait queue ( sleep) If work list is empty then schedule Else set task state to TASK_RUNNING Remove itself from wait queue ( wakeup) Run work queue 여기서 func 함수호출됨 loop

31 3. Bottom Halves and Deferring Work - Work Queue( 사용자정의 ) < 사용자정의 work queue 관련 API 모음 > struct workqueue_struct *create_workqueue(const char *name); 사용자정의워크큐및 woker thread 를생성시켜줌. queue_work( ) my work queue int queue_work(struct workqueue_struct *wq, struct work_struct *work); 사용자정의 work 을사용자정의 work queue 에넣고, schedule 요청함. my work void flush_workqueue(struct workqueue_struct *wq); 사용자정의 work queue 에있는모든 work 을처리하여, queue 를비우도록요청 my thread my work Delayed work 관련 API 는다음페이지참조 (create_workqueue 에인수로넘겨준 name 값이 thread name 이됨 ps 명령으로확인가능 ) (*) 사용자정의 work queue 를생성하기위해서는 create_workqueue() 를호출하여야하며, queue_work() 함수를사용하여 work 을 queue 에추가해주어야한다. (*) 보통은기정의된 work queue 를많이활용하나, 이는시스템의많은 driver 들이공동으로사용하고있으므로, 경우에따라서는원하는결과 ( 성능 ) 를얻지못할수도있다. 따라서이러한경우에는자신만의독자적인 work queue 를만드는것도고려해보아야한다. (*) 보다자세한사항은 include/linux/workqueue.h 파일참조

32 3. Bottom Halves and Deferring Work - Work Queue( 사용자정의 ) <Delayed work queue 관련 API 모음 > struct delayed_work { struct work_struct work; struct timer_list timer; }; work 과 timer 를묶어새로운 data structure 정의! int schedule_delayed_work(struct delayed_work *work, unsigned long delay); 주어진 delay 값만큼해당 work 을지연시켜실행 예 ) mmc driver 에서발췌한루틴 static struct workqueue_struct *workqueue; // 선언 { } queue_delayed_work(workqueue, work, delay); // delayed work 요청 int cancel_delayed_work(struct delayed_work *work); 앞서설명한 schedule_delayed_work 으로선언한 work 을중지 ( 취소 ) void flush_delayed_work(struct delayed_work *work); 사용자정의 work queue 에있는모든 delayed work 을처리하여, queue 를비우도록요청 (*) create_workqueue() 함수의 argument 값에따라 4 가지의 macro 가존재함!!! 자세한사항은 workqueue.h 파일참조 { flush_workqueue(workqueue); // work queue에있는모든 flush 요청 (delayed work에대한 flush 아님 ) } { } workqueue = create_freezeable_workqueue( kmmcd ); // work queue 생성 destroy_workqueue(workqueue); // work queue 제거

33 3. Bottom Halves and Deferring Work - Work Queue(data structure) struct workqueue_struct { struct cpu_workqueue_struct cpu_wq[nr_cpus]; struct list_head list; const char *name; int singlethread; int freezeable; int rt; }; <work queue 관련 data structure> struct cpu_workqueue_struct { spinlock_t lock; struct list_head worklist; wait_queue_head_t more_work; struct work_struct *current_struct; struct workqueue_struct *wq; task_t *thread; }; queue_work( ) struct work_struct { atomic_long_t data; struct list_head entry; work_func_t func; }; <work 관련 data structure> my work my work queue my work func <worker thread flow> 1) Thread 자신을 sleep 상태로만들고, wait queue 에자신을추가한다. 2) 처리할 work 이없으면, schedule() 을호출하고, 자신은여전히 sleep 한다. 3) 처리할 work 이있으면, wakeup 상태로바꾸고, wait queue 에서빠져나온다. 4) run_workqueue( ) 함수를호출하여, deferred work 을수행한다. func( ) 함수호출함.

34 3. Bottom Halves and Deferring Work - Work Queue <data structure 일부발췌 include/linux/workqueue.h>

35 3. Bottom Halves and Deferring Work - Work Queue <work queue 사용예 > (*) 아래예는 default(system) work queue 의사용예이며, 사용자정의 work queue 의사용예는앞서이미정리함 ^^.

36 3. Bottom Halves and Deferring Work - Kernel Threads struct task_struct *kthread_create(my_thread, data, ); Kernel thread 생성 int my_thread(void *data) Set task state to TASK_INTERRUPTIBLE (*) 옆의 kernel thread 내부는앞서설명한 worker thread 를거의그대로복사한것이라, 다음다음페이지의코드예를보는것이보다정확할듯 ^^ kthread_run( ) kernel thread 를만들고, thread 를깨워줌 kthread_create( ) kernel thread 를만듦 (sleeping 상태로있음 ) kthread_bind( ) thread 를특정 CPU 에 bind 시킬때사용함. kthread_stop( ) thread 를중지할때사용함. Kthread_should_stoip 을위한조건을설정해줌. kthread_should_stop( ) kernel thread 루틴을멈추기위한조건검사함수. loop Add itself(thread) to wait queue ( sleep) If work list is empty then schedule Else set task state to TASK_RUNNING Remove itself from wait queue ( wakeup) If (kthread_should_stop()) break Do my work (*) work queue 가 kernel thread 를기반으로하고있으므로, kernel thread 를직접만들필요없이, Work queue 를이용하는것이보다간편할수있다. (*) 보다자세한사항은 include/linux/kthread.h 파일참조

37 3. Bottom Halves and Deferring Work - Kernel Threads <data structure 일부발췌 include/linux/kthread.h>

38 3. Bottom Halves and Deferring Work - Kernel Threads <kernel thread 사용예 >

39 3. Bottom Halves and Deferring Work Threaded Interrupt Handler(bottom half) int request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_handler_t thread_fn, unsigned long flags, const char *name, void *dev); Interrupt handler & threaded interrupt handler 등록및실행요청 Return 값 : IRQ_NONE, IRQ_HANDLED, IRQ_WAKE_THREAD HOT 0) request_thread_irq() 호출시 irq thread 생성 1) If threaded interrupt comes, wakeup the irq thread. 2) Irq thread will run the <thread_fn>. (*) 이방식은 hardware interrupt 방식과는달리 Interrupt 요청시, handler 함수를 kernel thread 에서처리하므로, bottom half 방식으로보아야할것임 ^^ <irq thread> thread_fn (*) kernel 부터소개된기법 (*) interrupt 발생시, hardware interrupt 방식으로처리할지 Thread 방식으로처리할지결정 (handler function) IRQ_WAKE_THREAD 를 return 하면, thread 방식으로처리 Handler thread 를깨우고, thread_fn 을실행함. (*) handler 가 NULL 이고, thread_fn 이 NULL 이아니면, 무조건 Threaded interrupt 방식으로처리함. (*) 이방식은앞으로소개할 tasklet 및 work queue 의존재를위협할수있는방식으로인식되고있음 ^^. (*) 자세한사항은 kernel/irq/manage.c 파일참조

40 3. Bottom Halves and Deferring Work Threaded Interrupt Handler(bottom half) Example) user process (*) threaded interrupt 가들어올경우, 관련 thread 가깨어나 thread_fn 을실행한다. (*) 아래의경우는 kernel 에서 user mode process 를돌리는경우의예임. (*) thread_fn 을실행하고있는동안, 새로운 interrupt 가들어오면, 어떻게될까? 아래처럼 irq queue 에쌓이나? Userspace Irq queue kernel Ex) Call usermodehelper request_threaded_irq(thread_fn) From external device thread_fn <irq thread>

41 3. Bottom Halves and Deferring Work - ps Kernel thread daemon ( 모든 kernel thread 의 parent) Softirq/tasklet 을위한 Kernel thread Work queue 의한형태 (usermodehelper kernel 에서 User process 실행 역할수행 Default work queue thread (worker thread) (*) 위에는표시되지않았으나, 사용자정의 work queue 를만들경우혹은 kernel thread 를생성할경우, 자신만의 work queue 혹은 kernel thread 가 ps 결과로보이게될것임 ^^ (*) ksoftirqd/0 와 events/0 의 0 은첫번째 processor 를의미함.

42 4. Timer(1) (*) 앞서설명한 bottom half 의목적은 work 을단순히 delay 시키는데있는것이아니라, 지금당장 work 을실행하지않는데있음. 한편 timer 는일정한시간만큼 work 을 delay 시키는데목적이있음! (*) timer 는 timer interrupt 를통해동작하는방식을취함 (software interrupt). 즉, 처리하려는 function 을준비한후, 정해진시간이지나면 timer interrupt 가발생하여해당 function 을처리하는구조임. (*) timer 는 cyclic( 무한반복 ) 구조가아니므로, time 이경과하면 timer function 이실행되고, 해당 timer 는제거된다. Timer interrupt timer_list run_timer_softirq( ) timer_list 실행 timer_list timer_list <timer list 관련 data structure> struct timer_list { struct list_head entry; unsigned long expires; void (*function)(unsigned long); unsigned long data; struct tvec_t_base_s *base; }; timer vector timer_list

43 4. Timer(2) timer list my_timer my data (*) timer 를 deactivation 시키는함수에는 del_timer() 와 del_timer_sync() 가있음. (*) del_timer_sync() 는현재실행중인 timer handler 가끝날때까지기다려준다. 따라서대부분의경우에이함수를더많이사용한다. 단, 이함수의경우는 interrupt context 에서는사용이불가하다. my_timer_handler { } expired time (3) add_timer() or mod_timer( ) 이를호출하여반복적으로 timer 를돌릴수있음 mod_timer 는 expiratoin 값을변경함은물론이고, Timer 를 activation 시켜준다. Time expired interrupt 시호출됨 void init_timer(struct timer_list *timer); or TIMER_INITALIZER(_function, _expires, _data) (1) 초기화 my_timer.expires = jiffies + delay; my_timer.data = my_data; my_timer.function = my_timer_handler; (2) 설정 my_timer_handler(my_data) will be run! 얘는빠르게처리되는코드이어야함! Softirq 와같은 bottom half conntext 임

44 4. Timer(3) schedule_timeout (timeout): 현재실행중인 task 에대해 delay 를줄수있는보다효과적인방법. 이방법을사용하면현재실행중인 task 를지정된시간이경과할때까지 sleep 상태 (wait queue 에넣어줌 ) 로만들어주고, 시간경과후에는다시 runqueue 에가져다놓게함. schedule_timeout( ) 의내부는 timer 와 schedule 함수로구성되어있음. schedule_timeout (signed long timeout) { timer_t timer; unsigned long expire; expire = timeout * jiffies; init_timer(&timer); timer.expires = expire; timer.data = (unsigned long)current; timer.function = process_timeout; add_timer(&timer); schedule(); del_timer_sync(&timer); } timeout = expire jiffies; (*) schedule_timeout 말고도, process scheduling 과조합한타이머리스트관련함수로는아래와같은것들이있다. process_timeout(), sleep_on_timeout(), interruptible_sleep_on_timeout()

45 4. Timer(4) <data structure 일부발췌 include/linux/timer.h>

46 4. Timer(5) <timer 사용예 >

47 5. Wakelock(1) (*) 시스템이 low power state 로가는것을막아주는메카니즘 (google 에서만듦 ). (*) Smart Phone 은전류를많이소모하므로, 항시 sleep mode 로빠질준비를해야한다. (*) wake_lock_init 의인자로넘겨준, name 값은 /proc/wakelocks 에서확인가능함. Declare and init wakelock (wake 잠금변수선언및초기화 ) <wakeup routine> <sleep routine> Start wakelock (wake 잠금시작 ) 여기서부터계속깨어있음 Release wakelock (wake 잠금해제 ) 여기서부터 sleep 가능해짐 Destroy wakelock (wake 잠금변수제거 driver 제거시 )

48 5. Wakelock(2) <Wakelock 관련 API 모음 > [ 변수선언 ] struct wakelock mywakelock; [ 초기화 ] wake_lock_init(&mywakelock, int type, wakelock_name ); type : = WAKE_LOCK_SUSPEND: 시스템이 suspending 상태로가는것을막음 = WAKE_LOCK_IDLE: 시스템이 low-power idle 상태로가는것을막음. [To hold(wake 상태로유지 )] wake_lock(&mywakelock); [To release(sleep 상태로이동 )] wake_unlock(&mywakelock); [To release(sleep 상태로이동 )] wake_lock_timeout(&mywakelock, HZ); [ 제거 ] wake_lock_destroy (&mywakelock);

49 5. Wakelock(3) (*) 이그림은 kernel wakelock 을설명하기에는많이부족하나, Android 관점에서 power manangement 를이해하기위해첨부하였다.

50 5. Wakelock(4) <data structure 일부발췌 include/linux/wakelock.h>

51 5. Wakelock(5) <wakelock 사용예 > (*) 위의내용은 drivers/mmc/core/core.c 파일에서발췌한것임.

52 5. Wakelock(5) <wakelock 사용예 ( 계속 )>

53 6. Synchronization(1) - Sleeping & Wait Queue (*) atomic operation, bit operation, spinlock, big kernel lock, mutex, semaphore 등일반적인내용은제외하고, wait queue 및 completion function 만언급하고자함. wait_event ( 대기상태로빠짐 ) wait queue X task wakeup (CPU 를할당받을수있게됨 ) Critical section O run queue

54 6. Synchronization(2) - Sleeping & Wait Queue (*) wait queue 는 kernel mode 에서 running 중인 task 가특정조건이만족될때까지기다려야할때사용된다. (*) task 가필요로하는특정조건이나 resource 가준비될때까지, 해당 task 는 Sleep 상태에있어야한다. < 변수선언및초기화 > wait_queue_head_t wq; init_waitqueue_head(&wq); or DECLARE_WAIT_QUEUE_HEAD(wq); <Going to Sleep critical section으로들어가기전에대기상태로빠짐 > wait_event (wait_queue_head_t wq, int condition) wait_event_interruptible (wait_queue_head_t wq, int condition) wait_event_killable (wait_queue_head_t wq, int condition) wait_event_timeout (wait_queue_head_t wq, int condition, long timeout) wait_event_interruptible (wait_queue_head_t wq, int condition, long timeout) <Waking Up critical section으로들어가는조건을만들어줌 ( 풀어줌 )> void wake_up (wait_queue_head_t *wq); void wake_up_interruptible (wait_queue_head_t *wq); void wake_up_interruptible_sync (wait_queue_head_t *wq);

55 6. Synchronization(3) - Sleeping & Wait Queue <Wait Queue 사용예 >

56 6. Synchronization(4) - Completion write 후, complete() 호출 ( 대기해제 ) Read 전, wait_for_completion 호출 ( 대기상태진입 ) Common resources (critical section) struct completion { unsigned int done; wait_queue_head_t wait; }; void init_completion(struct completion *c); /* DECLARE_COMPLETION(x) 도사용가능 */ completion 초기화 void wait_for_completion(struct completion *c); /* timeout 함수도있음 */ critical section 에들어갈때호출 ( 대기를의미함 ) int wait_for_completion_interruptible(struct completion *c); /* timeout 함수도있음 */ critical section 에들어갈때호출 ( 대기를의미함 ). 이함수호출동안에 Interrupt 가능함. void complete(struct completion *c); critical section 에들어갈수있도록해줌 ( 대기조건을해지해줌 ) void complete_and_exit(struct completion *c, long code);

57 6. Synchronization(5) - Completion <completion 사용예 >

58 7. Notifier(1) <kernel routine A> { notifier callback 함수정의 notifier callback 함수등록 (*) notifier 는서로다른곳에위치한 kernel code 간에 event 를전송하기위한 mechanism 으로 callback 함수개념으로생각하면이해가쉽다 ^^. (*) 즉, kernel routine A 에서는호출되기를원하는 callback 함수를기술및등록하고, event 발생시점을아는 kernel routine B 에서해당함수를호출해주는것으로설명할수있겠음! } my_callback_func() { } <kernel routine B> { notifier chain register <event 발생시점예 - bluetooth> 1) HCI_DEV_UP(link up 시 ) 2) HCI_DEV_DOWN(linux down 시 ) 3) HCI_DEV_REG 4) HCI_DEV_UNREG 5) HCI_DEV_WRITE( 패킷전송시 ) } notifier chain unregister some_func() { call notifier_callback func 특정 event 발생시점에서호출 }

59 7. Notifier(2) (*) 자세한사항은 include/linux/notifier.h 파일참조!

60 7. Notifier(3) <notifier 사용예 >

61 8. Send signal from kernel to userspace User process 수신한 signal 에대한 signal handler 를정의하여사용 (*) ioctl 이나 proc(write) 등을통해사전에 pid 값을내려준다. Userspace kernel send_sig(int signal, struct task_struct *tsk, int priv); Device driver signal = UNIX signal(ex: SIGUSR1) tsk = pid_task(find_vpid(sig_pid), PIDTYPE_PID); ( 단, sig_pid 는 user process 에서넘겨받은값으로부터계산한값임 ) priv: 0 user process, 1: kernel (device driver 는 user process 의 pid 를사전에알고있어야함 ) (*) kernel(device driver) 내에서특정한사건이발생할경우, 이를특정 application process 에게바로알려주면매우효과적인경우가있을수있다. 예 ) video decoder driver 에서 buffering 에문제발생시, mediaserver 에게이를알려준다 (*) 위의 send_sig 관련자세한사항은 kernel/signal.c 및 include/linux/signal.h 파일참조!!!

62 9. kobjects & sysfs(1) - 개념 subsystem kset kobj kobj kobj kobj kobj < 관련 API 모음 (arguments 생략함 )> kobject_init( ) kobject_create( ) kobject_add( ) kobject_del( ) kobject_get( ) kobject_put( ) sysfs_create_dir( ) sysfs_remove_dir( ) sysfs_rename_dir( ) sysfs_create_file( ) sysfs_remove_file( ) sysfs_update_file( ) sysfs_create_link( ) sysfs_remove_link( ) sysfs_create_group( ) sysfs_remove_group( ) sysfs_create_bin_file( ) sysfs_remove_bin_file( ) (*) kobject(kernel object) 는 device model 을위해등장한것 Kset 은 kobject 의묶음이고, subsystem 은 kset 의묶음임. (*) sysfs 는 kobject 의계층 tree 를표현 (view) 해주는 memory 기반의 file system 으로 2.6 에서부터소개된방법 kernel device 와 user process 가소통 ( 통신 ) 하는수단. 이와유사한것으로 proc file system 등이있음. (*) kobject 관련자세한사항은 include/linux/kobject.h 파일참조, sysfs 관련자세한사항은 include/linux/sysfs.h 파일참조!!!

63 9. kobjects & sysfs(2) - 개념 Internal Kernel Objects Object Attributes Object Relationships (*) sysfs는실제로 /sys 디렉토리에생성됨. External Directories Regular Files Symbolic Links

64 9. kobjects & sysfs(3) 간단한사용법 (*) 앞서언급한 kobject_ 및 sysfs_ API 를이용하여직접작업하는것도가능하나, 보다편리한방법으로위의 API 사용이가능함! 앞서제시한 API 를사용할경우, 매우세세한제어가가능할것임. (*) 드라이버초기화시, device_create_file( ) 을통해 sysfs 파일생성이가능하며, 드라이버제거시, device_remove_file( ) 을통해만들어둔, sysfs 파일이제거된다. (*) device_create_file( ) 로만들어둔, file 을읽고, 쓸경우에는각각 show 및 store 에정의한함수가불리어질것이다. (*) platform device 의경우에는, device_create_file 의첫번째 argument 값으로.dev 필드의정보가전달되어야한다. (*) 위의 API 관련보다자세한사항은 include/linux/device.h 파일참조!!!

65 9. kobjects & sysfs(4) - 사용예 <sysfs 사용예 >

66 10. Example Drivers : bluesleep(uart), SDIO

67 JNI 10. Example Drivers : bluetooth sleep mode driver(1) bluetoothd (*) 아래그림은 bluetooth sleep driver 의개념도로써, platform_driver, interrupt handler, GPIO, tasklet, workqueue, timer, wakelock 등의기법을사용하고있다. Sleep mode 일때는닫고, Wakeup mode 일때는열어준다 외부 Bluetooth 장치

68 10. Example Drivers : bluetooth sleep mode driver(2) Broadcom chip Power on/off switch Qualcomm chip(cpu) off TX RX CTS RTS RX TX RTS CTS workqueue for sleep UART line host_wake/ ext_wake on HOST_WAKE (irq line) host_wake (interrupt) HOST_WAKE tasklet for wakeup EXT_WAKE EXT_WAKE GPIO line (*) bluetooth 가 wakeup 되는조건은위의 HOST_WAKE 가 enable(interrupt) 되는것이외에도실제로 bluetooth packet 이나가고나서발생하는 HCI event(callback) 에기인하기도한다. (*) 전력소모를최소로하기위해, 틈만나면 (?) sleep mode 로진입해야하며, HOST_WAKE 및 EXT_WAKE GPIO pin 이모두사용중이지않을때 (deasserted), sleep 으로들어가게된다. (*) bluetooth sleep mode driver 는 drivers/bluetooth 아래에서확인가능함.

69 10. Example Drivers : bluetooth sleep mode driver(3) <sleep case> 1) bluesleep_tx_idle일경우, bluesleep_sleep_work을호출함. 여기에서조건 (bluesleep_can_sleep) 체크하여, ext_wake 및 host_wake가모두 1일경우 sleep으로빠진다. <wakeup case> 1) sleep mode로빠질조건이아닐때 ( 즉, 위의 sleep case가아닐경우 ), 깨어난다. 2) bluesleep_hostwake_task 함수에서 host_wake_irq interrupt를받을때깨어난다. bluesleep_hostwake_isr interrupt service routine이호출됨. 3) hci event(bluetooth frame send) 를받고, bluesleep_outgoing_data 함수호출시, ext_wake 값이 1(= sleep 상태 ) 이면, wakeup 하도록 bluesleep_sleep_wakeup 함수호출함 ( 깨어난다 ).

70 10. Example Drivers : SDIO driver(1) CPU (*) 아래그림은 drivers/mmc 디렉토리에있는내용을정리한것임. 단, msm_sdcc driver 는 Qualcomm chip 전용드라이버로, Code Aurora Forum 에서관련코드를 down 받을수있음 ^^. msm_sdcc(host controller) (*) platform driver( 얘가메인이라고보면될듯 ^^) (*) probe 시 mmc_host 및 operation 을할당하고, 몇가지 interrupt 요청을등록한후, mmc host 를추가해준다. (*) 전체적인흐름을보면, mmc_host 의 operation 중 request() handler 가함수가호출되면서, command, data 등이오고가는구조로되어있다. 자세한사항은다음페이지내용참조! SDIO SD MMC Core (*) msm_sdcc 드라이버에서사용하는코드및 SDIO/SD/MMC protocol layer 관련코드로구성 (*) power management 정책등이구현되어있음 (*) core 에서신규로정의한 kmmcd work queue 는자동 detection 용도로사용됨. Linux kernel WiFi SDIO MMC card SD card (*) 외부 device

71 10. Example Drivers : SDIO driver (2) (*) msm_sdcc 드라이버초기화 (probe) 과정에서사용되는 mmc_host data structure 의내용및이를초기화하는코드를정리한것임 ^^ (*) include/linux/mmc/host.h 파일참조

72 10. Example Drivers : SDIO driver (3) (*) 옆의그림은 mmc_host data structure 관련 operation 함수를정리한것이며, 그중, SD/MCC/SDIO 동작 (read/write) 과관련이있는 request handler 에서사용하는 data structure 를아래에정리하였다. (*) include/linux/mmc/host.h 파일참조 (*) include/linux/mmc/coreh 파일참조

73 10. Example Drivers : SDIO driver (4) (*) 위그림은, 앞서언급한 request handler 의주요 flow 를개념적으로정리한것임 ^^ SD/MMC/SDIO 관련하여 data 를읽고, 쓰는작업과관련있는그림으로보면될듯 cmd 전송후, data 를전달할것이있으면, 전송하고, 전송완료후에는 mmc_request_done 호출! cmd 및 data 전송은실질적으로는주어진주소에값을 write 하는것으로보면됨 ^^.

74 10. Example Drivers : SDIO driver (5) (*) 아래그림은 WiFi 칩셋과 CPU 간의 SDIO 인터페이스 (SD 4-bit mode) 사용예를보여준다. (*) 아래그림에서 CMD 및 DATA 는앞서설명한 request handler 와무관하지않다 ^^. 즉, request handler 에서사용하는 cmd 와 data 가아래그림의 CMD 및 DATA line 을타고이동한다고보면될듯 (*) 참고로, 아래그림에서 DATA 1 은 data line 이면서, 경우에따라서는 interrupt line 으로도사용됨. WiFi Host Driver CLK SDIO driver SD Host (CPU) CMD WiFi chip DATA[3:0] <SD 4-Bit mode>

75 10. Example Drivers : SDIO driver (6) 1) thread irq 사용예 (TODO) 2) work queue 사용예 (TODO)

76 Appendix

77 Appendix 부록 1: kernel( 만 ) build 방법 부록 2: android boot.img 분해및 kernel 교체방법 부록 3: Android 4.01(ICS) source download & build

78 부록 1: Kernel( 만 ) Build 하기 # make ARCH=arm CROSS_COMPILE=arm-eabi- YOUR_MACHINE_ARCH_CONFIG arch/arm/configs 사용중인 machine type 으로 configuratiobn 설정 ( 조정 ) # make ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig Configuration 을원하는대로변경하고자할경우 # make -j3 ARCH=arm CROSS_COMPILE=arm-eabi- zimage Build 결과 : arch/arm/boot/zimage # make -j3 ARCH=arm CROSS_COMPILE=arm-eabi- modules wi-fi 등 kernel module build 함. # make clean <= object 파일제거 # make distclean <= build 로생성된모든파일제거 [TIP] menuconfig 로수정한파일을, 이후에도재사용하고자할경우에는, 아래와같이하면된다. cp f.config arch/arm/configs/your_machine_arch_config

79 부록 2: Android boot.img 분해및 kernel 교체방법 (1) On application processor <boot.img> Boot loader Boot header( 1 page) Kernel(n pages) linux kernel Kernel(Image) Ramdisk(m pages) init (first user process) init.rc init.qcom.rc

80 부록 2: Android boot.img 분해및 kernel 교체방법 (2) ANDROID! mkbootimg --cmdline "console=ttyhs1 pmem_kernel_ebi1_size=0x androidboot.hardware=qcom --kernel zimage --ramdisk ramdisk.gz -base 0x o boot.img Boot header( 1 page) Kernel(n pages) - zimage Ramdisk(m pages) - rootfs (*) 주의 : 위의내용은 qualcomm chip 을기준으로작성한것이므로, 다른 chip 에적용하기위해서는빨간글씨부분이적절히수정되어야할것임. 따라서개념을이해하는용도로만이해하시기바람 ^^ Second stage(o pages) n = (kernel_size + page_size 1) / page_size m = (ramdisk_size + page_size 1) / page_size o = (second_size + page_size 1) / page_size (Example) Page size: 2048 (0x ) Kernel size: (0x004b0260) Ramdisk size: (0x0004bc27) Second size: 0 (0x )

81 부록 2: Android boot.img 분해및 kernel 교체방법 (3) ANDROID! [TIP] split_bootimg.pl 은인터넷에서구할수있음. [TIP] 앞서설명한 mkbootimg 와위에서설명한내용을토대로, 새로 build 한 kernel image 를적용한새로운 boot.img 를만들수있게됨 (build 시간을단축하고자할때 ) [TIP] fastboot 명령을사용하여새로만든 boot.img 를 flash 에 write 하면됨 ^^. Boot header( 1 page) Boot header( 1 page) Kernel(n pages) - zimage Ramdisk(m pages) - rootfs Second stage(o pages) split_bootimg.pl (boot.img 분해 ) Kernel(n pages) - zimage Ramdisk(m pages) - rootfs ANDROID! 새로 build 한 zimage 로교체 Boot header( 1 page) Boot header( 1 page) fastboot Kernel(n pages) - zimage Ramdisk(m pages) - rootfs mkbootimg (boot.img 재생성 ) Kernel(n pages) - zimage Second stage(o pages) Ramdisk(m pages) - rootfs

82 부록 2: Android boot.img 분해및 kernel 교체방법 (4) <boot.img 파일분해하기 > #./split_bootimg.pl boot.img -> boot header -> boot.img-kernel kernel -> boot.img-ramdisk.gz ramdisk root file system <boot.img 파일재생성하기 > # mkbootimg --cmdline "console=ttyhs1 pmem_kernel_ebi1_size=0x androidboot.hardware=qcom --kernel zimage --ramdisk ramdisk.gz -base 0x o boot.img 앞서설명한것처럼, 빨간색표시부분은시스템마다다르니, 주의요망 ( 잘못하면, 영영부팅안됨 ^^) <fastboot 으로 boot.img write 하기 > # adb reboot-bootloader fastboot mode 로전환 ( 혹은시스템에서정의한 key 조합선택하여 ) # fastboot flash boot./boot.img < 기타참고사항 1: ramdisk rootfs 파일해부하기 > # gzip -d boot.img-ramdisk.gz # cpio -i < boot.img-ramdisk 현재디렉토리에 ramdisk file system 을구성하는파일이풀리게됨. < 기타참고사항 2: 새로운 ramdisk file 만들기 init.rc, init.qcom.rc 등을수정후테스트시 > # find. cpio o H newc gzip >../newramdisk.cpio.gz <= 위에서 cpio 로파일을풀어둔디렉토리에서명령을실행.

83 부록 3: Android 4.01(ICS) source download & build(1) $ mkdir ~/bin $ PATH=~/bin:$PATH $ curl > ~/bin/repo $ chmod a+x ~/bin/repo $ mkdir mydroid_ics401 $ cd mydroid_ics401 $ repo init -u or $ repo init -u -b android-4.0.1_r1 $ repo sync <= 여기까지하면, kernel code 를제외한코드가 download 될것임. $ vi.repo/manifest.xml <project path="kernel/common" name="kernel/common" revision="android-3.0" /> <= 거의맨끝에이줄을추가!!! ~ $ repo sync <= kernel/common 디렉토리에 kernel code(3.0.8 version) 가받아질것임. (*) kernel 을받기위해, 반드시위와같이해야하는것은아님 ^^.

84 부록 3: Android 4.01(ICS) source download & build(2) $ source build/envsetup.sh $ lunch full-eng <= emulator 용으로 build 하도록설정. or $ lunch You're building on Linux Lunch menu... pick a combo: 1. full-eng 2. full_x86-eng 3. vbox_x86-eng 4. full_maguro-userdebug 5. full_tuna-userdebug 6. full_panda-eng (*) kernel 을받기는했으나, 이를포함해서 build 하기위해서는추가작업이필요할듯. Which would you like? [full-eng] full emulator fully configured with all languages, apps, input methods full_maguro maguro full build running on Galaxy Nexus GSM/HSPA+ ("maguro") full_panda panda full build running on PandaBoard ("panda") and the BUILDTYPE is one of the following: user limited access; suited for production userdebug like "user" but with root access and debuggability; preferred for debugging eng development configuration with additional debugging tools $ make -j4 <= build 시작.

85 TODO 1) Android Specific Driver 를일반화하여정리하기 PMIC, charger, SDIO, USB, Video/Audio, Camera, T-DMB, WiFi, Bluetooth, Telephony, GPS, Sensors/Input Thanks a lot!

86 References 1) Linux Kernel Development(3 rd edition).. [Robert Love] 2) Writing Linux Device Drivers [Jerry Cooperstein] 3) Essential Linux Device Drivers.. [Sreekrishnan Venkateswaran] 4) Linux kernel 2.6 구조와원리... [ 이영희역, 한빛미디어 ] 5) Linux Kernel architecture for device drivers.. [Thomas Petazzoni Free Electronics(thomas.petazzoni@free-electronics.com)] 6) The sysfs Filesystem.... [Patrick Mochel, mochel@digitalimplant.org] 7) Linux SD/MMC Driver Stack... [Champ Yen, champ.yen@gmail.com] 8) Some Internet Articles

GoogleTV Update Procedure

GoogleTV Update Procedure Android Device Driver Hacks : platform driver, work queue, tasklet, wakelock chunghan.yi@gmail.com, slowboot Revision 작성자비고 0.1 이충한 최초작성 11/11/2011 0.2 이충한 11/15/2011 0.3 이충한 11/16/2011 0.4 이충한 11/17/2011

More information

GoogleTV Update Procedure

GoogleTV Update Procedure Android Device Driver Hacks : interrupt handler, tasklet, work queue, kernel thread, synchronization, transferring data between kernel & user space chunghan.yi@gmail.com, slowboot Revision 작성자비고 0.1 이충한

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

Android Device Driver Hacks : interrupt handler, tasklet, work queue, kernel thread, synchronization, transferring data between kernel & user space (

Android Device Driver Hacks : interrupt handler, tasklet, work queue, kernel thread, synchronization,  transferring data between kernel & user space ( Android Device Driver Hacks : interrupt handler, tasklet, work queue, kernel thread, synchronization, transferring data between kernel & user space (Presentation Version) chunghan.yi@gmail.com, slowboot

More information

Mango220 Android How to compile and Transfer image to Target

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

More information

6주차.key

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

More information

untitled

untitled Embedded System Lab. II Embedded System Lab. II 2 RTOS Hard Real-Time vs Soft Real-Time RTOS Real-Time, Real-Time RTOS General purpose system OS H/W RTOS H/W task Hard Real-Time Real-Time System, Hard

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

Mango-AM335x LCD Type 커널 Module Parameter에서 변경하기

Mango-AM335x LCD Type 커널 Module Parameter에서 변경하기 Mango-AM335x LCD Type 커널 Module Parameter 에서 변경하기 http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology

More information

Microsoft PowerPoint - polling.pptx

Microsoft PowerPoint - polling.pptx 지현석 (binish@home.cnu.ac.kr) http://binish.or.kr Index 이슈화된키보드해킹 최근키보드해킹이슈의배경지식 Interrupt VS polling What is polling? Polling pseudo code Polling 을이용한키로거분석 방어기법연구 이슈화된키보드해킹 키보드해킹은연일상한가! 주식, 펀드투자의시기?! 최근키보드해킹이슈의배경지식

More information

PCServerMgmt7

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

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

untitled

untitled Step Motor Device Driver Embedded System Lab. II Step Motor Step Motor Step Motor source Embedded System Lab. II 2 open loop, : : Pulse, 1 Pulse,, -, 1 +5%, step Step Motor (2),, Embedded System Lab. II

More information

10주차.key

10주차.key 10, Process synchronization (concurrently) ( ) => critical section ( ) / =>, A, B / Race condition int counter; Process A { counter++; } Process B { counter ;.. } counter++ register1 = counter register1

More information

DE1-SoC Board

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

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

Embeddedsystem(8).PDF

Embeddedsystem(8).PDF insmod init_module() register_blkdev() blk_init_queue() blk_dev[] request() default queue blkdevs[] block_device_ops rmmod cleanup_module() unregister_blkdev() blk_cleanup_queue() static struct { const

More information

MAX+plus II Getting Started - 무작정따라하기

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,

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT KEY EVENT & STATE 구현 2007. 1. 25 PLATFORM TEAM 정용학 차례 Key Event HS TASK UI TASK LONG KEY STATE 구현 소스코드및실행화면 질의응답및토의 2 KEY EVENT - HS TASK hs_task keypad_scan_keypad hs_init keypad_pass_key_code keypad_init

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

PowerPoint 프레젠테이션

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

More information

Smart Power Scope Release Informations.pages

Smart Power Scope Release Informations.pages v2.3.7 (2017.09.07) 1. Galaxy S8 2. SS100, SS200 v2.7.6 (2017.09.07) 1. SS100, SS200 v1.0.7 (2017.09.07) [SHM-SS200 Firmware] 1. UART Command v1.3.9 (2017.09.07) [SHM-SS100 Firmware] 1. UART Command SH모바일

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

Android-build-system

Android-build-system Android Build System Rev-0.1 고도리 of AESOP 2012/04/12 INDEX Android build environment setup envsetup.sh Android source tree Android.mk Android build environment 3 Initializing the Build Environment Android

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 1 Tizen 실습예제 : Remote Key Framework 시스템소프트웨어특론 (2014 년 2 학기 ) Sungkyunkwan University Contents 2 Motivation and Concept Requirements Design Implementation Virtual Input Device Driver 제작 Tizen Service 개발절차

More information

1217 WebTrafMon II

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

More information

OPCTalk for Hitachi Ethernet 1 2. Path. DCOMwindow NT/2000 network server. Winsock update win95. . . 3 Excel CSV. Update Background Thread Client Command Queue Size Client Dynamic Scan Block Block

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

슬라이드 제목 없음

슬라이드 제목 없음 < > 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

More information

임베디드시스템설계강의자료 4 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 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

More information

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

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

More information

KEY 디바이스 드라이버

KEY 디바이스 드라이버 KEY 디바이스드라이버 임베디드시스템소프트웨어 I (http://et.smu.ac.kr et.smu.ac.kr) 차례 GPIO 및 Control Registers KEY 하드웨어구성 KEY Driver 프로그램 key-driver.c 시험응용프로그램 key-app.c KEY 디바이스드라이버 11-2 GPIO(General-Purpose Purpose I/O)

More information

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770> i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)

More information

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - (Asynchronous Mode) - - - ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - UART (Univ ers al As y nchronous Receiver / T rans mitter) 8250A 8250A { COM1(3F8H). - Line Control Register

More information

10.

10. 10. 10.1 10.2 Library Routine: void perror (char* str) perror( ) str Error 0 10.3 10.3 int fd; /* */ fd = open (filename, ) /*, */ if (fd = = -1) { /* */ } fcnt1 (fd, ); /* */ read (fd, ); /* */ write

More information

Sena Technologies, Inc. HelloDevice Super 1.1.0

Sena Technologies, Inc. HelloDevice Super 1.1.0 HelloDevice Super 110 Copyright 1998-2005, All rights reserved HelloDevice 210 ()137-130 Tel: (02) 573-5422 Fax: (02) 573-7710 E-Mail: support@senacom Website: http://wwwsenacom Revision history Revision

More information

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 개발환경구조및설치순서 JDK 설치 Eclipse 설치 안드로이드 SDK 설치 ADT(Androd Development Tools) 설치 AVD(Android Virtual Device) 생성 Hello Android! 2 Eclipse (IDE) JDK Android SDK with

More information

PRO1_04E [읽기 전용]

PRO1_04E [읽기 전용] Siemens AG 1999 All rights reserved File: PRO1_04E1 Information and S7-300 2 S7-400 3 EPROM / 4 5 6 HW Config 7 8 9 CPU 10 CPU : 11 CPU : 12 CPU : 13 CPU : / 14 CPU : 15 CPU : / 16 HW 17 HW PG 18 SIMATIC

More information

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 시스템호출개요 리눅스에서는사용자공간과커널공간을구분 사용자프로그램은사용자모드, 운영체제는커널모드에서수행 커널공간에대한접근은커널 ( 특권, priviledged) 모드에서가능 컴퓨팅자원 (CPU, memory, I/O 등 ) 을안전하게보호 커널수행을안전하게유지

More information

교육지원 IT시스템 선진화

교육지원 IT시스템 선진화 Module 16: ioctl 을활용한 LED 제어디바이스드라이버 ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 ioctl() 을활용법배우기 커널타이머와 ioctl 을활용하여 LED 제어용디바이스드라이브작성하기 2 IOCTL 을이용한드라이버제어 ioctl() 함수활용 어떤경우에는읽는용도로만쓰고,

More information

강의10

강의10 Computer Programming gdb and awk 12 th Lecture 김현철컴퓨터공학부서울대학교 순서 C Compiler and Linker 보충 Static vs Shared Libraries ( 계속 ) gdb awk Q&A Shared vs Static Libraries ( 계속 ) Advantage of Using Libraries Reduced

More information

Microsoft Word - ASG AT90CAN128 모듈.doc

Microsoft Word - ASG AT90CAN128 모듈.doc ASG AT90128 Project 3 rd Team Author Cho Chang yeon Date 2006-07-31 Contents 1 Introduction... 3 2 Schematic Revision... 4 3 Library... 5 3.1 1: 1 Communication... 5 iprinceps - 2-2006/07/31

More information

휠세미나3 ver0.4

휠세미나3 ver0.4 andromeda@sparcs:/$ ls -al dev/sda* brw-rw---- 1 root disk 8, 0 2014-06-09 18:43 dev/sda brw-rw---- 1 root disk 8, 1 2014-06-09 18:43 dev/sda1 brw-rw---- 1 root disk 8, 2 2014-06-09 18:43 dev/sda2 andromeda@sparcs:/$

More information

TEL: 042-863-8301~3 FAX: 042-863-8304 5 6 6 6 6 7 7 8 8 9 9 10 10 10 10 10 11 12 12 12 13 14 15 14 16 17 17 18 1 8 9 15 1 8 9 15 9. REMOTE 9.1 Remote Mode 1) CH Remote Flow Set 0 2) GMate2000A

More information

/chroot/lib/ /chroot/etc/

/chroot/lib/ /chroot/etc/ 구축 환경 VirtualBox - Fedora 15 (kernel : 2.6.40.4-5.fc15.i686.PAE) 작동 원리 chroot유저 ssh 접속 -> 접속유저의 홈디렉토리 밑.ssh의 rc 파일 실행 -> daemonstart실행 -> daemon 작동 -> 접속 유저만의 Jail 디렉토리 생성 -> 접속 유저의.bashrc 의 chroot 명령어

More information

<4D6963726F736F667420576F7264202D207468315F4E464320B1E2BCFAB0FA20BCADBAF1BDBAC0C720C7F6C0E7BFCD20B9CCB7A120C0FCB8C15FBCF6C1A45F>

<4D6963726F736F667420576F7264202D207468315F4E464320B1E2BCFAB0FA20BCADBAF1BDBAC0C720C7F6C0E7BFCD20B9CCB7A120C0FCB8C15FBCF6C1A45F> Theme Article NFC 기술과 서비스의 현재와 미래 전망 기술개발실 단말연구센터 윤여민, 김경태 1. 서 론 NFC(Near Field Communication)는 13.56MHz를 사용하는 근거리 이동통신으로 PC 휴대폰 등의 전자 기기간 양방향 데이터를 송수신할 수 있는 기술로 보안성이 뛰어나고, 빠르고 간편하게 제공 할 수 있어 모바일 결제 등의

More information

서현수

서현수 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,

More information

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력

More information

Deok9_Exploit Technique

Deok9_Exploit Technique Exploit Technique CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 > 1. Shell Code 2. Security

More information

hd1300_k_v1r2_Final_.PDF

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

More information

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

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

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

¨ìÃÊÁ¡2

¨ìÃÊÁ¡2 2 Worldwide Converged Mobile Device Shipment Share by Operating System, 2005 and 2010 Paim OS (3.6%) BiackBerry OS (7.5%) 2005 Other (0.3%) Linux (21.8%) Symbian OS (60.7%) Windows Mobile (6.1%) Total=56.52M

More information

(SW3704) Gingerbread Source Build & Working Guide

(SW3704) Gingerbread Source Build & Working Guide (Mango-M32F4) Test Guide http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 1 Document History

More information

SRC PLUS 제어기 MANUAL

SRC PLUS 제어기 MANUAL ,,,, DE FIN E I N T R E A L L O C E N D SU B E N D S U B M O TIO

More information

Chap06(Interprocess Communication).PDF

Chap06(Interprocess Communication).PDF Interprocess Communication 2002 2 Hyun-Ju Park Introduction (interprocess communication; IPC) IPC data transfer sharing data event notification resource sharing process control Interprocess Communication

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서 커알못의 커널 탐방기 2015.12 이 세상의 모든 커알못을 위해서 개정 이력 버전/릴리스 0.1 작성일자 2015년 11월 30일 개요 최초 작성 0.2 2015년 12월 1일 보고서 구성 순서 변경 0.3 2015년 12월 3일 오탈자 수정 및 글자 교정 1.0 2015년 12월 7일 내용 추가 1.1 2015년 12월 10일 POC 코드 삽입 및 코드

More information

- 코드로읽는리눅스디바이스드라이버 강남용

- 코드로읽는리눅스디바이스드라이버 강남용 - 코드로읽는리눅스디바이스드라이버 - 2011.1.3 강남용 (nykang@ssu.ac.kr) 커널스레드 스레드란? 스레드종류 도우미인터페이스 연결리스트 해시리스트 작업큐 통지연쇄 완료인터페이스 kthread 도우미 오류처리지원 ( 원시코드살펴보기 ) 2 스레드란? - 하나의프로그램내에서실행되는함수를의미 - 일반적인프로세서의경우는한순간에하나의함수만실행되지만,

More information

00 SPH-V6900_....

00 SPH-V6900_.... SPH-V6900 사용설명서 사용전에 안전을 위한 경고 및 주의사항을 반드시 읽고 바르게 사용해 주세요. 사용설명서의 화면과 그림은 실물과 다를 수 있습니다. 사용설명서의 내용은 휴대전화의 소프트웨어 버전 또는 KTF 사업자의 사정에 따라 다를 수 있으며, 사용자에게 통보없이 일부 변경될 수 있습니다. 휴대전화의 소프트웨어는 사용자가 최신 버전으로 업그레이드

More information

vm-웨어-01장

vm-웨어-01장 Chapter 16 21 (Agenda). (Green),., 2010. IT IT. IT 2007 3.1% 2030 11.1%, IT 2007 1.1.% 2030 4.7%, 2020 4 IT. 1 IT, IT. (Virtualization),. 2009 /IT 2010 10 2. 6 2008. 1970 MIT IBM (Mainframe), x86 1. (http

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 BOOTLOADER Jo, Heeseung 부트로더컴파일 부트로더소스복사및압축해제 부트로더소스는웹페이지에서다운로드 /working 디렉터리로이동한후, wget으로다운로드 이후작업은모두 /working 디렉터리에서진행 root@ubuntu:# cp /media/sm5-linux-111031/source/platform/uboot-s4210.tar.bz2 /working

More information

Something that can be seen, touched or otherwise sensed

Something that can be seen, touched or otherwise sensed Something that can be seen, touched or otherwise sensed Things about an object Weight Height Material Things an object does Pen writes Book stores words Water have Fresh water Rivers Oceans have

More information

슬라이드 1

슬라이드 1 / 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file

More information

RVC Robot Vaccum Cleaner

RVC Robot Vaccum Cleaner RVC Robot Vacuum 200810048 정재근 200811445 이성현 200811414 김연준 200812423 김준식 Statement of purpose Robot Vacuum (RVC) - An RVC automatically cleans and mops household surface. - It goes straight forward while

More information

Microsoft PowerPoint - 03-Development-Environment-2.ppt

Microsoft PowerPoint - 03-Development-Environment-2.ppt 개발환경 2 임베디드시스템소프트웨어 I 차례 부트로더의기능, 컴파일방법 커널의기능, 컴파일방법 파일시스템의기능, 생성방법 Host-KIT 네트워크연결방법 (Bootp, TFTP, NFS) 개발환경 2 2 부트로더의기능 하드웨어초기화 CPU clock, Memory Timing, Interrupt, UART, GPIO 등을초기화 커널로드 커널이미지를 flash

More information

Microsoft Word doc

Microsoft Word doc 2. 디바이스드라이버 [ DIO ] 2.1. 개요 타겟보드의데이터버스를이용하여 LED 및스위치동작을제어하는방법을설명하겠다. 2.2. 회로도 2.3. 준비조건 ARM 용크로스컴파일러가설치되어있어야한다. 하드웨어적인점검을하여정상적인동작을한다고가정한다. NFS(Network File System) 를사용할경우에는 NFS가마운트되어있어야한다. 여기서는소스전문을포함하지않았다.

More information

CPX-E-EC_BES_C_ _ k1

CPX-E-EC_BES_C_ _ k1 CPX-E CPX-E-EC EtherCAT 8071155 2017-07 [8075310] CPX-E-EC CPX-E-EC-KO EtherCAT, TwinCAT (). :, 2 Festo CPX-E-EC-KO 2017-07 CPX-E-EC 1... 4 1.1... 4 1.2... 4 1.3... 4 1.4... 5 1.5... 5 2... 6 2.1... 6

More information

untitled

untitled CAN BUS RS232 Line Ethernet CAN H/W FIFO RS232 FIFO IP ARP CAN S/W FIFO TERMINAL Emulator COMMAND Interpreter ICMP TCP UDP PROTOCOL Converter TELNET DHCP C2E SW1 CAN RS232 RJ45 Power

More information

chapter4

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 ก ก ก ก ก ก ก ก ก ก

More information

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Crash Unity SDK... Log & Crash Search. - Unity3D v4.0 ios

More information

Remote UI Guide

Remote UI Guide Remote UI KOR Remote UI Remote UI PDF Adobe Reader/Adobe Acrobat Reader. Adobe Reader/Adobe Acrobat Reader Adobe Systems Incorporated.. Canon. Remote UI GIF Adobe Systems Incorporated Photoshop. ..........................................................

More information

슬라이드 1

슬라이드 1 / 임베디드시스템개요 / 임베디드운영체제 / 디바이스드라이버 01 Linux System Architecture Application Area Application System Call Interface BSD Socket Virtual File System INET(AF_INET) Kernel Area Buffer Cache Network Subsystem

More information

Sharing Memory Between Drivers and Applications

Sharing Memory Between Drivers and Applications 본컬럼에대한모든저작권은 DevGuru에있습니다. 컬럼을타사이트등에기재및링크또는컬럼내용을인용시반드시출처를밝히셔야합니다. 컬럼들을 CD나기타매체로배포하고자할경우 DevGuru에동의를얻으셔야합니다. c DevGuru Corporation. All rights reserved 기타자세한질문사항들은웹게시판이나 support@devguru.co.kr 으로 문의하기바랍니다.

More information

( )부록

( )부록 A ppendix 1 2010 5 21 SDK 2.2. 2.1 SDK. DevGuide SDK. 2.2 Frozen Yoghurt Froyo. Donut, Cupcake, Eclair 1. Froyo (Ginger Bread) 2010. Froyo Eclair 0.1.. 2.2. UI,... 2.2. PC 850 CPU Froyo......... 2. 2.1.

More information

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

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

More information

Special Theme _ 모바일웹과 스마트폰 본 고에서는 모바일웹에서의 단말 API인 W3C DAP (Device API and Policy) 의 표준 개발 현황에 대해서 살펴보고 관 련하여 개발 중인 사례를 통하여 이해를 돕고자 한다. 2. 웹 애플리케이션과 네이

Special Theme _ 모바일웹과 스마트폰 본 고에서는 모바일웹에서의 단말 API인 W3C DAP (Device API and Policy) 의 표준 개발 현황에 대해서 살펴보고 관 련하여 개발 중인 사례를 통하여 이해를 돕고자 한다. 2. 웹 애플리케이션과 네이 모바일웹 플랫폼과 Device API 표준 이강찬 TTA 유비쿼터스 웹 응용 실무반(WG6052)의장, ETRI 선임연구원 1. 머리말 현재 소개되어 이용되는 모바일 플랫폼은 아이폰, 윈 도 모바일, 안드로이드, 심비안, 모조, 리모, 팜 WebOS, 바다 등이 있으며, 플랫폼별로 버전을 고려하면 그 수 를 열거하기 힘들 정도로 다양하게 이용되고 있다. 이

More information

LCD Display

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

More information

Abstract View of System Components

Abstract View of System Components 운영체제실습 - Synchronization - Real-Time Computing and Communications Lab. Hanyang University jtlim@rtcc.hanyang.ac.kr dhchoi@rtcc.hanyang.ac.kr beespjh@gmail.com Introduction 조교소개 이름 : 임정택 Tel : 010-4780

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

untitled

untitled Push... 2 Push... 4 Push... 5 Push... 13 Push... 15 1 FORCS Co., LTD A Leader of Enterprise e-business Solution Push (Daemon ), Push Push Observer. Push., Observer. Session. Thread Thread. Observer ID.

More information

PowerPoint Presentation

PowerPoint Presentation Korea Tech Conference 2005 년 5 월 14 일, 서울 2005 년 5 월 14 일 CE Linux Forum Korea Tech Conference 1 Parallel port 를이용한가전제품 제어 임효준 LG 전자 imhyo@lge.com 2005 년 5 월 14 일 CE Linux Forum Korea Tech Conference 2

More information

T100MD+

T100MD+ User s Manual 100% ) ( x b a a + 1 RX+ TX+ DTR GND TX+ RX+ DTR GND RX+ TX+ DTR GND DSR RX+ TX+ DTR GND DSR [ DCE TYPE ] [ DCE TYPE ] RS232 Format Baud 1 T100MD+

More information

Interstage5 SOAP서비스 설정 가이드

Interstage5 SOAP서비스 설정 가이드 Interstage 5 Application Server ( Solaris ) SOAP Service Internet Sample Test SOAP Server Application SOAP Client Application CORBA/SOAP Server Gateway CORBA/SOAP Gateway Client INTERSTAGE SOAP Service

More information

Chap04(Signals and Sessions).PDF

Chap04(Signals and Sessions).PDF Signals and Session Management 2002 2 Hyun-Ju Park (Signal)? Introduction (1) mechanism events : asynchronous events - interrupt signal from users : synchronous events - exceptions (accessing an illegal

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Verilog: Finite State Machines CSED311 Lab03 Joonsung Kim, joonsung90@postech.ac.kr Finite State Machines Digital system design 시간에배운것과같습니다. Moore / Mealy machines Verilog 를이용해서어떻게구현할까? 2 Finite State

More information

<4D6963726F736F667420576F7264202D2045564552554E20B4DCB8BB20C1A1B0CB20B9D720C1B6C4A120B8C5B4BABEF35F76312E335F2E646F63>

<4D6963726F736F667420576F7264202D2045564552554E20B4DCB8BB20C1A1B0CB20B9D720C1B6C4A120B8C5B4BABEF35F76312E335F2E646F63> EVERUN 단말 점검 및 조치 매뉴얼(v1.3) 2008-09-04 1. 기본 점검사항 1.1 KT WIBRO CM 프로그램 정보 1.2 장치관리자 진입경로 1.2.1 시작/제어판에서 실행 1.2.2 바탕화면에서 실행 1.3 장치 관리자에서 드라이버 확인 1.3.1 WIBRO 드라이버 확인 1.3.2 Protocol 드라이버 확인 1.4 Windows 스마트

More information

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어 개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas 플랫폼사용을위한 ios Native Guide - 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager class 개발. - Native Controller에서

More information

Ⅱ. Embedded GPU 모바일 프로세서의 발전방향은 저전력 고성능 컴퓨팅이다. 이 러한 목표를 달성하기 위해서 모바일 프로세서 기술은 멀티코 어 형태로 발전해 가고 있다. 예를 들어 NVIDIA의 최신 응용프 로세서인 Tegra3의 경우 쿼드코어 ARM Corte

Ⅱ. Embedded GPU 모바일 프로세서의 발전방향은 저전력 고성능 컴퓨팅이다. 이 러한 목표를 달성하기 위해서 모바일 프로세서 기술은 멀티코 어 형태로 발전해 가고 있다. 예를 들어 NVIDIA의 최신 응용프 로세서인 Tegra3의 경우 쿼드코어 ARM Corte 스마트폰을 위한 A/V 신호처리기술 편집위원 : 김홍국 (광주과학기술원) 스마트폰에서의 영상처리를 위한 GPU 활용 박인규, 최호열 인하대학교 요 약 본 기고에서는 최근 스마트폰에서 요구되는 다양한 멀티미 디어 어플리케이션을 embedded GPU(Graphics Processing Unit)를 이용하여 고속 병렬처리하기 위한 GPGPU (General- Purpose

More information

ESP1ºÎ-04

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.

More information

T-DMB lipsync issue 검토

T-DMB lipsync issue 검토 Android Stagefright Overview chunghan.yi@gmail.com, slowboot 본문서는 Android stagefright(gingerbread 기준 ) 의기본구조를파악하기위해작성한문서로, 인터넷에떠도는다양한그림이미지를활용하였으며, 특히아래 awesome 문서를참조하였음을밝힌다 ( 원저자의허락없이, 이미지를복사하여사용하였음. 문제가된다면말씀해주세요

More information

Chapter 4. LISTS

Chapter 4. LISTS C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT 2007. 2. 5 PLATFORM TEAM 정용학 차례 CONTAINER & WIDGET SPECIAL WIDGET 질의응답및토의 2 Container LCD에보여지는화면한개 1개이상의 Widget을가짐 3 Container 초기화과정 ui_init UMP_F_CONTAINERMGR_Initialize UMP_H_CONTAINERMGR_Initialize

More information