저는 임베디드 Linux(kernel-5.10.24)에서 개발 중이며 커널 디버깅을 돕기 위해 커널 구성에서 Early_printk를 활성화했습니다.
일반적으로 커널 명령줄이 설정되어 console=ttyS0,115200 ....
있으며 커널에서 초기 printk 로그를 볼 수 있습니다.
그런데 오늘 실수로 명령줄을 다음으로 변경했는데 console=ttyS1,115200 ....
커널 부팅 중에 커널 로그가 표시되지 않을 것 같습니다.
놀랍게도 초기 printk가 완료된 커널 로그의 첫 번째 부분은 여전히 볼 수 있으며 그 이후에는 다른 로그가 없습니다.
그래서 내 질문은 존재하지 않는 장치(또는 잘못된 직렬 콘솔)로 설정된 right
경우에도 커널 로그를 콘솔 에 출력하기 위해 초기 printk를 어떻게 얻을 수 있습니까 ?console=
답변1
콘솔 시작 매개변수의 값을 고려하면 터미널이 직렬 회선을 통해 시스템에 연결되어 있다고 가정합니다.
console=이 존재하지 않는 장치로 설정된 경우에도 printk 출력 커널은 어떻게 올바른 콘솔에 일찍 기록됩니까?
이유는 간단합니다. 터미널 초기 부팅 메시지는 일부 터미널에 관계없이 출력됩니다.편안시작 매개변수 값이지만조기 인쇄그러나 시작 매개변수.
이것편안실행 매개변수는 "실제" 콘솔만 결정합니다. vg 표준 Linux 드라이버가 적절하게 초기화되면(즉, 초기화 단계 시작 시) 이 터미널이 콘솔로 사용됩니다.
설정이 잘못된 경우 논리적으로 부팅 후 시스템 콘솔에 출력이 없습니다.
Linux에서 커널 Early_printk의 콘솔 설정은 무엇입니까?
당신이 읽을 수 있듯이커널 명령줄 매개변수:
earlyprintk=vgaearlyprintk
=sclpearlyprintk
=xenearlyprintk
=직렬[,ttySn[,전송 속도]]
earlyprintk=직렬[,0x...[,전송 속도]]
earlyprintk=ttySn[,전송 속도]
earlyprintk=dbgp[ debugController#]
earlyprintk= pciserial[,force],bus:device.function[,baud rate]
Earlyprintk=xdbc[xhciController#]earlyprintk는 일반적인 콘솔 초기화 전에 커널이 충돌할 때 유용합니다. 일부 외관상의 문제가 있으므로 기본적으로 활성화되어 있지 않습니다.
실제 콘솔이 인계받을 때 비활성화하지 않으려면 ",keep"을 추가하세요.
vga, efi, 직렬 또는 USB 디버그 포트 중 하나만 한 번에 사용할 수 있습니다.
현재는 ttyS0 및 ttyS1만 이름으로 지정할 수 있습니다. 다른 I/O 포트는 다음과 같이 ttySn을 I/O 포트 주소로 대체하여 일부 아키텍처(최소 x86 및 ARM)에서 명시적으로 지정할 수 있습니다: earlyprintk=serial,0x1008,115200 이 작업은 /proc/tty/에서 수행할 수 있습니다. 드라이버/직렬: 2: uart:ST16650V2 포트:00001008 irq:18 ...
표준 직렬 드라이버와의 상호 작용은 그리 좋지 않습니다.
VGA 및 EFI 출력은 결국 실제 콘솔로 덮어쓰게 됩니다.
xen 출력은 Xen PV 게스트만 사용할 수 있습니다.
sclp 출력은 s390에서만 사용할 수 있습니다.
"pciserial"에 대한 선택적 "force"를 사용하면 해당 클래스 코드가 UART 클래스에 속하지 않더라도 PCI 장치를 사용할 수 있습니다.