Here are an interesting couple of problems I am having with kernel
symbols I am hoping someone may be able to help me with.
1. Symbol Not Found.
Having selected basic ATM and IP over ATM to be built into the kernel
and PPPoA to be built as a module and building and installing both
kernel and modules, when I try to install the pppoatm module I get an
unresolved symbol error for pppoatm_ioctl_hook.
Having checked the source pppoatm_ioctl_hook is defined in
net/atm/common.c like this:
#if defined(CONFIG_PPPOATM) || defined(CONFIG_PPPOATM_MODULE)
int (*pppoatm_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
EXPORT_SYMBOL(pppoatm_ioctl_hook);
#endif
As my .config file contains:
CONFIG_PPPOATM=m
I would expect the symbol to be defined and if I run 'nm' on common.o
I find the line:
00000000 B pppoatm_ioctl_hook
So the symbol is definitely there. Is the B for BSS segment and is
that why it isn't found?
If I select pppoatm to be built into the kernel the symbol is
resolved correctly.
2. System.map does not match kernel data.
After building a kernel and installing it, running LILO and
installing the modules, sometimes I get errors about System.map not
matching the kernel data. The last example is having build pppoatm
into the kernel and I got the following errors during startup:
{pppoatm_ioctl_hook} {pppoatm_ioctl_hook_R__ver_pppoatm_ioctl_hook}
/boot/System.map-2.4.20 does not match kernel data
On a machine at work I often get a similar warning about the
System.map not matching kernel data when running the ps command
though when the machine is first booted this problem rarely happens,
it only appears after some time.
Any guesses?
Steve.