System.map

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

System.map — файл, внутри которого находится символьная таблица адресов функций и процедур, используемых ядром операционной системы Linux. В этой таблице перечислены имена переменных и функций и их адреса в памяти компьютера. Эта таблица весьма полезна при отладке ядра в случае Kernel panic или Linux oops. System.map генерируется при компиляции ядра.

Символьная таблица адресов для загруженного ядра также находится в файле /proc/kallsyms.

Создание файла[править | править исходный текст]

Файл System.map можно создать командой nm -n vmlinux > System.map. При компиляции ядра используется следующая команда (скрипт /usr/src/linux/scripts/mksysmap, версия ядра 2.6.35): $NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)' > $2, где $1 — файл vmlinux, $2 — файл System.map.

Содержимое файла[править | править исходный текст]

Пример содержимого файла System.map:

c040f4ec b local_apic_timer_verify_ok
c040f4f0 b calibration_result
c040f4f4 b enabled_via_apicbase
c040f4f8 b apic_phys
c040f500 b apic_pm_state
c040f538 B nmi_active
c040f53c B nmi_watchdog_enabled
c040f540 B unknown_nmi_panic
c040f544 b backtrace_mask
c040f548 b lock.19318
c040f54c b nmi_pm_active
c040f550 b last_irq_sums
c040f560 b alert_counter

Вторая колонка обозначает тип символа (заглавные буквы означают глобальный или экспортируемый символ, строчные — локальный):

  • A — абсолютное значение.
  • B — символ в секции неинициализированных данных.
  • D — символ в секции инициализированных данных.
  • N — отладочный символ.
  • R — символ в секции инициализированных данных ReadOnly.
  • T — символ в секции кода.

System.map создается при каждой сборке ядра ввиду того, что в разных версиях могут быть разные адреса процедур[1].

Расположение[править | править исходный текст]

После сборки Linux System.map находится в директории /usr/src/linux/. Однако некоторые программы требуют его в других местах и иногда с другим именем, например, /boot/System.map-$(uname -r). Для сборки SVGAlib необходимо наличие файла /lib/modules/$(uname -r)/build/System.map[значимость факта?].

См. также[править | править исходный текст]

Примечания[править | править исходный текст]

Ссылки[править | править исходный текст]

  • Alavoor Vasudevan. The Linux Kernel HOWTO, System.map (англ.) (4 мая 2003). — Описание файла System.map. Проверено 20 сентября 2011.