⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kgdb.txt

📁 linux 内核源代码
💻 TXT
字号:
This file describes the configuration and behavior of KGDB for the SHkernel. Based on a description from Henry Bell <henry.bell@st.com>, ithas been modified to account for quirks in the current implementation.Version=======This version of KGDB was written for 2.4.xx kernels for the SH architecture.Further documentation is available from the linux-sh project website.Debugging Setup: Host======================The two machines will be connected together via a serial line - thisshould be a null modem cable i.e. with a twist.On your DEVELOPMENT machine, go to your kernel source directory andbuild the kernel, enabling KGDB support in the "kernel hacking" section.This includes the KGDB code, and also makes the kernel be compiled withthe "-g" option set -- necessary for debugging.To install this new kernel, use the following installation procedure.Decide on which tty port you want the machines to communicate, thencable them up back-to-back using the null modem.  On the DEVELOPMENTmachine, you may wish to create an initialization file called .gdbinit(in the kernel source directory or in your home directory) to execute commonly-used commands at startup.A minimal .gdbinit might look like this:  file vmlinux  set remotebaud 115200  target remote /dev/ttyS0Change the "target" definition so that it specifies the tty port thatyou intend to use.  Change the "remotebaud" definition to match thedata rate that you are going to use for the com line (115200 is thedefault). Debugging Setup: Target========================By default, the KGDB stub will communicate with the host GDB usingttySC1 at 115200 baud, 8 databits, no parity; these defaults can bechanged in the kernel configuration. As the kernel starts up, KGDB willinitialize so that breakpoints, kernel segfaults, and so forth willgenerally enter the debugger.This behavior can be modified by including the "kgdb" option in thekernel command line; this option has the general form:  kgdb=<ttyspec>,<action>The <ttyspec> indicates the port to use, and can optionally specifybaud, parity and databits -- e.g. "ttySC0,9600N8" or "ttySC1,19200".The <action> can be "halt" or "disabled".  The "halt" action enters thedebugger via a breakpoint as soon as kgdb is initialized; the "disabled"action causes kgdb to ignore kernel segfaults and such until explicitlyentered by a breakpoint in the code or by external action (sysrq or NMI). (Both <ttyspec> and <action> can appear alone, w/o the separating comma.)For example, if you wish to debug early in kernel startup code, youmight specify the halt option:  kgdb=haltBoot the TARGET machine, which will appear to hang. On your DEVELOPMENT machine, cd to the source directory and run the gdbprogram.  (This is likely to be a cross GDB which runs on your host butis built for an SH target.) If everything is working correctly youshould see gdb print out a few lines indicating that a breakpoint hasbeen taken.  It will actually show a line of code in the target kernelinside the gdbstub activation code.NOTE: BE SURE TO TERMINATE OR SUSPEND any other host application whichmay be using the same serial port (for example, a terminal emulator youhave been using to connect to the target boot code.)  Otherwise, datafrom the target may not all get to GDB!You can now use whatever gdb commands you like to set breakpoints.Enter "continue" to start your target machine executing again.  At thispoint the target system will run at full speed until it encountersyour breakpoint or gets a segment violation in the kernel, or whatever.Serial Ports: KGDB, Console============================This version of KGDB may not gracefully handle conflict with otherdrivers in the kernel using the same port. If KGDB is configured on thesame port (and with the same parameters) as the kernel console, or ifCONFIG_SH_KGDB_CONSOLE is configured, things should be fine (though insome cases console messages may appear twice through GDB).  But if theKGDB port is not the kernel console and used by another serial driverwhich assumes different serial parameters (e.g. baud rate) KGDB may notrecover.Also, when KGDB is entered via sysrq-g (requires CONFIG_KGDB_SYSRQ) andthe kgdb port uses the same port as the console, detaching GDB will notrestore the console to working order without the port being re-opened.Another serious consequence of this is that GDB currently CANNOT breakinto KGDB externally (e.g. via ^C or <BREAK>); unless a breakpoint orerror is encountered, the only way to enter KGDB after the initial halt(see above) is via NMI (CONFIG_KGDB_NMI) or sysrq-g (CONFIG_KGDB_SYSRQ).Code is included for the basic Hitachi Solution Engine boards to allowthe use of ttyS0 for KGDB if desired; this is less robust, but may beuseful in some cases.  (This cannot be selected using the config file, but only through the kernel command line, e.g. "kgdb=ttyS0", though theconfigured defaults for baud rate etc. still apply if not overridden.)If gdbstub Does Not Work========================If it doesn't work, you will have to troubleshoot it.  Do the easythings first like double checking your cabling and data rates.  Youmight try some non-kernel based programs to see if the back-to-backconnection works properly.  Just something simple like cat /etc/hosts/dev/ttyS0 on one machine and cat /dev/ttyS0 on the other will tell youif you can send data from one machine to the other.  There is no pointin tearing out your hair in the kernel if the line doesn't work.If you need to debug the GDB/KGDB communication itself, the gdb commands"set debug remote 1" and "set debug serial 1" may be useful, but bewarned: they produce a lot of output.Threads=======Each process in a target machine is seen as a gdb thread. gdb thread relatedcommands (info threads, thread n) can be used. CONFIG_KGDB_THREAD mustbe defined for this to work.In this version, kgdb reports PID_MAX (32768) as the process ID for theidle process (pid 0), since GDB does not accept 0 as an ID.Detaching (exiting KGDB)=========================There are two ways to resume full-speed target execution: "continue" and"detach". With "continue", GDB inserts any specified breakpoints in thetarget code and resumes execution; the target is still in "gdb mode".If a breakpoint or other debug event (e.g. NMI) happens, the targethalts and communicates with GDB again, which is waiting for it.With "detach", GDB does *not* insert any breakpoints; target executionis resumed and GDB stops communicating (does not wait for the target).In this case, the target is no longer in "gdb mode" -- for example,console messages no longer get sent separately to the KGDB port, orencapsulated for GDB.  If a debug event (e.g. NMI) occurs, the targetwill re-enter "gdb mode" and will display this fact on the console; youmust give a new "target remote" command to gdb.NOTE: TO AVOID LOSSING CONSOLE MESSAGES IN CASE THE KERNEL CONSOLE ANDKGDB USING THE SAME PORT, THE TARGET WAITS FOR ANY INPUT CHARACTER ONTHE KGDB PORT AFTER A DETACH COMMAND.  For example, after the detach youcould start a terminal emulator on the same host port and enter a <cr>;however, this program must then be terminated or suspended in order touse GBD again if KGDB is re-entered.Acknowledgements================This code was mostly generated by Henry Bell <henry.bell@st.com>;largely from KGDB by Amit S. Kale <akale@veritas.com> - extracts fromcode by Glenn Engel, Jim Kingdon, David Grothe <dave@gcom.com>, TigranAivazian <tigran@sco.com>, William Gatliff <bgat@open-widgets.com>, BenLee, Steve Chamberlain and Benoit Miller <fulg@iname.com> are alsoincluded. Jeremy Siegel<jsiegel@mvista.com>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -