On Mon, 23 Aug 2004, Lei Yang wrote: > Hi friends, > > I've askeed questions about errors compiling kernel modules caused by > including <stdio.h> and got some very helpful info here. > > I changed those I/O stream and file operation in the code and get the > module compiled, however, there would be warnings like > > In file included from /home/lei/modules/test.c:49: > /home/lei/modules/Kcomp.h:21: warning: function declaration isn't a > prototype > /home/lei/modules/Kcomp.h:27: warning: function declaration isn't a > prototype > /home/lei/modules/Kcomp.h:69: warning: function declaration isn't a > prototype > > And the no prototype fuction looks like > > int preset() // with no arguments > { > p = &nodes[0][0]; > return 0; > } > A function looks like this: int present() { } A prototype for the same function looks like this: int present(void); Functions always have "{}". Prototypes never do. -- Yes there's some troll who might cite some obscure case... ignore them. If you compile above a certain warning-level, then prototypes are required. The prototype usually goes in header files and the function (the actual code) goes in the source files. > > So when I tried to install the module with insmod ./test.ko , > there would be an error, > > insmod: error inserting './test.ko': -1 Unknown symbol in module > > Could anyone tell me what is wrong here? Is that because of the no > prototype function declaration? > Do `depmod -e test.ko` to see what it's complaining about. You can see all the symbols by using `nm`. Try it. Your code probably didn't define the necessary stuff to make a module. You need to look at a typical module (driver) that comes with the kernel. Just find one of the shortest ".c" files in the driver tree. Cheers, Dick Johnson Penguin : Linux version 2.4.26 on an i686 machine (5570.56 BogoMips). Note 96.31% of all statistics are fiction. -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/