.\" Copyright (c) 2000 Keith Owens .\" This program is distributed according to the Gnu General Public License. .\" See the file COPYING in the kernel source directory. .\" $Id: kallsyms.8 1.2 Thu, 20 Apr 2000 11:14:13 +1000 kaos $ .\" .TH KALLSYMS 8 "2000 április 20" Linux "Linux Modul Támogatás" .SH NÉV kallsyms \- minden kernel szimbólumot kiír hibakereséshez .SH ÁTTEKINTÉS .B kallsyms [\-Vh] kernel_fájlnév .SH LEÍRÁS .hy 0 .B Kallsyms minden nem-verem szimbólumot kivesz a kernelből, és egy adat objektumot készít, amelyet ahhoz a kernelhez linkelve debuggolható lesz. .PP Egy normális kernel csak a modulok által használt szimbólumokat exportálja. Hibakereséshez szükség lehet minden nem-verem szimbólumora, nem csak az exportáltakra. .B kallsyms kivesz minden szekciót és szimbólumot a kernelből, a szekciókról, szimbólumokról és a címeikről egy listát készít, és egy relokálható objektumfájlt készít, ami csak egy __kallsyms szekciót tartalmaz. Miután a __kallsyms szekciót a kernelhez linkeltük, és a kernel bebootolt, bármely debugger használhatja a __kallsyms szekció adatait a jobb szimbólumfeloldás érdekében. .PP Például, egy debugger használhatja a __kallsyms adatokat, hogy feloldja a következő kernel címeket\ :- .PD 0 .IP * 3 A tulajdonos kernel vagy modul. .IP * 3 A szekció a tulajdonos kódon belül. .IP * 3 A legközelebbi szimbólum. .PD 1 .fi .SS OPCIÓK .TP .I "\-V" A modutils verzióját írja ki. .TP .I "\-h" Kiírja a súgót. .SH LINKER MENETEK .PP Ahhoz hogy egy pontos __kallsyms szekciót tartalmazó kernelt hozzunk létre, négy linker menetre van szükség a szokásos egy helyett. A kallsyms és a linker gyors, a három extra lépés csak néhány másodpercig tart egy P200-on. .IP 1 3 Első kernel fordítás, __kallsyms adatok nélkül. Futtassuk a kallsyms-t ennek eredményén, létrehozva egy relokálható objektumot, amely tartalmazza a kernel minden szekcióját és szimbólumát. .IP 2 3 Linkeljük újra a kernelt, ekkor már a kallsyms kimenetet is hozzátéve az (1) lépésből. A __kallsyms szekciót hozzátéve megváltozik a szekciók száma és sok kernel szimbólum címe, így futtassuk le újra a kallsyms-t, most a második kernelen, újra elmentve a relokálható kimenetet. .IP 3 3 Linkeljük újra a kernelt, most a (2) lépésből származó kallsyms kimenettel. Futtassuk le megint a kallsyms-t az utolsó kernelen. A __kallsyms szekció mérete és pozíciója ebből a futtatásből már stabil, semelyik kernel szekció vagy szimbólum sem változik ezután. A kallsyms kimenete a kernel szimbólumok végső értékeit tartalmazza. .IP 4 3 Linkeljük össze a végső kernelt, a (3) lépésből származó kallsyms kimenettel. .SH ADATFORMÁTUM .PP A __kallsyms szekció egy kicsit szokatlan. Szándékosan nem tartalmaz relokálható adatokat, minden "pointere" a szekción belüli bájt offszet vagy abszolút szám. Ez azt jelenti, hogy bárhová elhelyezhető relokációs problémák nélkül. Különösképp tárolható egy kernel image-en belül, tárolható a kerneltől külön, hozzáfűzhető egy modulhoz betöltés előtt, tárolható egy külön területen, stb. .PP A /usr/include/sys/kallsyms.h tartalmazza a __kallsyms adatok térképét. .SS Fejléc .PD 0 .IP * 3 A fejléc mérete. .IP * 3 A __kalsyms adatok teljes mérete, beleértve a stringeket is. .IP * 3 Szekciók száma. Ez csak a memóriába betöltött szekciókat tartalmazza. .IP * 3 Az első szekció bejegyzés offszetje a __kallsyms fejléc kezdetétől. .IP * 3 A szekció bejegyzések mérete a név string nélkül. .IP * 3 A szimbólumok száma. .IP * 3 Az első szimbólum bejegyzés offszetje a __kallsyms fejléc kezdetétől. .IP * 3 A szimbólum bejegyzések mérete a név string nélkül. .IP * 3 Az első string bejegyzés offszetje a __kallsyms fejléc kezdetétől. .IP * 3 Az első szekció[1] kezdőcíme. .IP * 3 Az utolsó szekció[1] végcíme. .PD 1 .SS Szekció bejegyzés .PP Egy bejegyzés betöltött szekciónként. Mivel a __kallsyms egy betöltött szekció, ha az input fájl tartalmazza a __kallsyms szekciót, akkor az is szerepel a listában. .PD 0 .IP * 3 A szekció kezdete a kernelen[1] belül. .IP * 3 A szekció mérete. .IP * 3 A szekció nevének offszetje a __kallsyms stringek kezdetétől. .IP * 3 A szekció jelzőbitjei az eredeti Elf szekcióból .PD 1 .SS Szimbólum bejegyzés .PP Egy bejegyzés szimbólumonként az input fájlban. Csak a betöltött szekciókba eső szimbólumok vannak tárolva. .PD 0 .IP * 3 Offszet a __kallsyms szekció bejegyzésre, amelybe ez a szimbólum tartozik. Az offszet a __kallsyms szekció bejegyzések kezdetétől értendő. .IP * 3 A szimbólum címe a kernelen[1] belül. A szimbólumok ezen mező szerint növekvő sorrendbe vannak rendezve. .IP * 3 Offszet a szimbólum nevére, __kallsyms stringek kezdetétől számítva. .PD 1 .SS Stringek .PP Null-végződésű stringek halmaza. Minden névre van egy a __kallsyms stringterület kezdetétől számított offszet hivatkozás. .SS Megjegyzés [1] .PP Ezek a mezők kivételek a "minden pointer offszet" szabály alól. Ezek egy kernelen belül abszolút címet tartalmaznak. .SH LÁSD MÉG \fBinsmod\fP(8). .SH TÖRTÉNELEM Eredeti verzió: Keith Owens , 2000 április .SH MAGYAR FORDÍTÁS Böszörményi Zoltán