Linked by Thom Holwerda on Sun 11th Mar 2007 20:12 UTC, submitted by anonymous
FreeBSD "Explore how to remotely debug a FreeBSD kernel that is running on a target machine without affecting system performance. In this article, examine setting up the debug environment using serial communication port, compiling modified kernel code, debugging, and troubleshooting tips."
E-mail Print r 0   3 Comment(s)
Order by: Score:
Very General
by vermaden (3.52) on Sun 11th Mar 2007 21:20 UTC
vermaden
Member since:
2006-11-18
Fans: 0

Article provides very general info about that, in depth info and documentation can be found in FreeBSD Handbook if someone is more interested:

http://freebsd.org/handbook/serialcomms.html
http://freebsd.org/handbook/kernelconfig.html
http://freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/ke...

Also the article describes old generally unused method of building kernel:
# make depend
# make
# make install


Now this schema is preferred:
# cd /usr/src
# make buildkernel
# make installkernel KODIR=/boot/TESTING
# nextboot -k TESTING


Edited 2007-03-11 21:25

Kernel modification
by Doc Pain (2.76) on Sun 11th Mar 2007 21:26 UTC
Doc Pain
Member since:
2006-10-08
Fans: 6

personally, I found the article very interesting, but I think the author is not up to date regarding kernel compilation in FreeBSD. The section "Modifying kernel files" leaves no evidence which FreeBSD version he refers to.

While his suggestions still work with any FreeBSD from 4 up to 6, the procedure he introduced is from the FreeBSD 4 era and is not usually used today (with FreeBSD 6).

Don't get me wrong, I like the article, but I also would like to make a few notes.

1. The author mentiones only vi and emacs as my favourite editor, but my favourite editor is the mcedit from the Midnight Commander suite. :-)

2. Regarding the the serial port communication for kernel debugging, the author suggests to enter the following line:

device sio0 at isa? port IO_COM1 flags 0x80

This does not conform to the kernel config file layout in FreeBSD since version 5. Furthermore, the serial driver sio is part of the GENERIC kernel profile and does not need to be added.

While

device sio0

should be

device sio

since FreeBSD 5, the appendix

at isa? port IO_COM1 flags 0x80

does no longer reside in the kernel config file. It can be set dnamically in /boot/device.hints or statically in /sys/i386/conf/MYKERNEL.hints as follows:

hint.sio.0.at="isa"
hint.sio.0.port="0x3F8"
hint.sio.0.flags="0x80"


Judging from the standard installation, only a change in flags from 0x10 to 0x80 appears.

3. The call of config, make depend etc. is no longer needed. This mechanism is controlled by the Makefile in /usr/src.

Instead of

$ cd /usr/src/sys/i386/conf/
$ config -g MYKERNEL
$ cd /usr/src/sys/compile/MYKERNEL/
$ make depend
$ make
$ make install[/i]

the new way is:

# cd /usr/src
# make buildkernel KERNCONF=MYKERNEL
# make installkernel KERNCONF=MYKERNEL


This will perform the config and depend steps as well. The only thing I don't know exactly is how to set the "config -g" effect, maybe there's a special macro or option for this.

Please remember: The procedure the author provided will still work. See the FreeBSD handbook sections at http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelcon... for more information.

4. Note that all operations above need root privileges because there are write operations inside /usr/src.

RE: Kernel modification
by dcwrwrfhndz (2.32) on Mon 12th Mar 2007 01:30 UTC in reply to "Kernel modification"
dcwrwrfhndz Member since:
2006-05-26
Fans: 1

the new way is:

# cd /usr/src
# make buildkernel KERNCONF=MYKERNEL
# make installkernel KERNCONF=MYKERNEL


Just a note: there is also the even easier

# cd /usr/src
# make kernel KERNCONF=MYKERNEL

and you're done with both build and install.

About the "config -g", I don't think that it's needed having makeoptions DEBUG=-g in your kernconf (GENERIC has it).