Linux Kernel(4.14) Hacks

rousalome.egloos.com

포토로그 Kernel Crash




태그 : 라즈베리파이 요약보기전체보기목록닫기

1 2 3 4 5 6

[라즈베리파이] 워크큐(Workqueue)의 특징

다른 인터럽트 후반부 처리 기법과 비교하면서 알아봤으니 이제 워크큐의 특징에 대해서 알아봅니다.첫째, 드라이버 레벨에서 워크큐는 쓰기 쉽습니다. 워크큐는 struct work_struct 구조체 변수만 설정하고 워크를 실행할 코드에 queue_work() 나 schedule_work() 함수만 추가하면 됩니다. 간단한 코드로 워크큐를 쓸 수 있다는 것은...

[라즈베리파이] 비트 처리 __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)

[라즈베리파이] 커널타이머 - 동적 타이머 실행(__mod_timer) 코드 분석

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

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

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

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

[라즈베리파이] 커널 타이머 - timer_after/timer_before 함수

리눅스 커널 중요 시스템은 물론 여러 디바이스 드라이버에서 time_after()와 time_before() 함수를 써서 실행 시간과 타이밍을 제어합니다.보통 함수 처리 시간과 실행 시간의 데드라인을 점검합니다. 그러니 이 함수들이 어떤 역할을 하는지 잘 알아둘 필요가 있습니다. 먼저 time_after()와 time_before() 함수 구현...

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

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