커널의 초기 printk가 예상대로 작동하지 않는 것 같습니다.

커널의 초기 printk가 예상대로 작동하지 않는 것 같습니다.

저는 임베디드 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다음으로 직렬 포트를 하드코딩하는 대신 구성할 수 있는지 확인하겠습니다 .

관련 정보