← Documents Documentation/arch/x86/earlyprintk.rst GitHub 원문 ↗

Linux 6.18.37 · Architecture

Early Printk

USB2 EHCI debug port와 NetChip key를 이용한 earlyprintk=dbgp 구성 및 시험 절차입니다.

Source pathDocumentation/arch/x86/earlyprintk.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

earlyprintk.rst:1-151

host/target의 EHCI physical debug port와 client/console을 NetChip USB debug key로 직접 연결하고, 양쪽 kernel에 각각 `CONFIG_EARLY_PRINTK_DBGP`, `CONFIG_USB_SERIAL_DEBUG`를 enable합니다.

host는 `earlyprintk=dbgp[,keep]`, console은 `/dev/ttyUSBx`를 사용합니다. EHCI debug controller는 특정 physical port에 고정되므로 hub를 거치지 말고 `lspci`, `lsusb`, reboot 실험으로 port와 controller number를 확인합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. SPDX-License-Identifier: GPL-2.0
2
3 ============
4 Early Printk
5 ============
6
7 Mini-HOWTO for using the earlyprintk=dbgp boot option with a
8 USB2 Debug port key and a debug cable, on x86 systems.
9
10 You need two computers, the 'USB debug key' special gadget and
11 two USB cables, connected like this::
12
13 [host/target] <-------> [USB debug key] <-------> [client/console]
14
15 Hardware requirements
16 =====================
17
18 a) Host/target system needs to have USB debug port capability.
19
20 You can check this capability by looking at a 'Debug port' bit in
21 the lspci -vvv output::
22
23 # lspci -vvv
24 ...
25 00:1d.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 (rev 03) (prog-if 20 [EHCI])
26 Subsystem: Lenovo ThinkPad T61
27 Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
28 Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
29 Latency: 0
30 Interrupt: pin D routed to IRQ 19
31 Region 0: Memory at fe227000 (32-bit, non-prefetchable) [size=1K]
32 Capabilities: [50] Power Management version 2
33 Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
34 Status: D0 PME-Enable- DSel=0 DScale=0 PME+
35 Capabilities: [58] Debug port: BAR=1 offset=00a0
36 ^^^^^^^^^^^ <==================== [ HERE ]
37 Kernel driver in use: ehci_hcd
38 Kernel modules: ehci-hcd
39 ...
40
41 .. note::
42 If your system does not list a debug port capability then you probably
43 won't be able to use the USB debug key.
44
45 b) You also need a NetChip USB debug cable/key:
46
47 http://www.plxtech.com/products/NET2000/NET20DC/default.asp
48
49 This is a small blue plastic connector with two USB connections;
50 it draws power from its USB connections.
51
52 c) You need a second client/console system with a high speed USB 2.0 port.
53
54 d) The NetChip device must be plugged directly into the physical
55 debug port on the "host/target" system. You cannot use a USB hub in
56 between the physical debug port and the "host/target" system.
57
58 The EHCI debug controller is bound to a specific physical USB
59 port and the NetChip device will only work as an early printk
60 device in this port. The EHCI host controllers are electrically
61 wired such that the EHCI debug controller is hooked up to the
62 first physical port and there is no way to change this via software.
63 You can find the physical port through experimentation by trying
64 each physical port on the system and rebooting. Or you can try
65 and use lsusb or look at the kernel info messages emitted by the
66 usb stack when you plug a usb device into various ports on the
67 "host/target" system.
68
69 Some hardware vendors do not expose the usb debug port with a
70 physical connector and if you find such a device send a complaint
71 to the hardware vendor, because there is no reason not to wire
72 this port into one of the physically accessible ports.
73
74 e) It is also important to note, that many versions of the NetChip
75 device require the "client/console" system to be plugged into the
76 right hand side of the device (with the product logo facing up and
77 readable left to right). The reason being is that the 5 volt
78 power supply is taken from only one side of the device and it
79 must be the side that does not get rebooted.
80
81 Software requirements
82 =====================
83
84 a) On the host/target system:
85
86 You need to enable the following kernel config option::
87
88 CONFIG_EARLY_PRINTK_DBGP=y
89
90 And you need to add the boot command line: "earlyprintk=dbgp".
91
92 .. note::
93 If you are using Grub, append it to the 'kernel' line in
94 /etc/grub.conf. If you are using Grub2 on a BIOS firmware system,
95 append it to the 'linux' line in /boot/grub2/grub.cfg. If you are
96 using Grub2 on an EFI firmware system, append it to the 'linux'
97 or 'linuxefi' line in /boot/grub2/grub.cfg or
98 /boot/efi/EFI/<distro>/grub.cfg.
99
100 On systems with more than one EHCI debug controller you must
101 specify the correct EHCI debug controller number. The ordering
102 comes from the PCI bus enumeration of the EHCI controllers. The
103 default with no number argument is "0" or the first EHCI debug
104 controller. To use the second EHCI debug controller, you would
105 use the command line: "earlyprintk=dbgp1"
106
107 .. note::
108 normally earlyprintk console gets turned off once the
109 regular console is alive - use "earlyprintk=dbgp,keep" to keep
110 this channel open beyond early bootup. This can be useful for
111 debugging crashes under Xorg, etc.
112
113 b) On the client/console system:
114
115 You should enable the following kernel config option::
116
117 CONFIG_USB_SERIAL_DEBUG=y
118
119 On the next bootup with the modified kernel you should
120 get a /dev/ttyUSBx device(s).
121
122 Now this channel of kernel messages is ready to be used: start
123 your favorite terminal emulator (minicom, etc.) and set
124 it up to use /dev/ttyUSB0 - or use a raw 'cat /dev/ttyUSBx' to
125 see the raw output.
126
127 c) On Nvidia Southbridge based systems: the kernel will try to probe
128 and find out which port has a debug device connected.
129
130 Testing
131 =======
132
133 You can test the output by using earlyprintk=dbgp,keep and provoking
134 kernel messages on the host/target system. You can provoke a harmless
135 kernel message by for example doing::
136
137 echo h > /proc/sysrq-trigger
138
139 On the host/target system you should see this help line in "dmesg" output::
140
141 SysRq : HELP : loglevel(0-9) reBoot Crashdump terminate-all-tasks(E) memory-full-oom-kill(F) kill-all-tasks(I) saK show-backtrace-all-active-cpus(L) show-memory-usage(M) nice-all-RT-tasks(N) powerOff show-registers(P) show-all-timers(Q) unRaw Sync show-task-states(T) Unmount show-blocked-tasks(W) dump-ftrace-buffer(Z)
142
143 On the client/console system do::
144
145 cat /dev/ttyUSB0
146
147 And you should see the help line above displayed shortly after you've
148 provoked it on the host system.
149
150 If it does not work then please ask about it on the [email protected]
151 mailing list or contact the x86 maintainers.
152

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

USB2 debug-port early printk 구성

1-14

이 `GPL-2.0` mini-HOWTO는 x86 system에서 USB2 Debug Port key와 debug cable로 `earlyprintk=dbgp` boot option을 사용하는 방법을 설명합니다. computer 두 대, special USB debug key, USB cable 두 개가 필요합니다.

USB2 early printk 연결
host/targetUSB debug keyclient/console

원문의 단일 ASCII 연결도를 동일한 양방향 link 구조로 다시 그렸습니다.

hardware requirement와 physical port

15-80

host/target system은 USB debug-port capability가 있어야 합니다. `lspci -vvv` output에서 `Debug port` bit를 확인할 수 있으며 다음 예에서는 EHCI controller의 `Capabilities: [58] Debug port: BAR=1 offset=00a0` line이 capability를 나타냅니다.

# lspci -vvv
...
00:1d.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 (rev 03) (prog-if 20 [EHCI])
        Subsystem: Lenovo ThinkPad T61
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0
        Interrupt: pin D routed to IRQ 19
        Region 0: Memory at fe227000 (32-bit, non-prefetchable) [size=1K]
        Capabilities: [50] Power Management version 2
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
                Status: D0 PME-Enable- DSel=0 DScale=0 PME+
        Capabilities: [58] Debug port: BAR=1 offset=00a0
                     ^^^^^^^^^^^ <==================== [ HERE ]
        Kernel driver in use: ehci_hcd
        Kernel modules: ehci-hcd
...

system이 debug-port capability를 나열하지 않으면 USB debug key를 사용할 수 없을 가능성이 큽니다.

NetChip USB debug cable/key도 필요합니다. 원문이 가리키는 제품 URL은 `http://www.plxtech.com/products/NET2000/NET20DC/default.asp`입니다. USB connection 두 개가 달린 작은 파란 connector이며 USB에서 power를 얻습니다. client/console system에는 high-speed USB 2.0 port가 필요합니다.

NetChip device는 host/target의 실제 physical debug port에 직접 연결해야 하며 중간에 USB hub를 둘 수 없습니다. EHCI debug controller는 특정 physical USB port에 고정되어 그 port에서만 early-printk device로 동작합니다. EHCI host-controller wiring상 보통 first physical port에 연결되고 software로 바꿀 수 없습니다.

정확한 port는 각 physical port에 연결해 reboot하며 실험하거나, `lsusb` 및 여러 port에 device를 꽂을 때 USB stack이 출력하는 kernel message로 찾을 수 있습니다. 일부 vendor는 debug port를 외부 connector에 연결하지 않는데 기술적 이유가 없으므로 이런 hardware는 vendor에 문제를 제기해야 합니다.

많은 NetChip version은 제품 logo가 위를 향하고 왼쪽에서 오른쪽으로 읽히는 상태에서 client/console을 device 오른쪽에 연결해야 합니다. 5 V power가 한쪽에서만 오며 reboot되지 않는 쪽이어야 하기 때문입니다.

host와 console software 설정

81-129

host/target kernel에서는 다음 config를 enable합니다.

CONFIG_EARLY_PRINTK_DBGP=y

boot command line에 `earlyprintk=dbgp`를 추가합니다. GRUB은 `/etc/grub.conf`의 `kernel` line, BIOS firmware의 GRUB2는 `/boot/grub2/grub.cfg`의 `linux` line, EFI firmware의 GRUB2는 `/boot/grub2/grub.cfg` 또는 `/boot/efi/EFI/<distro>/grub.cfg`의 `linux`나 `linuxefi` line에 붙입니다.

EHCI debug controller가 여러 개면 PCI bus enumeration 순서의 controller number를 지정합니다. number가 없으면 `0`, 즉 첫 controller입니다. 둘째 controller에는 `earlyprintk=dbgp1`을 사용합니다. regular console이 살아나면 earlyprintk console은 보통 꺼지며 Xorg crash 같은 이후 문제까지 보려면 `earlyprintk=dbgp,keep`으로 channel을 유지합니다.

client/console kernel에서는 다음 config를 enable합니다.

CONFIG_USB_SERIAL_DEBUG=y

수정 kernel로 boot하면 `/dev/ttyUSBx` device가 생깁니다. minicom 같은 terminal emulator를 `/dev/ttyUSB0`에 연결하거나 `cat /dev/ttyUSBx`로 raw output을 봅니다. Nvidia Southbridge system에서는 kernel이 debug device가 연결된 port를 probe해 찾습니다.

SysRq로 channel 시험

130-151

`earlyprintk=dbgp,keep`을 사용하고 host/target에서 harmless kernel message를 발생시켜 output을 시험할 수 있습니다.

echo h > /proc/sysrq-trigger

host/target의 `dmesg`에는 다음 SysRq help line이 나타나야 합니다.

SysRq : HELP : loglevel(0-9) reBoot Crashdump terminate-all-tasks(E) memory-full-oom-kill(F) kill-all-tasks(I) saK show-backtrace-all-active-cpus(L) show-memory-usage(M) nice-all-RT-tasks(N) powerOff show-registers(P) show-all-timers(Q) unRaw Sync show-task-states(T) Unmount show-blocked-tasks(W) dump-ftrace-buffer(Z)

client/console에서는 다음 command를 실행합니다.

cat /dev/ttyUSB0

host에서 message를 발생시킨 직후 console에도 같은 help line이 보여야 합니다. 동작하지 않으면 `[email protected]` mailing list 또는 x86 maintainer에게 문의합니다.