Ответ 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
В логах он будет содержать функцию/файл, вызывающий тупик.
Что это!