Схема, по которой весь код ядра находится по виртуальному адресу 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, который является хорошим местом для поискаответы на такие вопросы для других архитектур: -)