Linux Kernel(4.14) Hacks

rousalome.egloos.com

포토로그 Kernel Crash




태그 : 리눅스 요약보기전체보기목록닫기

1 2 3 4 5 6 7 8 9 10 다음

[라즈베리파이] 비트 처리 __test_and_set_bit() __test_and_clear_bit() 함수 동작 원리

리눅스 커널과 드라이버에서 __test_and_set_bit()와 __test_and_clear_bit() 함수를 많이 씁니다.두 함수 중 test_and_set_bit()를 써서 비트를 처리하는 코드를 보겠습니다.다음은 워크를 워크큐에 큐잉하는 queue_work_on() 함수입니다.[kernel/workqueue.c]1 bool queue_work_...

[라즈베리파이] 워크큐(Workqueue) 소개

워크큐는 인터럽트 후반부 처리 기법으로 많이 알려져 있는데 커널 전반에서 후반부를 처리하는 기법입니다. 인터럽트 후반부는 물론이고 프로세스 컨택스트 후반부 처리 용도로도 많이 씁니다. 즉, 어떤 코드에서도 워크큐를 써서 후반부 처리를 할 수 있다는 의미입니다.그동안 배웠던 IRQ Thread와 Soft IRQ 와 같은 인터럽트 후반부 처리 기법과 워크큐...

[라즈베리파이] 커널 타이머 -동적 타이머는 누가 언제 호출하나? (1)

이전에 동적 타이머를 설정하는 코드 흐름까지 알아봤습니다. 이 과정을 요약하면 다음과 같습니다.  1. 동적 타이머를 표현하는 자료 구조인 struct timer_list 구조체에 기본 정보를 채운 다음 add_time() 혹은 mod_time() 함수를 호출합니다. 동적 타이머 기본 정보는 타이머 만료 시각(HZ단위)과 동적 타이머 ...

[Kernel][Workqueue] flush_work(), 배리어 워크(barrier_work, wq_barrier)

[라즈베리파이] 커널 타이머 - 동적 타이머 실행 코드

동적 타이머를 초기화만 하면 동적 타이머를 쓸 수 없습니다. 동적 타이머를 실행해야 합니다. 이를 위해 add_timer()/add_timer_on() 이나 mod_timer() 함수에 적절한 인자를 채워 호출해야 합니다.보통 add_timer() 함수를 써서 동적 타이머를 실행하며 이후 동적 타이머 만료 시간을 다시 설정한 후 동적 타이머를 실행시킬 ...

[라즈베리파이] 커널 타이머 - 동적 타이머 초기화

동적 타이머 초기화를 알아 보기 앞서 동적 타이머는 전체 동작 흐름에 대해 알아 봅시다.동적 타이머 동작은 3단계로 나눌 수 있습니다. 1. 동적 타이머 초기화2. 동적 타이머 실행3. 동적 타이머 만료 3.1 동적 타이머 해제 3.2 동적 타이머 핸들러 실행첫 번째 초기화 단계입니다.동적 타이머 초기화는 보통 드라이버 레벨에...

[라즈베리파이] 커널 타이머 - msecs_to_jiffies 함수란

커널은 타이머를 HZ 단위 상대 시간을 나타내는 jiffies값을 기준으로 관리 합니다. 그리고 커널 타이머 함수는 HZ 단위 시간 정보를 받아 처리합니다. 그래서 커널이 이해할 수 있는 단위로 시간 정보를 변환시켜 줘야 합니다. msecs_to_jiffies() 함수가 이 역할을 수행합니다. 이 함수는 가독성도 높습니다. 함수 이름만 봐도 무슨 뜻인지...

[라즈베리파이] 커널 타이머 - jiffies란 값은 누가 언제 증가하나

jiffies에 대해 조금 더 깊이 알아보겠습니다. jiffies는 커널 시스템 타이머가 동적 타이머를 처리하는 횟수입니다. 그럼, jiffies란 값은 누가 언제 증가시킬까요? 이 변수는 타이머 인터럽트가 발생하고 난 후 do_timer() 함수에서 jiffies를 업데이트합니다. 소스 코드를 보면 이 내용을 더 쉽게 이해할 수 있으니 바로 ...

[라즈베리파이] 커널 타이머(Kernel Timer) - jiffies란

jiffies는 커널 타이머를 실행하는 시간 단위입니다. 공학 용어로 Resolution이라고 합니다. jiffies를 지피스라고도 하는데 리눅스 커널에서 쓰는 jiffies란 용어를 그대로 쓰겠습니다.jiffies 개념을 이해하려면 HZ에 대해 배워야 합니다. 그럼 HZ는 뭘 의미할까요? HZ는 1초당 커널 타이머가 동적 타이머를 처리하는 횟수를 의미...

[라즈베리파이] Soft IRQ 서비스는 누가 언제 처리하나? [2] - __do_softirq() 분석

이제 Soft IRQ 의 핵심 코드인 __do_softirq 함수를 분석할 차례입니다. 전체 코드는 다음과 같습니다.1 asmlinkage __visible void __softirq_entry __do_softirq(void)2{3 unsigned long end = jiffies + MAX_SOFTIRQ_TIME;4 unsigned long old_...
1 2 3 4 5 6 7 8 9 10 다음