[리눅스커널][가상파일시스템] 파일 객체: close() 함수 연산 세부 동작 분석
By Guillermo Austin Kim | 2019년 4월 2일 |
파일 객체: close() 함수 연산 세부 동작 분석 다음 파일을 닫을 때 호출하는 sys_close() 함수 코드를 볼 차례입니다.1 SYSCALL_DEFINE1(close, unsigned int, fd)2 {3 int retval = __close_fd(current->files, fd);45 /* can't restart close syscall because file table entry was cleared */6 if (unlikely(retval == -ERESTARTSYS ||7 retval == -ERESTARTNOINTR ||8 retval == -ERESTARTNOHAND ||9 retval == -ERESTART_RESTARTBLOCK))10
[리눅스커널] 메모리 매니지먼트: 존(struct zone) 구조체에 접근하기
By Guillermo Austin Kim | 2021년 8월 25일 |
< v5.10: 커널 버전 > 많은 분들은 리눅스 메모리 시스템은 다음과 같은 구조로 구성돼 있다고 알고 있습니다. 메모리 뱅크 - 노드 -- 존 #1 -- 존 #2 존은 'struct zone' 구조체로 확인할 수 있습니다. 그런데 zone 구조체의 필드는 어떻게 접근할 수 있을까요? 이번 포스트는 zone 구조체를 디버깅하는 방법을 소개합니다. 라즈베리 파이에서 zone 구조체의 필드 확인하기 zone 구조체의 필드는 어떻게 확인할 수 있을 까요?OOM Killer가 실행할 때 커널 로드에서 각 존 별로 존재하는 페이지의 갯수를 출력합니다. 다음은 라즈비안에서 'echo f > /proc/sysrq-trigger' 명령어를 입력하면 OOM Killer가 실행될 때 출력되
[리눅스커널][디버깅] 임베디드 디버거 전설 Trace32
By Guillermo Austin Kim | 2019년 3월 21일 |
임베디드 디버거 전설 Trace32 Trace32(T32)는 임베디드 소프트웨어에서 많이 쓰고 있는 전설적인 디버깅 프로그램입니다.다른 RTOS 개발에도 Trace32를 많이 쓰고 있으며 대부분 임베디드 개발자는 Trace32를 다룰 줄 압니다. 실전 개발에서는 너무나 유명하고 인기 있는 디버깅 프로그램이니 신입 개발자들은 잘 숙지하도록 합시다. Trace32는 여러 가지 강력한 디버깅 기능과 다양한 명령어를 지원합니다.세부 내용은 이 책의 범위를 넘어서므로 다루지 않습니다. 실전 개발에 적용할 수 있는 Trace32 사용법(커널 크래시 디버깅)은 저의 개인 Youtube 채널로 방문하면 됩니다. 이 책에서는 Trace32 시뮬레이터 기능을 활용해 커널 자료 구조를 소개합니다. 신입 개발자가 참고할만
[리눅스커널] 메모리관리/디버깅: kmalloc() 함수로 메모리 할당 후 슬랩 캐시 종류 확인하기
By Guillermo Austin Kim | 2019년 9월 3일 |
이번 소절에서는 가상주소를 물리주소로 변환하는 과정을 실습으로 알아봅시다. 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