Я пытаюсь перезаписать некоторые части в памяти ядра (Linux 2.6.31, Ubuntu 9.10) на виртуальной машине (используя VirtualBox) через модуль ядра.
Всякий раз, когда я делаю это, я получаю эту ошибку
[27154.303726] BUG: невозможно обработать запрос подкачки ядра в 0xc05769bc
Мой код:
unsigned char *p = (unsigned char *) c05769bc;
p[1] = (addr & 0x000000ff);
p[2] = (addr & 0x0000ff00) >> 8;
p[3] = (addr & 0x00ff0000) >> 16;
p[4] = (addr & 0xff000000) >> 24;
Адрес правильный, как и мой код записи. Я просто использую указатель для записи в память ядра.
Мне было интересно, почему я получаю это сообщение, поскольку страница памяти этого адреса определенно находится в памяти.
Это поведение как-то связано с виртуальной машиной? Или в последнее ядро встроена какая-то защита? Я надеюсь, что кто-то может дать мне некоторую подсказку.
Проблема, похоже, связана с Ubuntu, потому что тот же код не дает сбоя при использовании Debian.
ТИА!
Willem