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.mksh
/dev/kmsg
/dev/kmsg는 커널 로그 Ring buffer (
Linux 3.5에서 유저스페이스 프로세스가 이 파일에
dmesg) 에 직접 접근하는 인터페이스입니다.Linux 3.5에서 유저스페이스 프로세스가 이 파일에
쓰기하여 커널 로그에 메시지를 직접 삽입할 수 있는 기능이 처음 도입되었습니다.Linux 3.5 Relate patch: kmsg: export printk records to the /dev/kmsg interfacesh
유저스페이스 프로세스는 이 파일에 직접 메시지를 기록하거나, 읽어서 실시간 커널 로그 스트림을 수집할 수도 있습니다.
How It Works
유저스페이스의 무분별한 쓰기로 인한 커널 로그 버퍼 덤프/오버런 방지를 위해, Linux 4.7부터
/dev/kmsg 쓰기에 대한 rate limiting 및 printk.devkmsg 파라미터가 추가되었습니다.Linux 4.7 Relate patch: printk: add kernel parameter to control writes to /dev/kmsgsh
이에 따라 같은 메시지가 짧은 시간 내에 유저스페이스에서 반복해서 쓰여질 경우 suppress되어 커널 버퍼에 기록되지 않으며, printk.devkmsg 파라미터를 통해 이 동작과 권한을 동적으로 제어하게 됩니다.
| 값 | 동작 |
|---|---|
on | rate 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 또는 제거하는 것이 일반적입니다.