Почему мой файл / proc / kallsyms не содержит всех символов в System.map? - PullRequest
1 голос
/ 15 апреля 2020

Я видел из этого поста SO , что /proc/kallsyms должен содержать символы динамически загружаемых модулей, а также код stati c, тогда как System.map содержит только символы кода stati c. Однако, когда у меня cat /proc/kallsyms у меня, похоже, есть только символы в текстовом разделе ядра (T и t флаги), сохраните один или два символа, например

0000000000000000 D irq_stack_union
0000000000000000 D __per_cpu_start

С другой стороны в System.map у меня есть символы из многих разделов - по сути, все из /proc/kallsyms, кроме символов загруженного модуля ядра.

Чтобы показать величину этой разницы, я использовал команду wc.

user@debian:~/$ cat /boot/System.map-3.2.0-4-amd64 | wc
  51256  153768 2117121
user@debian:~/$ cat /proc/kallsyms | wc
  29336   92637 1161409

В чем причина этой разницы? Где находятся все символы, относящиеся к разделу данных, в моем файле /proc/kallsyms?

Редактировать: В соответствии с запросом, здесь есть параметры конфигурации kallsyms.

user@debian:~$ cat /boot/config-3.2.0-4-amd64 | grep KALLSYMS
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set

1 Ответ

2 голосов
/ 15 апреля 2020

Я не был уверен в вашей конфигурации, но после того, как спросил в комментариях и после просмотра вашего обновления, возникла проблема: вы, похоже, не установили CONFIG_KALLSYMS_ALL на y, поэтому только текстовые символы экспортируются на /proc/kallsyms. Установка y и перестройка ядра (хотя это не так просто) должны решить проблему.

Я не знаю, потому что у вас старое ядро ​​или какой-то дистрибутив, который отключает его в своей сборке. Вы также можете попробовать обновить ядро ​​до более новой версии. В моем Debian 9 Linux v4.9 он включен.

...