[리눅스커널] 메모리 매니지먼트: 존(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
[리눅스커널][SoftIRQ] Soft IRQ 컨택스트에 대해서 - in_softirq()
By Guillermo Austin Kim | 2019년 4월 14일 |
6.10 Soft IRQ 컨택스트에 대해서 인터럽트가 발생한 후 인터럽트 핸들러가 실행 중인 상태를 인터럽트 컨택스트라고 합니다. 이와 마찬가지로 Soft IRQ 서비스를 실행 중인 상태를 Soft IRQ 컨택스트라고 부릅니다. 이번 절에서는 Soft IRQ 컨택스트 시작 시점과 관련 자료구조에 대해서 살펴보겠습니다. 6.10.1 Soft IRQ 컨택스트 시작점은 어디인가? Soft IRQ 컨택스트는 Soft IRQ 서비스를 실행할 때 활성화됩니다. Soft IRQ 서비스는 __do_softirq() 함수에서 실행하니 다음 코드를 보면서 Soft IRQ 컨택스트 활성화 시점을 알아봅시다.[https://elixir.bootlin.com/linux/v4.19.30/source/kernel/softirq.