ayuda!!!
What is the System.map file?Every time you
compile a kernel, a file is created which maps the kernel address locations of
important variables and functions to symbolic names. Think of this file as the
way the kernel links symbolic names to addresses in the same way you would link
a .o file to an executable with gcc. Every time you compile the kernel, the
address of the variables and functions changes, so this look-up file needs to be
rewritten. This file is called System.map, and appears at the top
of the kernel directory source tree, usually /usr/src/linux. We call this
information the `kernel symbol table'.
What is System.map used for in kernel
space?When a protection fault occurs, the klogd daemon translates important
addresses (meaningless to us) in the kernel to thier symbolic equivalents
(meaningful to us). This translated kernel message is then forwarded through
whatever reporting mechanism klogd is using. The fact that the addresses get
translated makes it easier for us to decipher what went wrong during the fault.
A kernel developer can determine exactly what the kernel was doing when the
error condition occurred.
To this end, upon daemon initialization during bootup, klogd will look for a
system map in 3 places, in the
following order:
- /boot/System.map
- /System.map
- /usr/src/linux/System.map
A few drivers
will need System.map to resolve symbols
(since they're linked against the kernel headers instead of, say, glibc). They
will not work correctly without the System.map created for the
particular kernel you're currently running.
Note, there are actually two types of address resolution are performed by
klogd. The first is static translation, which uses the System.map file. The second is
dynamic translation which is used with some loadable modules and is not relevant
here.
What else uses the System.mapDon't think that System.map is only useful for
kernel oopses. Although the kernel itself doesn't really use System.map, other programs such as
lsof and dosemu rely on an up to date kernel symbol table.
What happens if I don't have a healthy System.map?Suppose you have 4
kernels. You need 4 separate System.map files, one for each
kernel! Now if you see an error upon boot:
System.map does not match actual
kernel This error might appear together with a few other
messages that say:
module XXXX could not be loaded because some
versions do not match.
How do I remedy the above situation?The solution is to copy the file
/usr/src/linux/System.map to /boot/System.map. Here's what I do.
Suppose I have multiple kernels like:
- vmlinuz-2.2.14
- vmlinuz-2.2.13
- vmlinux-2.2.13.sound
all located in /boot. Then I also have the
following kernel symbol tables, also located in /boot:
- System.map-vmlinuz-2.2.14
- System.map-vmlinuz-2.2.13
- System.map-vmlinux-2.2.13.sound
And make a symlink of the one I use most (System.map-vmlinuz-2.2.14) to
/boot/Symbol.map. % ls -l /boot/
total 2170
-rw-r--r-- 1 root root 221778 Nov 3 1999 System.map-2.2.13
-rw-r--r-- 1 root root 232313 Jan 20 1999 System.map-2.2.13.sound
-rw-r--r-- 1 root root 232426 Jan 29 1999 System.map-2.2.14
-rw-r--r-- 1 root root 12 Jan 29 1999 System.map -> System.map-2.2.14
-rw-r--r-- 1 root root 512 Jul 6 1999 boot.0300
-rw-r--r-- 1 root root 4540 Jul 22 1999 boot.b
-rw-r--r-- 1 root root 612 Jul 22 1999 chain.b
-rw------- 1 root root 7168 Jan 29 21:28 map
-rw-r--r-- 1 root root 649591 Jan 20 23:54 vmlinux-2.2.13.sound
-rw-r--r-- 1 root root 649590 Nov 3 10:45 vmlinuz-2.2.13
-rw-r--r-- 1 root root 659572 Jan 29 21:22 vmlinuz-2.2.14
Did you think this article was informative? As a way to say thanks, why don't
you make some suggestions on my html to make this page more attractive. I'm also
looking for people to help me design a consistant and pleasant look throughout
my linux pages. Please email me. I'm
also looking for technical corrections, constructive criticism, etc.
--- Slds, Alfonso
UNIBOL Av. Santa Cruz
#1200 Tel +591 3 33-5717 Fax +591 3 36-5542 Santa Cruz -
Bolivia
http://www.unibol.net
|