AOSP: printk.devkmsg=on

What BOARD_KERNEL_CMDLINE += printk.devkmsg=on does in AOSP and how it works.
July 3, 2026

AOSP: printk.devkmsg=on

BOARD_KERNEL_CMDLINE은 AOSP 빌드 시스템에서 커널 커맨드라인에 파라미터를 추가하는 변수입니다.
여기에 printk.devkmsg=on을 추가하면, 빌드된 이미지가 부팅될 때 해당 파라미터가 커널에 전달됩니다.
BoardConfig.mk
sh

/dev/kmsg

/dev/kmsg는 커널 로그 Ring buffer (dmesg) 에 직접 접근하는 인터페이스입니다.
Linux 3.5에서 유저스페이스 프로세스가 이 파일에 쓰기하여 커널 로그에 메시지를 직접 삽입할 수 있는 기능이 처음 도입되었습니다.
Linux 3.5 Relate patch: kmsg: export printk records to the /dev/kmsg interface
sh
유저스페이스 프로세스는 이 파일에 직접 메시지를 기록하거나, 읽어서 실시간 커널 로그 스트림을 수집할 수도 있습니다.

How It Works

유저스페이스의 무분별한 쓰기로 인한 커널 로그 버퍼 덤프/오버런 방지를 위해, Linux 4.7부터 /dev/kmsg 쓰기에 대한 rate limitingprintk.devkmsg 파라미터가 추가되었습니다.
Linux 4.7 Relate patch: printk: add kernel parameter to control writes to /dev/kmsg
sh
이에 따라 같은 메시지가 짧은 시간 내에 유저스페이스에서 반복해서 쓰여질 경우 suppress되어 커널 버퍼에 기록되지 않으며, printk.devkmsg 파라미터를 통해 이 동작과 권한을 동적으로 제어하게 됩니다.
동작
onrate limit 없이 모든 유저스페이스 쓰기 허용
off유저스페이스에서 /dev/kmsg 쓰기 불가
ratelimit기본 rate limit 적용 (커널 기본값)
on으로 설정하면 logd, init, healthd 등 Android 시스템 프로세스들이 rate limit 없이 커널 로그 버퍼에 메시지를 기록할 수 있게 됩니다.

Result

  • dmesg에서 커널 로그와 유저스페이스 로그를 한 타임라인에서 확인 가능합니다.
  • 크래시나 패닉 발생 직전의 유저스페이스 메시지가 커널 버퍼에 남아 post-mortem 디버깅에 활용할 수 있습니다.
  • pstore / ramoops와 함께 사용하면 재부팅 후에도 크래시 직전 로그를 보존할 수 있습니다.
  • 부팅 초기(logd 시작 전) init 로그가 유실 없이 dmesg에서 확인 가능합니다.
디버깅 빌드에서는 on을 사용하고, 양산(user) 빌드에서는 보안 및 성능 측면을 고려해 ratelimit 또는 제거하는 것이 일반적입니다.
Jooojub
System S/W engineer
Explore Tags
Series
    Recent Post
    © 2026. jooojub. All right reserved.