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.

insmod syslink.ko failed -> unknown symbol final_putname()

Hello,

we want to use a newer kernel from linux-davinci (newer then 3.6. rc 7). But if we want to insmod syslink.ko we get the message:

syslink: Unknown symbol final_putname (err 0)
insmod: can't insert '/lib/modules/3.10.0/kernel/drivers/dsp/syslink.ko': unknown symbol in module or invalid parameter

The problem is, that kernel does not export the symbol now. Only kernel version 3.6.rc 7 and older export the symbol putname.
Actually we use syslink version: 2.21.00.03. The file /packages/ti/syslink/proMgr/hlos/knl/Linux/ProcMgrDrv.c calls the function putname, which is not exported/supported from kernels higher 3.6. rc 7.

Is there a newer version of syslink available, which solves this problem?

Regards, Andrea

  • Hello,

    first we build the kernel, and then we build the syslink. We got no compilation error.
    The function final_putname() is declared in kernel in file  /include/linux/fs.h. But the symbol is not longer exported in file /fs/namei.c.
    The export was removed from version 3.6.0 rc7 to 3.7.

    Andrea

  • Hi Andrea,

    There is no newer version of SysLink that solves this issue.  About the best I can suggest is for the you to add your own definition of final_putname() to that file where putname() is used (syslink/procMgr/hlos/knl/Linux/ProcMgrDrv.c), stealing the one from the kernel in <linux>/fs/namei.c:

    void final_putname(struct filename *name)
    {
            if (name->separate) {
                    __putname(name->name);
                    kfree(name);
            } else {
                    __putname(name);
            }
    }

    This should work for you since all references above should get resolved. 

    I looked into what happened a bit.  Someone was cleaning things up in Linux, and after their cleanup they saw that no module code in the kernel tree called putname() anymore, so they un-EXPORT_SYMBOL’ed it.  It’s still accessible to builtin kernel code, but not loadable modules.

    Regards,

    - Rob