Android System의 Kernel Buffer Size를 확인 및 변경하는 방법을 기술한다.
Kernel log의 buffer size는 CONFIG_LOG_BUF_SHIFT 에 따라 변경된다.
buffer의 크기는 설정된 값의 2의 제곱수로 설정된다.
예를 들면, 아래의 예시에서는 값이 17로 되어있으므로 2^17 = 128KB로 설정이 되어있는 것으로 해석할 수 있다.
설정 값은 아래의 Command를 입력하여 확인할 수 있다.
커널을 빌드하는 과정에서 /proc/config.gz 을 통해 커널 configuration의 상태를 쉽게 확인할 수 있다.
$ adb shell
$ zcat /proc/config.gz | grep CONFIG_LOG_BUF_SHIFT
CONFIG_LOG_BUF_SHIFT=17
config.gz 파일을 생성하는것도 Config를 설정하여 생성 유무를 설정할 수 있으며, 아래에 Config가 y로 설정되어있는 것을 확인할 수있다. (필수적으로 y로 설정하는것이 좋을듯!)
out/target/product/[platformName]/.config file에서 Android build시, 설정된 Config들을 확인할 수 있다.
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_IKHEADERS=y
CONFIG_LOG_BUF_SHIFT=17 <<<
CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
CONFIG_GENERIC_SCHED_CLOCK=y
보통은 init/KConfig 파일에 정의되어있다.
kernel 또는 kernel-5.10 directory 내에서 검색하여 찾을수 있다.
...
config LOG_BUF_SHIFT
int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"
range 12 25 if !H8300
range 12 19 if H8300
default 17
depends on PRINTK
help
Select the minimal kernel log buffer size as a power of 2.
The final size is affected by LOG_CPU_MAX_BUF_SHIFT config
parameter, see below. Any higher size also might be forced
by "log_buf_len" boot parameter.
Examples:
17 => 128 KB
16 => 64 KB
15 => 32 KB
14 => 16 KB
13 => 8 KB
12 => 4 KB
...
나의 경우, LOG_BUF_SHIFT를 별도로 설정해주지 않았기 때문에 default값인 17로 설정되어있었다. 값의 범위는 12 - 10까지 허용한다.
Config의 Default 값을 확인해주었으니 설정하고자 하는 값을 overlay 해주어야한다.
overlay는 kernel의 deconfig 파일에서 설정한다.
kernel-5.10/arch/arm64/config/[kernel_name]_deconfig 에서 설정되는 것을 찾을 수 있었고, 아래의 내용을 추가하였다.
CONFIG_LOG_BUF_SHIFT=19
값 변경 및 빌드 후 결과를 확인하였을 때, dmesg의 size가 변경된 것을 확인할 수 있다.
(dmesg.txt : CONFIG_LOG_BUF_SHIFT=17
dmesg_increase : CONFIG_LOG_BUF_SHIFT=19)

Kernel buffer 외에도 다른 Config 파일을 변경하여 Config 값을 변경할 수 있다는 것을 알게 되었고, KConfig, deconfig와 같은 config 설정파일들을 설정 및 수정하는 방법과 빌드에 포함되는 과정 등을 자세히 공부해볼 필요가 있다고 생각했다😁
🔗 HOW TO CHANGE LINUX KERNEL DMESG BUFFER SIZE
🔗 CONFIG_LOG_BUF_SHIFT: Kernel log buffer size