Значение адреса 'в файле System.map - PullRequest
3 голосов
/ 10 января 2011

Что указывает этот адрес?Адрес где они загружены в память?

Ответы [ 2 ]

8 голосов
/ 19 января 2011

Ядро запускается в фиксированном месте в виртуальном адресном пространстве процесса.Ядро Linux обычно [в зависимости от архитектуры вашей системы] находится в верхних 1 ГБ виртуального адресного пространства 4 ГБ.Таким образом, ядро ​​для системной архитектуры с разделением 3G / 1G начинается с адреса 0xC0000000.В зависимости от карты памяти платформы, она будет отображаться на физический адрес в физической памяти.

Файл system.map является таблицей символов ядра.В нем есть символы, перечисленные вместе с их виртуальными адресами.Чтобы выяснить, где эти символы загружаются в основную память, вычтите PAGE_OFFSET [для систем 3G / 1G это 0xC00000000] из адреса символа, чтобы получить смещение и добавить это смещение к начальному физическому адресу ядра в физической памяти какопределяется из карты системной памяти.

4 голосов
/ 10 января 2011

Это виртуальный адрес ядра. То есть это адрес символа в памяти, если смотреть с точки зрения ядра, работающего с включенной трансляцией адресов, т.е. не в реальном режиме.

На большинстве (?) Платформ существует простая формула для превращения этих адресов в реальные адреса, т.е. фактический адрес в ОЗУ, но это не обязательно так.

...