Update firewire debugging description.
Reviewed by: simokawa. Clarify terminology. Update BUGS section.
This commit is contained in:
parent
a783ff949c
commit
783a364bf8
@ -86,11 +86,13 @@ Investigate them from the kernel build directory with:
|
||||
.Pp
|
||||
In this mode, the system is obviously stopped, so you can only look at it.
|
||||
.Ss Debugging a live system with a remote link
|
||||
In the following discussion, the term ``local system'' refers to the system
|
||||
running the debugger, and ``remote system'' refers to the live system being
|
||||
debugged.
|
||||
.Pp
|
||||
To debug a live system with a remote link, the kernel must be compiled with the
|
||||
options
|
||||
.Cd options DDB
|
||||
and
|
||||
.Cd options GDB_REMOTE_CHAT .
|
||||
option
|
||||
.Cd options DDB .
|
||||
The option
|
||||
.Cd options BREAK_TO_DEBUGGER
|
||||
enables the debugging machine stop the debugged machine once a connection has
|
||||
@ -109,39 +111,39 @@ should be:
|
||||
.Bd -literal -offset 5m
|
||||
hint.sio.0.flags="0x90"
|
||||
.Ed
|
||||
.Pp
|
||||
To share a console and debug connection on a serial line, use the
|
||||
.Cd options GDB_REMOTE_CHAT
|
||||
option.
|
||||
.Ss Debugging a live system with a remote firewire link
|
||||
As with serial debugging, to debug a live system with a firewire link, the
|
||||
kernel must be compiled with the options
|
||||
.Cd options DDB
|
||||
and
|
||||
.Cd options GDB_REMOTE_CHAT .
|
||||
kernel must be compiled with the option
|
||||
.Cd options DDB .
|
||||
The
|
||||
.Cd options GDB_REMOTE_CHAT
|
||||
is not necessary, since the firewire implementation uses separate ports for the
|
||||
console and debug connection.
|
||||
.Pp
|
||||
A number of steps must be performed to set up a firewire link:
|
||||
.Pp
|
||||
.Bl -bullet -offset indent -compact
|
||||
.It
|
||||
First, ensure that the kernels of both systems include firewire support.
|
||||
If it isn't compiled into the kernel, load the klds:
|
||||
Ensure that both systems have firewire support, and that the kernel of the
|
||||
remote system includes the
|
||||
.Nm dcons
|
||||
and
|
||||
.Nm dcons_crom
|
||||
drivers.
|
||||
If they're not compiled into the kernel, load the klds:
|
||||
.Bd -literal -offset 5m
|
||||
# \f(CBkldload dcons\fP
|
||||
# \f(CBkldload dcons_crom\fP
|
||||
# \f(CBkldload firewire\fP
|
||||
# \f(CBkldload dcons\fP \fI(remote system only)\fP\/
|
||||
# \f(CBkldload dcons_crom\fP \fI(remote system only)\fP\/
|
||||
.Ed
|
||||
.Pp
|
||||
You should see something like this in the
|
||||
.Nm dmesg
|
||||
output:
|
||||
.Pp
|
||||
.Bd -literal -offset 5m
|
||||
fwohci0: BUS reset
|
||||
fwohci0: node_id=0xc000ffc1, gen=3, CYCLEMASTER mode
|
||||
firewire0: 2 nodes, maxhop <= 1, cable IRM = 1 (me)
|
||||
firewire0: bus manager 1 (me)
|
||||
firewire0: New S400 device ID:000199000003622b
|
||||
dcons_crom0: <dcons configuration ROM> on firewire0
|
||||
dcons_crom0: bus_addr 0xf93000
|
||||
.Ed
|
||||
.Pp
|
||||
The corresponding output on the other machine looks like this:
|
||||
output of the remote system:
|
||||
.Pp
|
||||
.Bd -literal -offset 5m
|
||||
fwohci0: BUS reset
|
||||
@ -157,13 +159,28 @@ It's a good idea to load these modules at boot time with the following entry in
|
||||
.Pa /boot/loader.conf :
|
||||
.Pp
|
||||
.Bd -literal -offset 5m
|
||||
dcons_enable=YES
|
||||
dcons_crom_enable=YES
|
||||
.Ed
|
||||
.Pp
|
||||
This ensures that all three modules are loaded.
|
||||
There is no harm in loading
|
||||
.Nm dcons
|
||||
and
|
||||
.Nm dcons_crom
|
||||
on the local system, but if you only want to load the firewire module, include
|
||||
the following in
|
||||
.Pa /boot/loader.conf :
|
||||
.Pp
|
||||
.Bd -literal -offset 5m
|
||||
firewire_enable=YES
|
||||
.Ed
|
||||
.Pp
|
||||
.Pp
|
||||
.It
|
||||
Next, use
|
||||
.Nm fwcontrol
|
||||
to find the firewire node corresponding to the remote machine:
|
||||
to find the firewire node corresponding to the remote machine.
|
||||
On the local machine you might see:
|
||||
.Pp
|
||||
.Bd -literal -offset 5m
|
||||
# \f(CBfwcontrol\fP
|
||||
@ -189,33 +206,33 @@ node EUI64 status
|
||||
.Pp
|
||||
.It
|
||||
Next, establish a firewire connection with
|
||||
.Nm fwchat :
|
||||
.Nm dconschat :
|
||||
.Pp
|
||||
.Bd -literal -offset 5m
|
||||
# \f(CBfwchat -b -t \f[CBI]target-address\fR
|
||||
# \f(CBdconschat -br -G 5556 -t 0x000199000003622b\fP
|
||||
.Ed
|
||||
.Pp
|
||||
.Ar target-address
|
||||
is the EUI64 address of the remote node, in this case
|
||||
.Li 0x000199000003622b .
|
||||
When started in this manner,
|
||||
.Nm fwchat
|
||||
establishes two local tunnel connections:
|
||||
.Ar localhost:5555
|
||||
is a connection to a
|
||||
.Nm getty
|
||||
process, which is not of interest here, and
|
||||
.Ar localhost:5556
|
||||
is a connection to the debugger.
|
||||
The port numbers can be changed with the
|
||||
.Fl p
|
||||
flag to
|
||||
.Nm fwcontrol .
|
||||
.Pp
|
||||
.Ar 0x000199000003622b
|
||||
is the EUI64 address of the remote node, as determined from the output of
|
||||
.Nm fwcontrol
|
||||
above.
|
||||
When started in this manner,
|
||||
.Nm dconschat
|
||||
establishes a local tunnel connection from port
|
||||
.Ar localhost:5556
|
||||
to the remote debugger.
|
||||
You can also establish a console port connection with the
|
||||
.Fl C
|
||||
option to the same invocation
|
||||
.Nm dconschat .
|
||||
See
|
||||
.Xr dconschat 8
|
||||
for further details.
|
||||
.Pp
|
||||
.Nm dconschat
|
||||
does not return control to the user.
|
||||
You can start it in the background, but sometimes it will produce error
|
||||
messages, so it's a good idea to start it in its own window.
|
||||
It displays error messages and console output for the remote system, so it's a
|
||||
good idea to start it in its own window.
|
||||
.Pp
|
||||
.It
|
||||
Finally, establish connection:
|
||||
@ -236,23 +253,29 @@ to load the kld symbols. That's a less obnoxious interface.
|
||||
0xc21bd378 in ?? ()
|
||||
.Ed
|
||||
.Pp
|
||||
.It
|
||||
It's currently possible for the two ends of the firewire link to get out of sync
|
||||
after a reboot.
|
||||
On the
|
||||
.Nm fwchat
|
||||
screen you see:
|
||||
The
|
||||
.Nm trf
|
||||
macro assumes a connection on port 5556.
|
||||
If you want to use a different port (by changing the invocation of
|
||||
.Nm dconschat
|
||||
above), use the
|
||||
.Nm tr
|
||||
macro instead.
|
||||
For example, if you want to use port 4711, run
|
||||
.Nm dconschat
|
||||
like this:
|
||||
.Pp
|
||||
.Bd -literal -offset 5m
|
||||
fwchat: get crom faild
|
||||
# \f(CBdconschat -br -G 4711 -t 0x000199000003622b\fP
|
||||
.Ed
|
||||
.Pp
|
||||
In this case, stop
|
||||
.Nm fwchat
|
||||
and perform a firewire bus reset:
|
||||
Then establish connection with:
|
||||
.Pp
|
||||
.Bd -literal -offset 5m
|
||||
# \f(CBfwcontrol -r\fP
|
||||
# \f(CBfwchat -b -t 0x000199000003622b\fP
|
||||
(gdb) \f(CBtr localhost:4711\fP
|
||||
0xc21bd378 in ?? ()
|
||||
.Ed
|
||||
.Pp
|
||||
.El
|
||||
.Sh COMMANDS
|
||||
The user interface to
|
||||
@ -430,7 +453,7 @@ This causes the contents of free memory to be set to
|
||||
.Li 0xdeadc0de .
|
||||
.It Cm dmesg
|
||||
Print the system message buffer. This corresponds to the
|
||||
.Nm dmesg
|
||||
.Xr dmesg 8
|
||||
command.
|
||||
It can take a very long time over a serial line, and it's even slow via firewire
|
||||
or local memory due to inefficiencies in
|
||||
@ -466,26 +489,32 @@ message to remind you to remove it again.
|
||||
This man page was written by
|
||||
.An "Greg Lehey" Aq grog@FreeBSD.org
|
||||
.Sh SEE ALSO
|
||||
.Xr dconschat 8 ,
|
||||
.Xr ddb 4 ,
|
||||
.Xr fwchat 8 ,
|
||||
.Xr fwcontrol 8 ,
|
||||
.Xr gdb 1 ,
|
||||
.Xr kldload 8 ,
|
||||
.Xr vinumdebug 4 .
|
||||
.\" .Sh HISTORY
|
||||
.Sh BUGS
|
||||
.Bl -bullet -offset indent -compact
|
||||
.Bl -bullet -compact
|
||||
.It
|
||||
.Nm
|
||||
was never designed to debug kernels, and it's not a very good match.
|
||||
Many problems exist.
|
||||
.It
|
||||
The
|
||||
.Nm gdb
|
||||
implementation is very inefficient, and many operations are slow.
|
||||
.It
|
||||
Serial debugging is even slower, and race conditions can make it difficult to
|
||||
run the link at more than 9600 bps. Firewire connections do not have this
|
||||
problem.
|
||||
.It
|
||||
The debugging macros ``just growed''.
|
||||
In general, the person who wrote them did so while looking for a specific
|
||||
problem, so they may not be general enough, and they may behave badly when used
|
||||
in ways for which they were not intended, even if those ways make sense.
|
||||
.It
|
||||
Serial debugging is very slow, and race conditions can make it difficult to run
|
||||
the link at more than 9600 bps. Firewire connections do not have this problem.
|
||||
.It
|
||||
Many of these commands only work on the ia32 architecture.
|
||||
.El
|
||||
|
Loading…
Reference in New Issue
Block a user