2015-10-23 2 views
-1

Я подделал struct page в своем пространстве пользователя в ядре, но я не могу передать VALID_PAGE чек в ядре. Она определяется следующим образом:pass VALID_PAGE (page) in page_alloc.c

  • #define VALID_PAGE(page) ((page - mem_map) < max_mapnr)

Что это значит? Я понятия не имею page - mem_map есть и max_mapnr есть. Как может моя подделка page передать эту проверку?

+0

Вы даже пытались найти переменные и их использование в коде ядра? Например. [this] (http://lxr.free-electrons.com/source/mm/memory.c?v=3.6#L73) определение кажется ясным: 'mem_map' - это расположение страниц, max_mapnr - максимальное количество элементов в этом массиве. Итак, 'VALID_PAGE' просто проверяет, принадлежит ли эта страница к указанному массиву страниц. – Tsyvarev

+0

Кстати, когда речь заходит о внутренних функциях ядра (функции, макросы, ...), всегда указывайте версию ядра. Когда вы говорите о сводном коде (в разделе 'arch /' или 'asm /') также указываете архитектуру. – Tsyvarev

ответ

1

mem_map - это глобальный массив структурной страницы, pfn - это ключ к индексу в массиве mem_map .... (page - mem_map) даст вам индекс страницы в массиве mem_map .... max_mapnr выглядит быть допустимым индексом в mem_map. Надеюсь, он ответит на ваш вопрос.

+0

Спасибо за ваш ответ. Да, это помогает. Есть ли больше ссылок на ваш ответ? – HuangJie