zoukankan      html  css  js  c++  java
  • arcotg_udc: exports duplicate symbol imx_usb_create_charger (owned by kernel)

    /*********************************************************************************
     * arcotg_udc: exports duplicate symbol imx_usb_create_charger (owned by kernel)
     * 说明:
     *     内核驱动中导出的函数和模块中导出的函数重复了。
     *
     *                                              2017-10-14 深圳 南山平山村 曾剑锋
     ********************************************************************************/
    
    
    一、错误信息:
        [zengjf@root ~]#  modprobe g_ffs idVendor=0x18d1 idProduct=0x4e42 iSerialNumber
        ="buildroot"
        arcotg_udc: exports duplicate symbol imx_usb_create_charger (owned by kernel)
        modprobe: can't load module arcotg_udc (kernel/drivers/usb/gadget/arcotg_udc.ko): invalid module format
        [zengjf@root ~]#
    
    二、查找imx_usb_create_charger函数:
        Qt@zengjf:~/kernel/linuxQt_kernel$ grep imx_usb_create_charger * -R
        Binary file drivers/usb/gadget/arcotg_udc.o matches
        Binary file drivers/usb/gadget/arcotg_udc.ko matches
        drivers/usb/gadget/arcotg_udc.c:    if (imx_usb_create_charger(&udc_controller->charger, "imx_usb_charger"))
        drivers/usb/gadget/imx_usb_charger.c: * imx_usb_create_charger - create a USB charger
        drivers/usb/gadget/imx_usb_charger.c:int imx_usb_create_charger(struct usb_charger *charger,
        drivers/usb/gadget/imx_usb_charger.c:EXPORT_SYMBOL(imx_usb_create_charger);
        Module.symvers:0xa8003a03    imx_usb_create_charger    drivers/usb/gadget/arcotg_udc    EXPORT_SYMBOL
        Qt@zengjf:~/kernel/linuxQt_kernel$
    
    三、cat drivers/usb/gadget/imx_usb_charger.c
        ...
        int imx_usb_create_charger(struct usb_charger *charger,
                const char *name)
        {
            int         ret = 0;
            struct power_supply *psy = &charger->psy;
        
            if (!charger->dev)
                return -EINVAL;
        
            if (name)
                psy->name = name;
            else
                psy->name = "usb_charger";
        
            usb_charger_init(charger);
        
            psy->type       = POWER_SUPPLY_TYPE_USB;
            psy->properties     = power_props;
            psy->num_properties = ARRAY_SIZE(power_props);
            psy->get_property   = usb_charger_get_property;
        
            psy->supplied_to    = usb_charger_supplied_to;
            psy->num_supplicants    = sizeof(usb_charger_supplied_to)/sizeof(char *);
            psy->external_power_changed = my_batt_ext_power_changed;
        
            ret = power_supply_register(charger->dev, psy);
            if (ret)
                goto fail;
        
            mutex_init(&charger->lock);
            INIT_WORK(&charger->work, usb_charger_work);
        
        fail:
            return ret;
        }
        EXPORT_SYMBOL(imx_usb_create_charger);
        ...
    
    四、cat drivers/usb/gadget/arcotg_udc.c
        ...
            /* create usb charger */
        #ifdef CONFIG_IMX_USB_CHARGER
            udc_controller->charger.dev = &pdev->dev;
            udc_controller->charger.dp_pullup = usb_charger_pullup_dp;
            udc_controller->charger.enable = true;
            if (pdata->charger_base_addr)
                udc_controller->charger.charger_base_addr = pdata->charger_base_addr;
            if (imx_usb_create_charger(&udc_controller->charger, "imx_usb_charger"))
                dev_err(&pdev->dev, "Can't create usb charger
    ");
        #else
            udc_controller->charger.dp_pullup = usb_charger_pullup_dp;
            udc_controller->charger.enable = false;
        #endif
        ...
    
    五、解决办法:
        make menuconfig去掉CONFIG_IMX_USB_CHARGER
  • 相关阅读:
    java 之 对象与垃圾回收
    Java 之 内部类
    java 接口(interface)
    抽象类
    Java之fianl修饰符
    类的继承
    上传图片
    一般处理程序 给图片添加文字水印
    socket
    初识linq,lambda表达式
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/7666869.html
Copyright © 2011-2022 走看看