리눅스 커널 기여2 (Contribution)-패치 작성 반영(Contribution) 확인(1/3)
By Guillermo Austin Kim | 2019년 10월 3일 |
패치 코드 작성 전 커널 코드 분석하기 이 포스팅을 올리는 주인공인 'Austin'은 리눅스 커널의 vmalloc 서브 시스템 내 __vmalloc_area_node() 함수 코드를 분석했습니다. 자, 그럼 소스 코드를 같이 볼까요? 특히 07~13번째 코드를 눈여겨봅시다. 01 static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,02 pgprot_t prot, int node){03 struct page **pages;04 unsigned int nr_pages, array_size, i;...05 area->nr_pages = nr_pages;06 /* Please no
[리눅스커널] 동기화: 뮤텍스의 기본 개념 소개하기
By Guillermo Austin Kim | 2019년 9월 14일 |
뮤텍스 소개 스핀락과 더불어 커널에서 가장 많이 쓰이는 락(Locking) 기법은 뮤텍스입니다. 뮤텍스는 휴면을 지원하며 프로세스 컨택스트에서 주로 쓰는 락(Locking) 기법입니다. 먼저 뮤텍스의 기본 개념과 동작 원리를 설명합니다. 이후 스핀락과 차이점을 알아보면서 뮤텍스의 특징을 살펴보고 뮤텍스 관련 커널 함수를 분석합니다. 뮤텍스(mutex)는 상호 배제(mutual exclusion)의 약자로 임계 영역에 한 개의 프로세스만 접근하는 동기화 기법입니다. 뮤텍스(mutex)는 사실 리눅스 커널에서만 쓰이는 락(Locking) 기법은 아닙니다. 뮤텍스는 운영 체제에서 쓰는 용어입니다. 뮤텍스는 '임계 구역에 2개 프로세스가 동시에 접근하지 못하도록 막는 기법'인데 서로 다른 운영체제마다 달
[리눅스커널] IRQ 스레드 생성 예제 코드 분석 - 라즈베리파이
By Guillermo Austin Kim | 2019년 4월 12일 |
6.3.2 라즈비안 92번 인터럽트 IRQ 스레드 생성 예제 코드 분석해보기 IRQ 스레드를 생성하는 함수 흐름을 알아봤으니 IRQ 스레드를 생성하는 예제 코드를 살펴보겠습니다. 분석할 소스 코드는 다음과 같습니다.[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/drivers/mmc/host/bcm2835-mmc.c]1 static int bcm2835_mmc_add_host(struct bcm2835_host *host)2 {3 struct mmc_host *mmc = host->mmc;4 struct device *dev = mmc->parent;...5 bcm2835_mmc_init(host, 0);6 ret = devm_request_th
[리눅스커널][디버깅] ftrace 설정과 로그 분석하기
By Guillermo Austin Kim | 2019년 3월 17일 |
ftrace 란 ftrace 리눅스 커널에서 제공하는 가장 강력한 트레이서입니다. ftrace는 커널 개발자에게 축복입니다. ftrace는 커널 세부 동작을 알기 쉽게 출력하기 때문입니다. ftrace의 특징은 다음과 같습니다.1. 인터럽트, 스케줄링, 커널 타이머 커널 동작을 상세히 추적해줍니다.2. 함수 필터를 지정하면 자신을 호출한 함수와 전체 콜스택까지 출력합니다. 물론 코드를 수정할 필요가 없습니다.3. 함수를 어느 프로세스가 실행하는지 알 수 있습니다.4. 함수 실행 시각을 알 수 있습니다.5. ftrace 로그를 키면 시스템 동작에 부하를 주지 않습니다. 다음에 이어 ftrace를 설정하는 방법을 알아보겠습니다. ftrace는 어떻게 설정할까? ftrace에서 제공하는 nop, func