LINUX.ORG.RU

место модуля в памяти системы

 ,


0

3

Приветствую,

ядро 2.6.31.8 сконфигурировано с включенным CONFIG_VMSPLIT_3G, т.е. 1G под ядерную память и 3G под юзер спейс — соответственно ядро занимает пространство 0xc0000000 - 0xffffffff, а пользовательские процессы живут в диапазоне 0x00000000 - 0xbfffffff.

Тем не менее:

# cat /sys/module/mydrv/sections/.data
0xbf00b4f4
# cat /sys/module/mydrv/sections/.text
0xbf006000

Не понимаю как получается что ядерный модуль оказался загружен по user space адресам? Я предполагал, что модуль после insmod должен стать частью ядра и жить в ядерном пространстве.

Возможно я ошибаюсь — просьба просветить и поправить. Спасибо!

★★
Ответ на: комментарий от cruz7

А таки поконкретнее?

Ответь вот на какой вопрос: имеет ли смысл отображать секции модуля ядра в адресное пространство пользовательского процесса? Какие это даст преимущества и недостатки?

i-rinat ★★★★★
()

Звучит не очень реально. Давай посмотрим, что пишут про другие модули.

Обнародуй здесь вывод команды «cat /sys/module/*/sections/.data».

ttnl ★★★★★
()
Ответ на: комментарий от i-rinat

имеет ли смысл отображать секции модуля ядра в адресное пространство пользовательского процесса?

И кто в ядре по-твоему этим занимается?

ttnl ★★★★★
()
Ответ на: комментарий от Dennis7
% cat /proc/cpuinfo
Processor       : Feroceon 88FR131 rev 1 (v5l)
BogoMIPS        : 799.53
Features        : swp half thumb fastmult edsp
CPU implementer : 0x56
CPU architecture: 5TE
CPU variant     : 0x2
CPU part        : 0x131
CPU revision    : 1

Hardware        : Feroceon-KW
Revision        : 0000
Serial          : 0000000000000000

Your kernel is too old

Это вы марвелю скажите. И относится ли это к моему вопросу?

cruz7 ★★
() автор топика
Ответ на: комментарий от ttnl

Это марвеловский драйвер ethernet свитча на этой же платформе, как видим цифрвы те же:

% cat /sys/module/mvPpDrv/sections/.text /sys/module/mvPpDrv/sections/.data /sys/module/mvPpDrv/sections/.bss
0xbf006000
0xbf00b4f4
0xbf00c3a4
cruz7 ★★
() автор топика
Ответ на: комментарий от cruz7

cat arch/arm/include/asm/memory.h

/*
 * PAGE_OFFSET - the virtual address of the start of the kernel image
 * TASK_SIZE - the maximum size of a user space task.
 */
#define PAGE_OFFSET             UL(CONFIG_PAGE_OFFSET)
#define TASK_SIZE               (UL(CONFIG_PAGE_OFFSET) - UL(0x01000000))

/*
 * The module space lives between the addresses given by TASK_SIZE
 * and PAGE_OFFSET - it must be within 32MB of the kernel text.
 */

#define MODULES_VADDR           (PAGE_OFFSET - 16*1024*1024)

ttnl ★★★★★
()
Ответ на: комментарий от ttnl

cat arch/arm/kernel/module.c

void *module_alloc(unsigned long size)
{
        return __vmalloc_node_range(size, 1, MODULES_VADDR, MODULES_END,
                                GFP_KERNEL, PAGE_KERNEL_EXEC, -1,
                                __builtin_return_address(0));
}
ttnl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.