System.karta
I Linux är filen System.map en symboltabell som används av kärnan .
En symboltabell är en uppslagning mellan symbolnamn och deras adresser i minnet. Ett symbolnamn kan vara namnet på en variabel eller namnet på en funktion. System.map krävs när adressen till ett symbolnamn, eller symbolnamnet för en adress, behövs. Det är särskilt användbart för att felsöka kärnpanik och kernel-oopses . Kärnan gör själv adress-till-namn-översättningen när CONFIG_KALLSYMS
är aktiverat så att verktyg som ksymoops inte krävs.
Interner
Följande är en del av en System.map-
fil:
c041bc90 b packet_sklist c041bc94 b packet_sklist_lock c041bc94 b packet_socks_nr c041bc98 A __bss_stop c041bc98 A _end c041c000 A pg0 ffffe400 A 4sffecall Affkernel _vfffec0YS 0 A __kernel_sigreturn ffffe440 A __kernel_rt_sigreturn
Eftersom adresser kan ändras från en byggnad till en annan, genereras en ny System.map för varje byggnad av kärnan.
Symboltyper
Tecknet mellan adressen och symbolen (avgränsade med mellanslag) är typen av en symbol. Verktygsprogrammet nm
på Unix-system listar symbolerna från objektfiler. System.map är direkt relaterad till den, genom att den här filen produceras av nm
på
hela kärnprogrammet – precis som nm
listar symbolerna och deras typer för alla små objektprogram.
Några av dessa typer är:
-
A
för absolut -
B
ellerb
för oinitierad datasektion (kallad BSS) -
D
ellerd
för initierad datasektion -
G
ellerg
för initierad datasektion för små objekt (globalt) -
i
för avsnitt som är specifika för DLL-filer -
N
för felsökningssymbol -
p
för stackavveckningssektion -
R
ellerr
för skrivskyddad datasektion -
S
ellers
för oinitierad datasektion för små objekt -
T
ellert
för text (kod) avsnitt -
U
för odefinierat -
V
ellerv
för svagt föremål -
W
ellerw
för svaga objekt som inte har taggats så -
-
för sticksymboler i en a.out-objektfil -
?
för "symboltyp okänd"
Filsystemets plats
Efter att ha byggt Linux-kärnan finns System.map
i roten av källkatalogen . Vissa ytterligare programvaruinstallationssteg förväntar sig dock att filen finns någon annanstans:
- som
/boot/ System.map-$( uname -r)
- byggnad SVGAlib förväntar sig att hitta
/lib/modules/$(uname -r)/build/System.map