почему модуль запускается с адреса 0xbf000000 - PullRequest
3 голосов
/ 13 апреля 2011

Я использую insmod hello.ko, чтобы запустить модуль, который я строю.и используйте lsmod для поиска этого модуля. Затем я обнаружил странную проблему и увидел, что модуль запускается с адреса 0xbf000000.Как я знаю, адрес ядра начинается с 0xc0000000, модуль драйвера является частью ядра. Но его адрес находится в пользовательском пространстве. Это странное завершение.

Кстати, он на платформе ARM.

1 Ответ

4 голосов
/ 13 апреля 2011

Схема, по которой весь код ядра находится по виртуальному адресу 0xc0000000, на самом деле ограничивается только x86 и даже там, только если используется параметр конфигурации по умолчанию: адрес памяти 3: 1, разделенный между пользовательским пространством и ядром.

На Arm схема адресации пространства виртуальной памяти отличается, и загружаемые ядром модули отображаются из констант TASK_SIZE в PAGE_OFFSET-1, где PAGE_OFFSET - адрес, с которого начинается прямое отображение физической памяти 1: 1.

Дляполное согласие с тем, что происходит в Arm, см. в этом документе: http://www.arm.linux.org.uk/developer/memory.txt

Он также находится где-то в каталоге Documentation ядра Linux в подкаталоге Arm, который является хорошим местом для поискаответы на такие вопросы для других архитектур: -)

...