Как сделать дамп таблицы страниц?

Я новичок в Linux, C и переполнении стека. Я пытался просмотреть таблицы страниц всех запущенных процессов. Для этого я использую dump_pagetable.c.

Сначала я попытался запустить с помощью обычной компиляции gcc dump_pagetables.c -o dump_pagetables.out. Но это дало мне ошибку:

dump_pagetable.c:15:27: fatal error: linux/debugfs.h: No such file or directory #include linux/debugfs.h></code><br/><br/>Then I tried to use a make command <code>make -C /lib/modules/$(uname -r)/build M=$PWD modules</code>. So it gave me this error<code>CC [M]  /home/varma/Desktop/TLB/dump_pagetable.o
/home/varma/Desktop/TLB/dump_pagetable.c:420:1: warning: data definition has no type or storage class
 __initcall(pt_dump_init);
 ^
/home/varma/Desktop/TLB/dump_pagetable.c:420:1: error: type defaults to ‘int’ in declaration of ‘__initcall’ [-Werror=implicit-int]
/home/varma/Desktop/TLB/dump_pagetable.c:420:1: warning: parameter names (without types) in function declaration
/home/varma/Desktop/TLB/dump_pagetable.c:398:12: warning: ‘pt_dump_init’ defined but not used [-Wunused-function]
 static int pt_dump_init(void)
            ^
cc1: some warnings being treated as errors
scripts/Makefile.build:263: recipe for target '/home/varma/Desktop/TLB/dump_pagetable.o' failed
make[1]: *** [/home/varma/Desktop/TLB/dump_pagetable.o] Error 1
Makefile:1394: recipe for target '_module_/home/varma/Desktop/TLB' failed
make: *** [_module_/home/varma/Desktop/TLB] Error 2
make: Leaving directory '/usr/src/linux-headers-3.19.0-23-generic'</code>
  1. Как мне запустить этот код?
  2. Как изменить dump_pagetables.c, чтобы я также мог видеть огромные страницы.

person Varmakochin    schedule 01.08.2015    source источник
comment
Вы не можете нырнуть в середину гигантского дерева исходных текстов ядра и ожидать выборочной компиляции одного файла. На каждом уровне дерева сборки происходит огромное количество конфигураций. Вам нужно собрать ядро ​​в целом. Начните с корня исходного дерева и настройте среду сборки. Читать: github.com/mmind/rkchrome-kernel/blob/master/README Это будет началом очень долгого пути.   -  person BaseZen    schedule 01.08.2015
comment
Возможный дубликат печати записей таблицы страниц ядра   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 12.07.2017


Ответы (1)


Файл, который вы пытаетесь скомпилировать, представляет собой служебную функцию для использования в ядре Linux для малоизвестного ЦП, используемого в мейнфреймах IBM (IBM System/390). Его нельзя использовать вне ядра, и даже там он применим только к системам этой конкретной архитектуры, а не к любым настольным компьютерам.

Излишне говорить, что это не сработает.

Эквивалентная функция (CONF_X86_PTDUMP) доступна в ядре для систем x86, но она не включена. Если вы хотите использовать его, вам, вероятно, потребуется перекомпилировать ядро. Дополнительные сведения см. в ответе на вопрос "Печать таблиц страниц ядра".

person Community    schedule 01.08.2015
comment
1/2 Итак, я понимаю, что мне нужно настроить ядро. Мое ядро ​​​​3.19.0 -25 универсальное, 64-битное, и я использую его виртуально. Теперь я не понял печать таблиц страниц ядра. Но я увидел ссылку на страницу ubuntu для сборки собственного ядра, которую я нашел общей. Также в комментарии выше есть ссылка на github для ядра 3.xrkchrome-kernel /README - person Varmakochin; 03.08.2015
comment
2/2 А. Как настроить ядро ​​с установленным флагом CONF_X86_PTDUMP. B .Должен ли я редактировать определенный файл? если да, то где я могу найти его? С. Что я должен добавить в файл .config? Д. Должен ли я клонировать весь репозиторий? - person Varmakochin; 03.08.2015
comment
Репозиторий rkchrome-kernel, который вы просматриваете, предназначен для использования с некоторыми устройствами ChromeOS, использующими SoC Rockchip. Это не подходит для вашего компьютера; единственная причина, по которой он был связан в комментариях, заключается в том, что файл, на который вы ссылались в своем вопросе, был получен из этого репозитория. - person ; 03.08.2015
comment
1/2Я включил CONFIG_X86_PTDUMP, настроив ядро ​​с помощью команды make. Затем проверил версию ядра на (uname -r), она вернула 4.1.4. Позже проверил файл конфигурации в /boot/config-4.1.4, файл содержал CONFIG_X86_PTDUMP =y. Но когда я эхо <pid_of_interest> > /proc/sys/debug/pgt_dump_process_id вернул No such file or Directory exists. Также /proc/kernel_page_tables файл с именем kernel_page_tables не существует. - person Varmakochin; 06.08.2015