undefined reference to `s3c_dma_get_ops'

出错记录如下:

sound/built-in.o: In function `__samsung_dma_get_ops':
/home/anzyelay/Desktop/arm/linux-3.6.6-gcc.4.9.4/arch/arm/plat-samsung/include/plat/dma-ops.h:60: undefined reference to `s3c_dma_get_ops'
sound/built-in.o: In function `s3c24xx_i2s_trigger':
/home/anzyelay/Desktop/arm/linux-3.6.6-gcc.4.9.4/sound/soc/samsung/s3c24xx-i2s.c:291: undefined reference to `s3c2410_dma_ctrl'
make: *** [vmlinux] Error 1

在移植内核蜂鸣器时配置好后出现上述现象
解决思路:
打开dma-ops.h文件如下:

extern void *samsung_dmadev_get_ops(void);
extern void *s3c_dma_get_ops(void);

static inline void *__samsung_dma_get_ops(void)
{
    if (samsung_dma_is_dmadev())
        return samsung_dmadev_get_ops();
    else
        return s3c_dma_get_ops();
}

发现其是引用外部申明的 extern void *s3c_dma_get_ops(void);
samsung_dmadev_get_ops函数是一致的,应该不可能是函数定义有问题,同时我也在内核中找到了它的定义文件:
s3c-dma-ops.c

static struct samsung_dma_ops s3c_dma_ops = {
    .request    = s3c_dma_request,
    .release    = s3c_dma_release,
    .config     = s3c_dma_config,
    .prepare    = s3c_dma_prepare,
    .trigger    = s3c_dma_trigger,
    .started    = s3c_dma_started,
    .flush      = s3c_dma_flush,
    .stop       = s3c_dma_stop,
};

void *s3c_dma_get_ops(void)
{
    return &s3c_dma_ops;
}
EXPORT_SYMBOL(s3c_dma_get_ops);

看到EXPORT_SYMBOL,立马怀疑是不是没有将这个文件加入编译,那应该是make menuconfig没有配置了,打开配置查找了下S3C_DMA,果然是
这里写图片描述

找到S3C24XX_DMA勾上就好了.重新再次编译正常了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值