본문 바로가기

Core BSP 분석

(119)
[리눅스커널] 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..
[리눅스커널] tracing: 부팅 과정에서 ftrace ring-buffer 늘리기 부팅 과정에서 ftrace 로깅이 될 때 ftrace ring-buffer 사이즈가 충분해야 부팅 과정의 메시지를 ftrace에 저장할 수 있습니다. ring-buffer 사이즈가 작으면 메시지가 overwritten됩니다. 본 페이지에 소개된 패치를 적용하면 부팅 과정에서 ftracing ring-buffer 사이즈를 키울 수 있습니다. commit 0deada593566918d6ac4a3e8df7bca8584fd83e1 (HEAD -> rpi-5.10.y) Author: Austin Kim Date: Mon Sep 20 14:52:54 2021 +0900 tracing: increase ftrace ring-buffer size In case ftrace ring-buffer size is small..
[리눅스커널] tracing: 부팅 과정에서 자동으로 ftrace 활성화하기 부팅 과정에서 ftrace가 초기화되면서 ftrace 로깅이 드라이버 레벨로 활성화가 되면, 구지 다음과 같은 명령어를 입력할 필요성을 못 느낍니다. 'echo 1 > /sys/kernel/debug/tracing/tracing_on' 본 페이지에 소개된 패치를 적용하면 부팅 과정에서 ftracing 로깅을 실행할 수 있습니다. commit 7f75bdc9ac6a2bae4d6352d15640b331d9becfbb Author: Austin Kim Date: Mon Sep 20 14:23:17 2021 +0900 tracing: enable ftrace at boot Using 'echo 1 > /sys/kernel/debug/tracing/tracing_on', the ftrace is enabled. ..
[리눅스커널] 커맨드 라인 추가 커널 커멘드 라인을 추가하는 가장 간단한 방법은 config에 커멘드 라인을 추가하는 것이다. 예를 들어; CONFIG_CMDLINE="console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait" 커널 로그; [ 0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 smsc95xx.macaddr=DC:A6:32:B0:F3:62 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000 console=tt..