Core BSP 분석/리눅스 커널 핵심 분석 (90) 썸네일형 리스트형 [리눅스커널] 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.. [리눅스커널] 라즈비안: 전체 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.. 이전 1 2 3 4 5 6 ··· 12 다음