[리눅스커널] 딜레이 워크: 패치 코드 내용과 작성 방법 알아보기
By Guillermo Austin Kim | 2020년 2월 27일 |
이번 절에서는 딜레이 워크를 만들어보는 실습을 진행합니다. 실습할 패치 코드 시나리오는 다음과 같습니다. 인터럽트 핸들러에서 워크를 큐잉 워크 핸들러 실행 워크 핸들러에서 딜레이 워크를 실행 이번 장에서 배운 내용을 총복습하는 실습입니다. 먼저 패치 코드를 작성해 봅시다. 패치 코드의 내용과 작성 방법 먼저 패치 코드를 소개하겠습니다. diff --git a/drivers/mailbox/bcm2835-mailbox.c b/drivers/mailbox/bcm2835-mailbox.c--- a/drivers/mailbox/bcm2835-mailbox.c+++ b/drivers/mailbox/bcm2835-mailbox.c@@ -33,11 +33,23 @@1 #include <linux/
[리눅스커널] 워크큐: 워커와 워커 스레드란
By Guillermo Austin Kim | 2019년 9월 22일 |
커널에서 워크큐 관련 함수를 호출하고 워크큐 자료 구조를 관리합니다. 이를 위해 생성된 프로세스가 워커 스레드이며 워커란 자료구조로 세부 동작을 관리합니다. 이번 시간에서는 워커와 워커 스레드가 무엇인지 먼저 알아보겠습니다. 라즈베리파이에서 워커 스레드 확인하기 워커 스레드는 모든 리눅스 시스템에서 배경으로 실행하는 프로세스입니다. 물론 라즈베리파이도 워커 스레드를 볼 수 있습니다. 그러면 라즈베리파이에서 터미널을 열고 'ps -ely | grep kworker' 명령어로 워커 스레드를 확인해볼까요? root@raspberrypi:/# ps -ely | grep kworker1 S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME C
[리눅스커널] 메모리관리/디버깅: 가상주소를 물리주소로 변환 확인 실습
By Guillermo Austin Kim | 2019년 9월 2일 |
이번 소절에서는 가상주소를 물리주소로 변환하는 과정을 실습으로 알아봅시다. 3장 3.6 절에 소개한 rpi_debugfs.c 소스를 활용해 실습을 진행합니다. 먼저 rpi_debugfs.c 소스를 입력하고 커널 빌드를 하시기 바랍니다. 패치 코드 입력 방법 알아보기 먼저 입력할 패치 코드부터 소개합니다.[drivers/soc/bcm/rpi_debugfs.c] 01 static int rpi_kernel_debug_stat_set(void *data, u64 val)02 {03 int ret;04 05 raspbian_debug_state = (uint32_t)val;06 07 if ( raspbian_debug_state == 1402 ) {08 unsigned long ph
[라즈베리파이] 워크큐(Workqueue) - 워크는 누가 언제 호출하나? (2) @process_one_work
By Guillermo Austin Kim | 2018년 9월 12일 |
From...워크는 누가 언제 호출하나? (1) @process_one_work 다음 24~26번 줄 코드를 분석하겠습니다.24 worker->current_work = work;25 worker->current_func = work->func;26 worker->current_pwq = pwq; 24~25번 줄 코드에서 worker->current_work이란 멤버에 work를 등록하고 worker->current_func 함수 포인터에 워크 핸들러 함수를 지정합니다. 26번 줄 코드를 보면 worker->current_pwq에 워커 풀 주소를 저장합니다. process_one_work() 함수에서 워크 핸들러는 worker->current_func 함