This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM365 EVM (disagrees about version of symbol struct_module)

All,

 

I have been trying to get the DM365 IPNC camera code from Appro to work on the DM365 EVM with the Leopard camera daughter card.  I have already asked this question to Appro but am not getting any responses.

 

The kernel loads and starts INIT.

 

When it tries to load the csl.ko module, I get:

csl: disagrees about version of symbol struct_module

insmod: cannot insert './csl.ko': Invalid module format (-1): Exec format error

 

Next drv.ko displays the same problem.

cmemk.ko ,edmak.ko, irqk.ko, dm365mmap.ko, all display the same error.

 

I have made sure I am compiling the kernel (for the EVM and not the IPNC hardware) and all Appro code with the exact same Cross-compiling tools (which seems to be the consensus on the internet if you do a search for this problem), but I am obviously missing something.

 

Has anyone run across a similar problem?

 

Thanks,

Jim

  • this error "disagrees about version of symbol struct_module" normally means that the static portion of the kernel (uImage) and the loadable modules (.ko files) were not built from the same source code and hence there is a conflict.  Are you certain you are rebuilding all the software.

  • Juan,

    At this point I am not certain of much ;)

     

    Appro had a LOCALVERSION defined in the .config which may have been confusing the issue, but I have sense removed that (it was getting tacked on the end of the kernel version).  The thing I don't understand is how to get the DVSDK modules (cmem, etc) to use the kernel version to match.  Sorry for such a basic question but I think this chunk of knowledge is what is keeping me from reaching my goal.

     

    If I build the kernel and kernel modules with the following commands:

    $make distclean

    $make ARCH=arm CROSS_COMPILE=arm_v5t_le- <config_file_from_Appro>

    $make gconfig     (Remove the local version and make sure it is targeting the EVM instead of IPNC HW)

    $make ARCH=arm CROSS_COMPILE=arm_v5t_le- uImage (reported version 'Linux-2.6.18')

    $make ARCH=arm CROSS_COMPILE=arm_v5t_le- modules

    $make ARCH=arm CROSS_COMPILE=arm_v5t_le- INSTALL_MOD_PATH=<path to where cramfs image is being built> modules_install

    The module install places the modules in the <path to where cramfs image is being built>/lib/modules/2.6.18 directory which seems to match the uImage version.

     

    I then build the DVSDK modules with:

    $make clean

    $make all

    $make install (as root)

    These modules do get copied to the correct directory.

     

    Then I make my cramfs image.

     

    I am loading the kernel and cramfs image via tftp and booting from memory.

     

    To make things easy, it might be better if someone could answer these questions for me.

    Where does the DVSDK makefile pick up the kernel versions?

    Is it better to use the DVSDK make linux target to build the kernel to avoid the versioning problems?

    I don't think this is my full issue right now since the kernel modules are giving the same errors when insmod tries to load them.  If it would help I can include the boot sequence showing all the errors.

     

    Thanks for the help!

    Jim