Re: Missing version line in System.map file?

From: Lee Strobel
Date: Wed Nov 29 2017 - 21:56:43 EST


Hi Randy,

Thank you for replying to my e-mail. That is interesting and it seems to
explain why my map file didn't have that version line. I hadn't realized
that it depends on the CONFIG_KALLSYMS option (which I did indeed have
enabled). I am somewhat new to configuring/building the kernel and, from
the help description, enabling that option seemed like a good idea at
the time.

However, I think it would be good if the map file could be set to always
include the version line, if that would help compatibility with sysklogd
(and, of course, if it doesn't break anything else).

So, is that an easy change to make? How will I know if it gets approved
for the next version release?

Also, can you tell me which kernel version that previous change was made
in?

Sorry for all the questions, but I haven't had any previous involvement
with kernel development.

Regards,

Lee


On Wed, 2017-11-29 at 11:31 -0800, Randy Dunlap wrote:
> On 11/29/2017 11:07 AM, Randy Dunlap wrote:
> > On 11/28/2017 07:20 PM, Lee Strobel wrote:
> >> Hi,
> >>
> >> I have a question about the Linux kernel, which I have been trying to
> >> find an answer to through various forums for some time now, but without
> >> success. I'm wondering if anyone on this mailing list might be able to
> >> help?
> >>
> >> I've been trying to build a Linux From Scratch (LFS) system, using
> >> SysVinit and sysklogd. However, when I tried to boot up, klogd wasn't
> >> accepting the System.map file, printing log messages such as:
> >>
> >> Oct 9 17:24:17 <lee_lfs> kernel: klogd 1.5.1, log source = /proc/kmsg
> >> started.
> >> Oct 9 17:24:17 <lee_lfs> kernel: Inspecting /boot/System.map
> >> Oct 9 17:24:17 <lee_lfs> kernel: Cannot find map file.
> >>
> >> So, I dug into the source code for klogd a little bit, and it appears
> >> the reason the map file wasn't being accepted was because it didn't
> >> contain a 'version' line, which klogd was looking for, in the form:
> >>
> >> [address] [type] Version_XXXXX
> >>
> >> (where XXXXX is the kernel version # in base 256).
> >>
> >> So, I've been asking around on various forums. It seems that none of the
> >> map files that are being produced by more recent kernel versions include
> >> this line and no-one that I've spoken to on the Linux user forums seems
> >> to know why this is.
> >>
> >> Was a change made to the kernel, to remove this 'version' line
> >> from the map file? If so, how are the newer init systems verifying that
> >> the map file is the same version as the running kernel? Perhaps sysklogd
> >> needs to be updated?
> >>
> >> By the way, I tried adding a 'dummy' version line to my map file and
> >> klogd accepted it fine.
> >>
> >> Hopefully someone out there can assist, as no-one in the Linux user
> >> community seems to know what is going on with this.
> >>
> >> Best regards,
> >>
> >> Lee Strobel
> >> Engineer/Tinkerer/Free Software Supporter ..
> >
> > Hi,
> >
> > Having that symbol in the System.map file depends on the kernel config
> > symbol CONFIG_KALLSYMS. KALLSYMS must be disabled (unset) for that
> > symbol to be generated. I don't know why it's like that.
> >
> > ffffffff815e50a8 B Version_197216
> >
> > Ted, do you have any idea about that?
> >
> > thanks.
>
> ah, git log tells us:
>
> commit 197dcffc8ba0ea943fee86e28e99cd9575799772
> Author: Daniel Guilak <guilak@xxxxxxxxxxxxxxxxxx>
> Date: Fri Jul 25 01:45:50 2008 -0700
>
> init/version.c: define version_string only if CONFIG_KALLSYMS is not defined
>
> int Version_* is only used with ksymoops, which is only needed (according
> to README and Documentation/Changes) if CONFIG_KALLSYMS is NOT defined.
> Therefore this patch defines version_string only if CONFIG_KALLSYMS is not
> defined.
>
> Signed-off-by: Daniel Guilak <daniel@xxxxxxxxxxxxxxxx>
> Cc: Randy Dunlap <randy.dunlap@xxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
>
>
> I would be OK with reverting that commit so that Version_xxxxxx is
> always present in System.map.
>
>