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.