[리눅스커널][디버깅] 유저공간 High Memory Zone 페이지 할당 과정
By Guillermo Austin Kim | 2019년 3월 18일 |
커널 크래시가 발생한 콜스택은 다음과 같습니다.프로세스는 이름은 Debugger인데 유저 프로세스입니다.-001|__dabt_svc(asm)-->|exception-002|__list_del(inline)-002|list_del(inline)-002|buffered_rmqueue(inline)-002|get_page_from_freelist(?, ?, order = 0, ?, high_zoneidx = 0, alloc_flags = 449, pref-003|__alloc_pages_nodemask(gfp_mask = 33685722, order = 0, zonelist = 0xC1731380, nodema-004|__alloc_zeroed_user_highpage(inline)-004|alloc_zer
리눅스 커널 기여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