A kernel symbol can mean any symbol (variable, routine, etc) in the kernel, but is probably understood to be all the routines available to the user (cat /proc/kallsyms). Exported symbols are symbols which each device driver (or other kernel routine) makes available to the rest of the kernel. This is necessary because some drivers need to share information between them, but generally all symbols in a module are hidden from the rest of the kernel (to avoid the 'namespace pollution' problem). So, for example, any routines and variables in a device driver which need to be accessible to another device driver will have the EXPORT_SYMBOL macro to export it (or EXPORT_GPL_SYMBOL if the author only wants that information to be available to GPL drivers and not non-free drivers).
Last edited by pinniped; 08-30-2008 at 08:06 AM.