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 System.map создается при каждой сборке ядра ввиду того, что в разных версиях могут быть разные адреса процедур.
Типы символов Вторая колонка обозначает тип символа (заглавные буквы означают глобальный или экспортируемый символ, строчные — локальный): A — абсолютное значение. B или b — символ в секции неинициализированных данных (обычно обозначается как BSS). D или d — символ в секции инициализированных данных. G или g — символ в секции инициализированных данных для глобальных малых объектов. i — секция, специфичная для DLL. N — отладочный символ. p — секция раскрутки стека. R или r — символ в секции с доступом только на чтение. S или s — символ в секции неинициализированных данных для малых объектов. T или t — символ в секции кода. U — неопределённый символ. V или v — слабый объект. W или w — слабый объект, который не был так помечен — означает символ заглушки в объектном файле a.out ? означает неопределённый тип символа
Расположение на файловой системе
После сборки ядра Linux файл System.map находится в каталоге /usr/src/linux/. Однако некоторые программы требуют его в других местах и, иногда, с другим именем, например, /boot/System.map-$(uname -r).
Так, например, для сборки SVGAlib необходимо наличие файла System.map в каталоге /lib/modules/$(uname -r)/build/.
Примечания
Ссылки
Категория:Ядро Linux Категория:Форматы файлов