Hi I am trying to install a module I wrote using "insmod" on "linux-2.4.18-19.8.0" and I get the following error. This is the first linux kernel module that I have written. Do I need to do a mknod before I do an insmod ? (my kernel module is a simple character driver that just loops thru the pci devices in the system and returns the <board,slot> information for the given <vendorId,deviceId>) ***ERROR BEGIN**** # insmod queryDevice.o queryDevice.o: unresolved symbol open queryDevice.o: unresolved symbol close queryDevice.o: unresolved symbol puts queryDevice.o: unresolved symbol printf queryDevice.o: unresolved symbol strerror queryDevice.o: unresolved symbol ioctl queryDevice.o: Hint: You are trying to load a module without a GPL compatible license and it has unresolved symbols. Contact the module supplier for assistance, only they can help you. ****ERROR END**** Would someone be kind enough to let me know what I am doing wrong? Do I need any additional libraries that I need to link with ? I have attached a section of the code if that helps. I am using the GNU specific file ops initiliazation. Could this be the problem? Any help would be greatly appreciated. Thanks for your time Vijay ************CODE SEGMENT BEGIN************ #ifndef __KERNEL__ #define __KERNEL__ #endif #ifndef MODULE #define MODULE #endif // ... OS include files #include <linux/module.h> #include <linux/kernel.h> #include <linux/ioctl.h> #include <linux/slab.h> #include <linux/fs.h> #include <linux/errno.h> #include <linux/types.h> #include <linux/pci.h> #include <asm/uaccess.h> #include <asm/io.h> // ... Static variable declarations static int queryMajorNum; static int queryDevRegistered = 0; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // ... Constants // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MODULE_AUTHOR("Vijay Venkata"); MODULE_SUPPORTED_DEVICE("All Devices on pcibus with a vendorId and deviceId"); MODULE_DESCRIPTION("Provides Query mechanism to get slot information for a" "given <vendorId,deviceId> tuple"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // ... Data Types // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // ... The Query Device typedef struct { // ... Nothing Device specific }query_Dev; // ... The pci device static struct pci_dev* pPciDev = NULL; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // ... Device File Operations // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // ... The file operations on this device, GNU Specific struct file_operations queryDevice_fops = { open: queryDevice_open, ioctl: queryDevice_ioctl, release: queryDevice_close }; // ... Implementation here *********CODE SEGMENT END*********** -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/