[리눅스커널][디버깅] 슬럽(슬랩) 캐시 오브젝트 T32로 메모리 디버깅하기
By Guillermo Austin Kim | 2019년 3월 30일 |
리눅스 커널 동적 메모리 할당을 위해 슬럽 캐시를 씁니다.이번 시간에서는 kmalloc-64 슬럽 캐시 자료 구조를 통해 kmalloc-64 슬럽 오브젝트를 확인하는 방법을 소개합니다. 먼저 kmalloc-size 타입 슬럽 캐시를 관리하는 kmalloc_caches 전역 변수를 보겠습니다. kmalloc_caches 전역 변수의 세부 필드는 다음과 같습니다. (static struct kmem_cache * [14]) kmalloc_caches = ( [0] = 0x0, [1] = 0x0, [2] = 0xF1401E00, // "kmalloc-192" [3] = 0x0, [4] = 0x0, [5] = 0x0, [6] = 0xF1401F00 -> (
[리눅스커널] 인터럽트: 'Unbalanced enable for IRQ' 메시지에 대해서
By Guillermo Austin Kim | 2020년 2월 28일 |
프로젝트를 개발하다 보면 다음과 같은 WARN() 메시지를 커널 로그로 볼 수 있다. Unbalanced enable for IRQ 23------------[ cut here ]------------WARNING: at kernel/irq/manage.c:437:NIP [c00000000016de8c] .__enable_irq+0x11c/0x140LR [c00000000016de88] .__enable_irq+0x118/0x140Call Trace:[c000003ea1f23880] [c00000000016de88] .__enable_irq+0x118/0x140 (unreliable)[c000003ea1f23910] [c00000000016df08] .enable_irq+0x58/0xa0[c000003ea
[리눅스커널][가상파일시스템] 슈퍼블록 객체란 무엇인가 - (struct super_block, struct super_operations)
By Guillermo Austin Kim | 2019년 4월 8일 |
슈퍼블락 객체란 무엇인가? 슈퍼블록 객체는 파일시스템에 대한 메타 정보와 각 파일시스템 별 슈퍼블락 함수 오퍼레이션으로 구성돼 있습니다. 구체적으로 슈퍼블록 객체는 파일시스템 마운트 정보와 실행 플래그를 저장합니다. 예를 들면 디스크 저장 기반 ext4 파일시스템과 시스템 정보를 램에서 출력하는 proc 파일시스템은 서로 다른 슈퍼블록 마운트와 실행 플래그 정보를 확인할 수 있습니다. 슈퍼 블록에 대한 이해를 돕기 위해 간단한 테스트를 해보겠습니다. 다음 경로에 가서 touch 명령어로 파일을 하나 생성합시다.root@raspberrypi:/home/pi# cd /procroot@raspberrypi:/proc# touch RPi_VFS.ctouch: cannot touch 'RPi_VFS.c': No
[리눅스커널] 가상파일시스템/소개: 함수 오퍼레이션이란 무엇인가
By Guillermo Austin Kim | 2019년 9월 3일 |
이번 절에서 소개했듯이, 각각 파일 시스템에 액세스를 하기 위해서 먼저 가상 파일시스템에 접근합니다. 이 때 가상 파일 시스템에서 지원하는 4가지 객체에서 지정한 함수 포인터를 통해 파일 시스템 세부 함수에 접근합니다. 4개 객체별로 지정한 함수 포인터 연산을 함수 오퍼레이션이라고 말합니다. 즉, 이전 소절에서 소개한 슈퍼블록, 아이노드, 파일, 덴트리 객체들은 모두 함수 오퍼레이션(연산)을 지원합니다. 슈퍼 블록 함수 오퍼레이션 코드와 동작 파악해보기 먼저 슈퍼 블록 함수 오퍼레이션 코드 분석으로 함수 오퍼레이션 동작을 소개합니다. 다음 코드를 같이 분석해봅시다.[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/fs/inode.c]1