доступ к физической памяти из ядра Linux - PullRequest
10 голосов
/ 25 октября 2011

Можем ли мы получить доступ к любой физической памяти через некоторый код ядра?Потому что я написал драйвер устройства, в котором были только init_module и exit_module .. код следующий.

int init_module(void) {
    unsigned char *p = (unsigned char*)(0x10);
    printk( KERN_INFO  "I got %u \n", *p);
    return 0;
}

и фиктивный exit_module .. проблема в том, что компьютер зависает, когда я делаю lsmod .. Что происходит?Должен ли я получить какое-то свое разрешение на доступ к папке?

любезно объясните .. я новичок!

Ответы [ 3 ]

12 голосов
/ 26 октября 2011

Для доступа к реальной физической памяти вы должны использовать функцию phys_to_virt.В случае, если речь идет о io-памяти (например, PCI-памяти), вам следует более внимательно посмотреть на ioremap.

Вся эта тема очень сложная, если вы новичок, я бы предложил несколько книг / документов по разработке ядра / драйверов.

6 голосов
/ 26 октября 2011

Предлагаю прочитать главу о памяти в этой книге:

http://lwn.net/Kernel/LDD3/

Он доступен онлайн бесплатно. Хорошие вещи!

4 голосов
/ 26 октября 2011

Внутри ядра память по-прежнему отображается виртуально, но не так, как в пользовательском пространстве.

Скорее всего, 0x10 находится на странице защиты или чего-то подобного, чтобы перехватить нулевые указатели, поэтому при прикосновении к нему генерируется необработанный сбой страницы в ядре.

Обычно это вызывает OOPS, а не зависание (но его можно настроить так, чтобы оно вызывало панику). OOPS - это неожиданное состояние ядра, которое может быть восстановлено в некоторых случаях и не обязательно приводит к выходу из строя всей системы. Обычно это убивает задачу (в этом случае insmod)

Вы делали это в настольной системе Linux с загруженным графическим интерфейсом? Я рекомендую вам настроить виртуальную машину Linux (Vmware, virtualbox и т. Д.) С простым (то есть быстрой перезагрузкой) текстовым дистрибутивом, если вы хотите взломать ядро. Вы собираетесь его сломать, и хотите, чтобы он перезагрузился как можно быстрее. Также с помощью текстового дистрибутива легче увидеть сообщения о сбое ядра (упс или паника)

...