Отладка ядра Linux в VMWare с хостом Windows - PullRequest
4 голосов
/ 25 января 2010

Я работаю над своим первым модулем ядра, поэтому я немного новичок в этом ...

Мой модуль иногда вызывает панику, и я не могу разобраться в этом с помощью printk. Насколько я могу судить, мои варианты отладки:

1.) Найдите сгенерированное сообщение OOPS и используйте ksymoops

или

2.) Попробуйте при удаленной отладке использовать kgdb

Я работаю на хосте Windows и запускаю Ubuntu в VMWare, что немного усложняет ситуацию. Я хотел бы сначала попробовать сообщение OOPS, но я не знаю, как его перехватить. Нужно ли запускать последовательную консоль, когда это происходит? Если так, как я могу сделать это с хостом Windows? Нужны ли мне две виртуальные машины?

Как я уже сказал, я немного новичок в этом (и Linux в целом), поэтому я мог бы действительно использовать некоторые рекомендации. Спасибо!

Ответы [ 3 ]

3 голосов
/ 13 февраля 2010

Некоторое время назад я успешно использовал технику, к которой относится «alinrus». Часть, которую он упомянул, подробно объясняется на: http://stackframe.blogspot.com/2007/04/debugging-linux-kernels-with.html

Я фактически использовал его непосредственно с хоста Windows. Поэтому после настройки виртуальной машины (главным образом, включающей удаленную отладку и загрузку ядра (файл vmlinux, , а не файл vmlinuz, который не может интерпретироваться gdb)), вам необходимо выполнить следующее:

  1. Установите последнюю версию gdb на вашем компьютере с Windows (я использовал тот, что в Cygwin).
  2. Запустите gdb с файлом vmlinux, а затем выполните команду «target remote localhost: 8832» для подключения виртуальной машины (когда она работает).

Это то, что вам нужно для отладки кода, который статически связан с ядром. Вы можете попробовать статически связать свой модуль, и выше будет достаточно. Настройка отладки для динамически связанного модуля требует дополнительного шага, чтобы сообщить gdb об использовании файла вашего модуля и о том, как интерпретировать разделы файла.

3a. Запустите приведенный ниже скрипт для вашего файла .ko после загрузки модуля (и до его сбоя :)).

3b. Вставьте получившиеся строки «add-symbol-file mymodule.ko 0xe8884000 ...» в gdb. Затем GDB загрузит ваш модуль, если он сможет найти его в текущем каталоге или указанном вами пути.

Сценарий от http://anomit.com/2009/11/04/kernel-module-debugging-a-simple-technique/

#!/bin/sh
#
# gdbline module image
#
# Outputs an add-symbol-file line suitable for pasting into gdb to examine
# a loaded module.
#
cd /sys/module/$1/sections
PROG=${1}.ko
echo -n add-symbol-file ${PROG} `/bin/cat .text`
#echo -n add-symbol-file $2 `/bin/cat .text`  #Take second argument to be gdb name of program/object file

for section in .[a-z]* *; do
    if [ $section != ".text" ]; then
        echo  " \\"
        echo -n "       -s" $section `/bin/cat $section`
    fi
done
echo

Есть еще вещи, которые вы можете захотеть сделать. Для реальной отладки на уровне исходного кода вам понадобится отсосать весь исходный код ядра и модуля, чтобы GDB мог его найти. И есть некоторые приемы, которые вы можете использовать для компиляции вашего модуля без оптимизации, как только вы доберетесь до этого.

Возможно, вы также захотите взглянуть на техническую заметку Workstation 7.0 по отладке воспроизведения, которая содержит информацию об отладке модулей ядра. VMware знает свое дело. http://www.vmware.com/pdf/ws7_replay_linux_technote.pdf

1 голос
/ 18 февраля 2010

Я не уверен, поможет ли это вам в Winblowz, но можете ли вы переместить свою виртуальную машину на Linux-коробку:

Отладка ядер Linux с рабочей станции 6.0

Мы просто тихо добавили захватывающее особенность к рабочей станции 6.0. я верю это сделает WS6 отличным инструментом для Разработка ядра Linux. Ты можешь сейчас используйте GDB на вашем хосте для отладки Ядро Linux работает внутри ВМ. нет KDB, без перекомпиляции и не нужно вторая машина. Все, что вам нужно, это одна строка в конфигурации виртуальной машины файл.

Я думаю, что это, вероятно, работает и на других последних продуктах VMware.

Так как он также работает на Mac OSX, я подозреваю, что он будет работать и на Winblowz:

Отладка ядра Linux (внутри VMware) из Mac OSX

Как предполагает этот поток, вы также можете удаленно отлаживать одну виртуальную машину Linux со второй виртуальной машины Linux, работающей на той же машине.

0 голосов
/ 25 января 2010

Посмотрите, поможет ли это. Я не использую Windows или VMWare http://communities.vmware.com/thread/236251;jsessionid=A4A69CC15C7B951C576EF254604655D8?tstart=0

...