У меня есть драйвер ядра Linux и пользовательское приложение, которое взаимодействует с ним. Драйвер ядра имеет тупик. Я применил эту функцию в ядре linux под названием " lockdep". Мне удалось настроить его и перекомпилировать мое ядро (и я вижу папки lockdep в /proc ). Но я не знаю, как вывести вывод этого инструмента или как отлаживать драйвер, используя этот инструмент. Любая помощь будет очень оценена. Спасибо!
Как использовать функцию lockdep в ядре linux для обнаружения взаимоблокировки
Ответ 1
Чтобы включить функцию lockdep, отредактируйте файл .config через menuconfig:
make menuconfig
И включите следующие параметры взлома:
1. [*] Detect Hard and Soft Lockups
2. [*] Detect Hung Tasks
3. [*] RT Mutex debugging, deadlock detection
4. -*- Spinlock and rw-lock debugging: basic checks
5. -*- Mutex debugging: basic checks
6. -*- Lock debugging: detect incorrect freeing of live locks
7. [*] Lock debugging: prove locking correctness
8. [*] Lock usage statistics
Перекомпилируйте ядро:
make ARCH=i386 -j4 //whatever your arch is
Теперь загрузите новый образ ядра, под /proc вы увидите следующие новые папки:
/proc/lockdep
/proc/lockdep_chains
/proc/lockdep_stat
/proc/locks
/proc/lock_stats
Теперь вставьте модуль, который, по вашему мнению, вызывает ошибку, и получите доступ к нему с помощью своего пользовательского приложения (или любым другим способом, используемым для запуска вашего модуля драйвера). Если приложение блокирует (зависает), выполните:
ps -aux | grep <app_name>
вы должны увидеть состояние + D (источник бесперебойного сна) для своего приложения, выполните следующие действия:
dmesg
В логах он будет содержать функцию/файл, вызывающий тупик.
Что это!
Ответ 2
Не так много - код lockdep просто распечатает описание ситуации и обратную трассировку стека в журнал ядра, когда он столкнется с блокирующей последовательностью, которая потенциально блокируется. Вам просто нужно следить за выходом вашего ядра (через dmesg
или последовательную линию или все, что вы используете).
Блокировка кода lockdep только блокирует, он не может предупредить вас о тупиках, которые возникают из чего-то другого.