저는 임베디드 Linux 시스템(kernel-5.10.24)을 개발 중이고 가능한 한 빨리 커널 로그를 얻고 싶어서 CONFIG_EARLY_PRINTK
커널 구성을 활성화했습니다.
U-boot를 사용하여 커널을 부팅할 때 처음으로 얻는 커널 로그는 커널 배너가 아니라 다음과 같습니다.
....
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
Starting kernel ...
[ 2.243226] printk: console [ttyS0] enabled
[ 2.247565] printk: bootconsole [early0] disabled
......
초기 printk가 예상대로 작동하지 않은 것 같습니다.
커널 명령줄은 다음과 같습니다.
console=ttyS0,115200 loglevel=8 init=/bin/bash root=ubi0:rootfs log_buf_len=32K
커널에서 가능한 한 빨리 로그를 인쇄하려면 특정 구성이 필요합니까?
답변1
CONFIG_EARLY_PRINTK
옵션에 대한 도움말 텍스트설명하다:
커널의 저수준 디버깅 기능을 사용하는 초기 콘솔을 갖고 싶다면 여기서 Y라고 말하세요.
earlyprintk
커널 매개변수에 추가이 콘솔을 활성화합니다.
커널 명령줄에는 이 earlyprintk
매개변수가 포함되어 있지 않습니다. 추가해 보세요.
게다가,ARM용 Early_printk.c사용printascii()
CONFIG_DEBUG_UART_FLOW_CONTROL
이 옵션의 영향을 받는 것으로 보이는 기능입니다 . 이 옵션이 설정된 경우 직렬 콘솔 케이블이 임베디드 시스템에 CTS 흐름 제어 신호를 제공합니까?
UART 초기화 코드가 없는 것으로 보이므로 전송 속도 및 기타 설정은 여전히 u-boot에서 설정한 값일 수 있습니다.
답변2
Earlyprintk를 살펴볼 수 있는 힌트를 준 리뷰를 공유해 주신 telcoM에게 감사드립니다.
그러다가 알아냈어요.
드라이버 earlyprintk
는 내 시스템에 연결되지 않은 첫 번째 직렬 콘솔을 사용하도록 하드코딩되어 있으므로(다른 직렬 포트를 사용함) 올바른 직렬 포트를 사용하도록 코드를 변경하면 earlyprintk
예상 작동을 누를 수 있습니다.
earlyprintk
다음으로 직렬 포트를 하드코딩하는 대신 구성할 수 있는지 확인하겠습니다 .