본문 바로가기

Core BSP 분석/리눅스 커널 핵심 분석

(90)
[리눅스커널] 특정 슬럽 오브젝트 트레이싱 slub debug enable 하려면 부트 커멘드 라인 추가 요망 set bootopts slub_debug=FZPUAO,kmalloc-128 https://www.kernel.org/doc/html/v5.4/vm/slub.html> ... F.e. in order to boot just with sanity checks and red zoning one would specify: slub_debug=FZ Trying to find an issue in the dentry cache? Try: slub_debug=,dentry to only enable debugging on the dentry cache. You may use an asterisk at the end of the slab name, ..
[리눅스커널] ftrace: boottime-trace(부트타임 ftrace) Overview 이번 포스트에서는 커널 v5.10에 반영된 boottime-trace를 소개합니다. 관련 문서는 아래 링크에서 확인할 수 있습니다. https://mjmwired.net/kernel/Documentation/trace/boottime-trace.rst 강의 동영상 링크는 다음과 같습니다. https://linuxfoundation.org/webinars/extra-boot-configuration-and-boot-time-tracing/ boottime-trace는 커멘드 라인을 통해 ftrace 설정을 해서 부팅 과정에서 ftrace의 주요 기능을 enable하는 기능입니다. 위 링크에서 소개된 패치는 initrd가 존재해야 효과가 있어(ex: 우분투), 배포판마다 활성화가 하기는 어렵..
[리눅스커널] LKDTM(Linux Kernel Dump Test Module) 소개 -c LKDTM 소개 LKDTM은 Linux Kernel Dump Test Module (LKDTM)의 약자로 kdump를 활용해 덤프(vmcore)가 제대로 추출되는지 테스트하는 용도로 작성된 드라이버입니다. 관련 자료는 아래 링크에서 확인할 수 있습니다. https://www.kernel.org/doc/html/latest/fault-injection/provoke-crashes.html LKDTM 소스는 커널 버전이 업그레이드되면서 (불필요하게) 복잡해 졌는데요. 전체 구조는 예전 v3.18 소스를 보면 더 빨리 파악할 수 있습니다. https://elixir.bootlin.com/linux/v3.18.130/source/drivers/misc/lkdtm.c LKDTM 컨피그를 키는 방법 LKDTM는 드..
[리눅스커널] IPI Call 요청: SGI(Software Generated Interrupt) 요청 (로우 레벨 뷰) 저번 포스트에서는 아래 실행 흐름으로 IPI Call을 요청하는 함수를 알아봤습니다. [리눅스커널] IPI(Inter Processor Interrupt) Call 요청 루틴(하이 레벨 뷰) 이어서 Arm 아키텍처에서 제공하는 SGI를 이용해 IPI Call을 처리하는 아키텍처에 의존적인 루틴을 분석하겠습니다. 다음은 gic_ipi_send_mask() 함수의 구현부입니다. https://elixir.bootlin.com/linux/v5.15.30/source/drivers/irqchip/irq-gic-v3.c 01 static void gic_ipi_send_mask(struct irq_data *d, const struct cpumask *mask) 02 { 03 int cpu; 04 05 if (W..
[리눅스커널] IPI(Inter Processor Interrupt) Call 요청 루틴(하이 레벨 뷰) IPI(Inter Processor Interrupt)의 약자로 지정한 CPU 코어를 타겟으로 인터럽트(소프트웨어적)를 유발하는 매커니즘입니다. 이번 포스트에서는 리눅스 커널에서 IPI Call을 요청하는 루틴을 리뷰하겠습니다. IPI Call은 아키텍처에 의존적으로 처리되므로 하이 레벨과 로우 레벨로 코드가 구현돼 있습니다. * High Level 코드 위치 kernel/sched/core.c kernel/smp.c kernel/irq/ipi.c * Low Level (Arm 아키텍처) 코드 위치 arch/arm64/kernel/smp.c drivers/irqchip/irq-gic-v3.c IPI Call 요청 루틴(하이 레벨) 아래 함수는 Qualcomm Watchdog 드라이버에 존재하는 함수인데요..
[LinuxKernel] Tip: How to disable CONFIG_SCHED_INFO By default kernel is configured with CONFIG_SCHED_INFO=y. Looking into .config we can notice the followings; # Scheduler Debugging # # CONFIG_SCHED_DEBUG is not set CONFIG_SCHED_INFO=y # CONFIG_SCHEDSTATS is not set # end of Scheduler Debugging With below patch, CONFIG_SCHED_INFO can be disabled diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index ee00c6c..dd70401 100644 --- a/lib/Kconfig.de..
[리눅스커널] kimage_voffset를 T32으로 디버깅하기 __schedule() 함수의 구현부 MX:FFFFFFC010AD0898|A9B77BFD __schedule: stp x29,x30,[sp,#-0x90]! ; x29,x30,[sp,#-144]! MX:FFFFFFC010AD089C|910003FD mov x29,sp MX:FFFFFFC010AD08A0|A90153F3 stp x19,x20,[sp,#0x10] ; x19,x20,[sp,#16] MX:FFFFFFC010AD08A4|A9025BF5 stp x21,x22,[sp,#0x20] ; x21,x22,[sp,#32] MX:FFFFFFC010AD08A8|12001C16 and w22,w0,#0xFF ; w22,preempt,#255 MX:FFFFFFC010AD08AC|D0002935 adrp x21,0xFF..
[리눅스커널] tracing: 파일 오픈 내역 확인하기 부팅 시간을 측정할 때 어떤 파일이 오픈됐는지 확인할 필요가 있습니다. 이 때 활용되면 좋은 패치입니다. Author: Austin Kim Date: Mon Sep 20 19:16:16 2021 +0900 open: trace the filename with directory When measuring booting-time, it is necessary to see how the file is opened. With this commit, we can trace how file is opened with ftrace buffer. -124 [001] .... 2.968597: do_sys_openat2: cached_setup_ke: open("/dev/tty5", 131072, 0) fd = 3, i..