I've noticed an irritating message when klogd starts up.  It says:

  Cannot find map file.

I traced the cause of this message.  System.map is a dump of the kernel 
symbols using nm.  klogd finds the System.map, but rejects it because 
there is no symbol with the name "Version_xxxxxx" where xxxxxx is a 
decimal conversion of the kernel's major/minor/patch (e.g. 2.6.32).

Researching some more, it looks like the kernel removed this symbol by 
default somewhere around 2.6.27.  sysklogd has not been updated since 2007.

I checked some other distros.  The ones I found still have the Version_ 
symbol (grep Version_ System.map).  They are generally using older 
kernels with back ported patches.

My understanding is that klogd reads the symbols to translate kernel 
oops to symbols.   I think I saw that the kernel is now doing that 
internally.  In that case, there is no need for klogd to read System.map 
at all.

To stop klogd from trying to read System.map, it requires passing -x in 
the command line.  We can do that easily in the boot scripts.

What this also implies is that we don't need to copy System.map to /boot 
at all.  My analysis may have not gone deep enough, but I want to get 
this out for other opinions.

   -- Bruce

P.S.  It appears that the Version string can be turned on in the 
kernel's make menuconfig, but it's not particularly easy:

Symbol: KALLSYMS [=y]
Prompt: Load all symbols for debugging/ksymoops
   Defined at init/Kconfig:780
   Depends on: EMBEDDED
   Location:
     -> General setup
       -> Configure standard kernel features (for small systems)

Change (for small systems) to yes, select the submenu, turn off "Load 
all symbols"
-- 
http://linuxfromscratch.org/mailman/listinfo/lfs-dev
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to