Diff for /wikisrc/kernel_debugging_with_qemu.mdwn between versions 1.5 and 1.12

version 1.5, 2015/02/18 16:00:09 version 1.12, 2015/08/05 12:58:13
Line 7  debugging of the NetBSD kernel using a p Line 7  debugging of the NetBSD kernel using a p
   
 You need a computer running an OS capable of cross-building NetBSD  You need a computer running an OS capable of cross-building NetBSD
 (the "host system").  (the "host system").
 This can be be NetBSD itself, Linux, or some other Unix-like OS.  This can be NetBSD itself, Linux, or some other Unix-like OS.
 These instructions have been tested with NetBSD/amd64 6.1.4 and  These instructions have been tested with NetBSD/amd64 6.1.4 and
 Debian 7 hosts.  Debian 7 hosts.   There should be at least 20 gigabytes of available
   disk space.
   
 If your host system is running NetBSD, install the following packages  If your host system is running NetBSD, install the following packages
 from pkgsrc:  from pkgsrc:
Line 25  install the most recent anita package fr Line 26  install the most recent anita package fr
   
 ## Building the target system  ## Building the target system
   
 Check out the NetBSD-current sources from CVS and build a full  Check out the NetBSD-current sources from CVS and build a full release
 NetBSD-current/i386 release with debug symbols using the build.sh  of NetBSD-current/i386 with debug symbols using the build.sh script.
 script.  The i386 port is the preferred test platform because the two  The i386 port is the preferred test platform because the two
 other ports supported by anita are affected by known bugs: amd64 by  other ports supported by anita are affected by known bugs: amd64 by
 [[PR 49276|http://gnats.NetBSD.org/49276]], and sparc by  [[PR 50128|http://gnats.NetBSD.org/50128]], and sparc by
 [[qemu bug 1335444|https://bugs.launchpad.net/qemu/+bug/1335444]].  [[qemu bug 1399943|https://bugs.launchpad.net/qemu/+bug/1399943]].
   
 If you do the build in a directory other than /usr/src,   If you do the build in a directory other than /usr/src, 
 use the -fdebug-prefix-map option to ensure that the source file names embedded  use the -fdebug-prefix-map option to ensure that the source file names embedded
 in the debug symbols point to /usr/src, which is where the sources will be  in the debug symbols point to /usr/src, which is where the sources will be
Line 60  Install the system in a virtual machine, Line 60  Install the system in a virtual machine,
 ## Booting the VMs  ## Booting the VMs
   
 Next, start two qemu virtual machines, one to run the kernel being  Next, start two qemu virtual machines, one to run the kernel being
 debugged (the "kgdb target") and another to run gdb (the "kgdb host").  debugged (the "target VM") and another to run gdb (the "gdb VM").
   
 The two VMS could be run on separate physical machines, but in this  The two VMs could be run on separate physical machines, but in this
 example, they are run on the same physical machine and share the same  example, they are run on the same physical machine and share the same
 hard disk image.  This sharing is made possible by the "-snapshot"  hard disk image.  This sharing is made possible by the "-snapshot"
 option to qemu, which ensures that the disk image is not written to by  option to qemu, which ensures that the disk image is not written to by
 either VM.  either VM.
   
 First start the kgdb target, enabling qemu's built-in GDB target stub  First start the target VM, enabling qemu's built-in GDB target stub
 on TCP port 1234:  on TCP port 1234:
   
 [[!template  id=programlisting text="""  [[!template  id=programlisting text="""
Line 79  If you don't want everyone on the Intern Line 79  If you don't want everyone on the Intern
 target, make sure incoming connections on port 1234 are blocked in  target, make sure incoming connections on port 1234 are blocked in
 your firewall.  your firewall.
   
 In a second terminal window, start the kgdb host:  In a second terminal window, start the gdb VM:
   
 [[!template  id=programlisting text="""  [[!template  id=programlisting text="""
  $ qemu-system-i386 -nographic -snapshot -hda work/wd0.img   $ qemu-system-i386 -nographic -snapshot -hda work/wd0.img
 """]]  """]]
   
 Log in to the kgdb host as root and set up the network:  Log in to the gdb VM as root and set up the network:
   
 [[!template  id=programlisting text="""  [[!template  id=programlisting text="""
  login: root   login: root
  # dhcpcd   # dhcpcd
 """]]  """]]
   
 Start gdb on the kgdb host and connect to the target:  Start gdb on the gdb VM and connect to the target:
   
 [[!template  id=programlisting text="""  [[!template  id=programlisting text="""
  # gdb /netbsd   # gdb /netbsd
Line 100  Start gdb on the kgdb host and connect t Line 100  Start gdb on the kgdb host and connect t
 """]]  """]]
   
 where my.host.name is the domain name or IP address of the  where my.host.name is the domain name or IP address of the
 physical machine running the kgdb target qemu VM.  host system.
   
 Now you should be able to get a stack trace and start debugging  Now you should be able to get a stack trace and start debugging
 with full debug symbols and access to the source code:  with full debug symbols and access to the source code:

Removed from v.1.5  
changed lines
  Added in v.1.12


CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb