리눅스

포스트: 554|조회수: 0|TERM
Items

Posts

554 posts

[리눅스커널] 메모리관리/디버깅: 가상주소를 물리주소로 변환 확인 실습

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

[리눅스커널] 메모리관리/디버깅: ftrace로 메모리 할당 해제 확인하기

Guillermo Austin Kim|2019년 9월 1일

ftrace에서 지원하는 kmalloc와 kfree 이벤트를 사용하면 kmalloc()와 kfree() 함수를 호출할 때 세부 정보를 알 수 있습니다.kmalloc 이벤트: kmalloc() 함수로 메모리 할당을 요청했을때 동작 kfree 이벤트: 할당한 메모리를 해제했하는 동작 kmalloc와 kfree 이벤트 소개하기 그러면 kmalloc와 kfree 이벤트를 켜서 ftrace를 받으면 어떤 패턴의 메시지를 볼 수 있을까요? 다음 로그를 같이 보겠습니다. [https://elinux.org/Kernel_dynamic_memory_analysis]1 init-1[000] .N..0.170000: kmalloc: call_site=c104deff ptr=c147dd20 bytes_req=29

[리눅스커널] 메모리 관리: 슬럽 오브젝트 해제하는 kfree() 함수 분석하기

Guillermo Austin Kim|2019년 9월 1일

kmalloc() 함수로 동적 메모리를 할당하고 난 후 사용하지 않으면 메모리를 반환해야 합니다. 이 때 kfree() 함수를 사용하면 됩니다. 이번 시간에는 kfree() 함수를 분석하면서 커널 내부에서 반환하는 동적 메모리를 어떻게 처리하는지 살펴보겠습니다.[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/source/mm/slub.c]01 void kfree(const void *x)02 {03 struct page *page;04 void *object = (void *)x;0506 trace_kfree(_RET_IP_, x);0708 if (unlikely(ZERO_OR_NULL_PTR(x)))09 return;1011 page = virt_to_h

[리눅스커널] 메모리 관리: kmalloc 캐시 슬럽 오브젝트 할당 커널 함수 분석하기

Guillermo Austin Kim|2019년 9월 1일

우리는 'kmalloc() 함수를 호출하면 동적 메모리를 할당할 수 있다.'란 사실을 알고 있습니다. 하지만 kmalloc() 함수에서 호출하는 커널 내부 함수는 거의 분석하지는 않는 듯 합니다. 이번 시간에는 kmalloc() 함수와 이 함수에서 호출하는 다음 함수를 분석합니다.kmalloc_index()kmem_cache_alloc_trace()slab_alloc()slab_alloc_node() kmalloc() 함수 분석하기 우리가 드라이버 드라이버에서 동적 메모리를 할당할 때 주로 사용하는 함수는 kmalloc()입니다. 그런데 kmalloc() 함수는 생각보다 분석하기 어렵습니다.  슬랩 캐시와 슬럽 오브젝트의 개념을 알고 있어야 분석이 가능하기 때문입니다. 이어서