2009年5月26日 星期二

insmod module on MIPS target board 常見的錯誤

1._gp_disp symbol being undefined
_gp_disp is a magic symbol used with PIC code on MIPS. Be happy, this error message saved you from crashing your system. You should use the same compiler options to compile a kernel module as the kernel makefiles do. In particular the options -fno-pic -mno-abicalls are important.
2.xxx.o:Relocation overflow of type 4 for....

This error is caused by the limited range of relocation type 4 (R_MIPS26) which due to it's 26-bit offset only has a 28-bit reach. Modules and kernels happen to be located very far from each other and as the result this 28-bit range is insufficient. Insmod, not being stupid notices the problem and issues this error message.

The solution is the same as in the previous section. When compiling a kernel you must use the same compiler flags for modules as your actual kernel source is using in this particular kernel configuration. These are different from the flags that are used during the build of the kernel itself. In this particular case the module was built without -mlong-calls which is causing this kind of error.

沒有留言:

張貼留言