Показать сообщение отдельно
Старый 25.06.2012, 11:51   #1
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
Post Отладка ядра FreeBSD 9.0 посредством VMWare 8.0

First things first

Первым делом следует установить исходники ядра. Если в /usr/src/sys/ пусто и есть установочный dvd, то следует распаковать src.txz:

Цитата:
# mount -t cd9660 /dev/cd0 /cdrom
# tar -C / -xvzf /cdrom/usr/freebsd-dist/src.txz
Если dvd нет, то исходники можно скачать с сайта freebsd или через svn: http://forums.freebsd.org/showthread.php?t=29172
sysinstall в 9.0 не работает!


Компилируем debug ядро

Теперь нужно скомпилировать новое ядро для дебага:
Цитата:
# cd /usr/src/sys/i386/
или # cd /usr/src/sys/amd64/ - для архитектуры amd64
# cp conf/GENERIC conf/MYDEBUGKERNEL
Редактируем MYDEBUGKERNEL, добавляя следующие опции:
Цитата:
makeoptions DEBUG=-g
options KDB
options DDB
options GDB
Первые 2 уже были выставлены.
Компилируем:
Цитата:
# cd /usr/src/
# make buildkernel KERNCONF=MYDEBUGKERNEL
Теперь выключаем эту вм и клонируем её.
А - вм, которую будем отлаживать.
Б - вм, с которой будем отлаживать вм А.

В выключенном виде в настройках VMWare для обеих вм-ок делаем:
Цитата:
Settings - Hardware - Add - Serial Port - Output to named pipe.
Путь pipe в обеих вм должен быть одинаков (напр. \\.\pipe\com_1).
Для вм А - This end is the server
Для вм Б - This end is the client
Для обеих - The other end is a virtual machine
Теперь в вм А устанавливаем debug ядро, которое мы скомпилировали:
Цитата:
# cd /usr/src/
# make installkernel KERNCONF=MYDEBUGKERNEL
Редактируем /boot/device.hints и меняем параметры первого последовательного порта, в моем случае делаем hint.uart.0.flags=0x90
Убеждаемся, что в /etc/sysctl.conf указано:
Цитата:
debug.kdb.current=ddb
debug.debugger_on_panic=1
Перезагружаем вм А, смотрим uname -a, убеждаемся по дате, что новое ядро установлено.

Для входа в режим отладки вводим "sysctl debug.kdb.enter=1" и затем "db> gdb":
Цитата:
# sysctl debug.kdb.enter=1
debug.kdb.enter: 0KDB: enter: sysctl debug.kdb.enter
[thread pid 1219 tid 100083]
Stopped at kdb_enter+0x3a: movl $0,kdb_why
db> gdb
Switching to GDB back-end.
Загружаем вм Б, пишем:
Цитата:
# kgdb -r /dev/cuau0 /usr/obj/usr/src/sys/MYDEBUGKERNEL/kernel.debug
Мы в отладчике:
Цитата:
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "amd64-marcel-freebsd".
Switching to remote protocol
kdb_enter (msg=0x23 <Address 0x23 out of bounds>) at
/usr/src/sys/kern/subr_kdb.c:270
270 }

(kgdb)
Использовалось (по одной ссылке неполно, по другой есть ошибки):
http://www.morenops.com/2011/10/02/f...ernel/gdb.html
http://census-labs.com/news/2009/01/...nel-debugging/
SynQ вне форума   Ответить с цитированием