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 Unix-system listar symbolerna från objektfiler. System.map är direkt relaterad till den, genom att den här filen produceras av nm 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 eller b för oinitierad datasektion (kallad BSS)
  • D eller d för initierad datasektion
  • G eller g 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 eller r för skrivskyddad datasektion
  • S eller s för oinitierad datasektion för små objekt
  • T eller t för text (kod) avsnitt
  • U för odefinierat
  • V eller v för svagt föremål
  • W eller w 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

Se även