Core BSP 분석 (119) 썸네일형 리스트형 [리눅스커널] 라즈비안: 전체 ftrace 이벤트(Armv8: Aarch64) 아래는 v5.10, 라즈비안 커널(Aarch64)에서 확인한 전체 ftrace event의 종류이다. root@raspberrypi:/sys/kernel/debug/tracing/events# tree -L 2 . ├── alarmtimer │ ├── alarmtimer_cancel │ ├── alarmtimer_fired │ ├── alarmtimer_start │ ├── alarmtimer_suspend │ ├── enable │ └── filter ├── asoc │ ├── enable │ ├── filter │ ├── snd_soc_bias_level_done │ ├── snd_soc_bias_level_start │ ├── snd_soc_dapm_connected │ ├── snd_soc_dap.. [Linux Kernel] Selinux: selinux_enforcing_boot selinux_enforcing_boot is configured within enforcing_setup(). https://elixir.bootlin.com/linux/v5.12.1/source/security/selinux/hooks.c #ifdef CONFIG_SECURITY_SELINUX_DEVELOP static int selinux_enforcing_boot; static int __init enforcing_setup(char *str) { unsigned long enforcing; if (!kstrtoul(str, 0, &enforcing)) selinux_enforcing_boot = enforcing ? 1 : 0; return 1; } __setup("enforcing=", enf.. [Linux Kernel] Selinux: selinux_enabled Now, let's find selinux_enabled is set as 1 or 0. https://elixir.bootlin.com/linux/v4.19.30/source/security/selinux/hooks.c #ifdef CONFIG_SECURITY_SELINUX_BOOTPARAM int selinux_enabled = CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE; static int __init selinux_enabled_setup(char *str) { unsigned long enabled; if (!kstrtoul(str, 0, &enabled)) selinux_enabled = enabled ? 1 : 0; return 1; } __setup("selin.. Asan(Address sanitizer, AddressSanitizer) 이란 Asan은 Address sanitizer의 약자입니다. Address Sanitizer는 컴파일러를 수정해 프로그램이 동작하는 도중에 일어나는 잘못된 메모리 (주소) 액세스를 검출하기 위한 도구입니다. Git Hub Asan에 대한 상세한 내용은 아래 깃허브에서 확인할 수 있습니다. https://github.com/google/sanitizers/wiki/AddressSanitizer Asan의 장점과 단점 사실 Asan과 비슷한 용도로 사용됐던 Valgrind라는 툴이 있습니다. 하지만 Valgrind는 치명적인 단점이 있습니다. 프로그램의 실행 속도가 매우 느려진다는 점인데, Valgrind이 모든 명령어를 에뮬레이션해 동작하기 때문입니다. 그렇다면 Asan은 Valgrind보다 속도가 빠를까요?.. [리눅스커널] 드라이버: 셸로 bind와 unbind 명령어를 입력해 probe/remove 함수 호출하기 리눅스 디바이스 드라이버를 플렛폼 디바이스 규칙에 맞게 작성하면 몇 가지 편리한 점이 있습니다. 그 중 하나가 셸 커맨드로 probe/release 함수를 호출할 수 있다는 점입니다. 모듈 타입 디바이스 드라이버를 검증할 때 활용하면 좋을 꿀팁이니, 많은 개발자 분들이 활용했으면 좋겠습니다. 셸 명령어로 디렉터리 확인하기 먼저 /sys/bus/platform/drivers/gpio-keys 디렉터리로 이동합시다. pi:/sys/bus/platform/drivers # cd gpio-keys/ pi:/sys/bus/platform/drivers/gpio-keys # ls bind soc:gpio_keys uevent unbind 확인하니 bind와 unbind 파일이 보입니다. pi:/sys/bus/pla.. [리눅스] 프로세스를 지정한 CPU에서 실행: sched_setaffinity() 함수 소형 임베디드 장비를 제외하고는 대부분 시스템은 멀티 CPU 코어 환경에서 개발됩니다. 멀티 프로세스(Multiprocess) 기반으로 작성된 데몬을 실행하면 여러 CPU 코어에 적당히 나뉘어 실행되는 것을 쉽게 볼 수 있습니다. CPU0에서 실행됐다가 CPU2에서 실행되는 것이죠. 그런데 가끔은 특정 작업을 수행하는 프로세스가 특정 CPU 코어에서 실행되도록 설정해야 할 때가 있습니다. 여러가지 이유가 있지만 요약하면 다음과 같습니다. * 실행하는 프로세스와 관련된 인터럽트가 특정 CPU 코어에서만 트리거됨(IRQ Affinity라고 하죠.) * 프로세스가 여러 CPU 코어에 옮겨 다니면서 실행할 때 요구되는 오버헤드(마이그레이션)을 최소화하자 참고로 커널이 프로세스를 어떤 CPU 코어에 할당하는지는,.. [리눅스커널] CONFIG_FUNCTION_TRACER를 키는 방법 defconfig 파일에서 아래 컨피그를 추가하면, CONFIG_IRQSOFF_TRACER=y CONFIG_SCHED_TRACER=y CONFIG_STACK_TRACER=y .config에서 아래 내용을 확인할 수 있다. CONFIG_FTRACE=y CONFIG_FUNCTION_TRACER=y CONFIG_FUNCTION_GRAPH_TRACER=y CONFIG_IRQSOFF_TRACER=y # CONFIG_PREEMPT_TRACER is not set CONFIG_SCHED_TRACER=y [리눅스] LK(Little Kernel): 전처리 파일을 위한 설정(--save-temps) LK(Little Kernel)에서 전처리 파일을 추출하기 위해서 아래 패치 코드를 반영하면 됩니다. diff --git a/engine.mk b/engine.mk index 74f289c..51ff0f1 100644 --- a/engine.mk +++ b/engine.mk @@ -204,7 +204,7 @@ endif # default to no ccache CCACHE ?= -CC := $(CCACHE) $(TOOLCHAIN_PREFIX)${TOOLCHAIN} +CC := $(CCACHE) $(TOOLCHAIN_PREFIX)${TOOLCHAIN} --save-temps LD := $(TOOLCHAIN_PREFIX)ld OBJDUMP := $(TOOLCHAIN_PREFIX)objdump OBJCOPY .. 이전 1 ··· 4 5 6 7 8 9 10 ··· 15 다음