最新消息:服务器现已从linode换到fzhost.net,且主题已从retina 0.2换为大前端D8

【已解决】unimplemented: inlining failed in call to XXX function body not available

工作和技术 crifan 109浏览 0评论

【问题】


之前自己用4.2.4和4.2.1版本的arm-linux-gcc 去编译Linux内核代码:

make ARCH=arm

都是正常的,但是后来换了个环境,arm-linux-gcc是3.5的,结果编译kernel出错:

。。。。。。。。。

CC [M] drivers/usb/host/ashost/otgdev_intr.o
CC [M] drivers/usb/host/ashost/otgdev_init.o
drivers/usb/host/ashost/otgdev_init.c: In function `allocEpBuff’:
drivers/usb/host/ashost/otgdev_init.c:79: sorry, unimplemented: inlining failed in call to ‘usb_dev_ep_buff_size’: function body not available
drivers/usb/host/ashost/otgdev_init.c:288: sorry, unimplemented: called from here
make[3]: *** [drivers/usb/host/ashost/otgdev_init.o] Error 1
make[2]: *** [drivers/usb/host] Error 2
make[1]: *** [drivers/usb] Error 2
make: *** [drivers] Erro
r 2

【解决过程】

去看了下代码,发现是drivers/usb/host/ashost/otgdev_init.c中的

/* allocate memory for each endpoint */
void allocEpBuff(int epNum)
{
。。。。

/* Allocate data buffers for each EP */
usb_device.endp[epNum]->data_buffer
= dma_alloc_coherent(
   NULL,
  usb_dev_ep_buff_size(epNum),
   &usb_device.endp[epNum]->data_buff_addr, GFP_KERNEL
   );
/* debugging */
debg(("ep%1d data_buff=%x ", epNum, (int)usb_device.endp[epNum]->data_buffer));

。。。。

}

而usb_dev_ep_buff_size是在drivers/usb/host/ashost/otgdev_ops.c中:

/* Function to return a buffer size, for a particular EP Minor Num */
int __inline__ usb_dev_ep_buff_size(int ep_num)
{
。。。

return 0;
}

开始,自己的想法和网上某位的一样,以为inline函数的作用域只是当前C文件,而不能被别人C文件调用。

但是,看了

【转】C语言的inline关键字

http://hi.baidu.com/serial_story/blog/item/d9f4c2fa9abf11d4b58f31bf.html

后,发现上面的inline,是可以被外部所引用的,也就是说,上面的代码,是可以正常编译的。

但是为何会编译出错?还不完全清楚。

然后又去网上找了其他类似的问题,发现,其他也有很多人遇到此问题,

基本都是用了3.4.X的gcc去编译代码,结果对于inline不支持外部引用。

而我此处是3.5的gcc编译出错,而4.2.X的gcc编译正常。

所以,基本可以断定:

【结论】

是之前旧版本的gcc(比如3.4,3.5)对于inline支持不好,有bug,不支持外部引用inline函数,所以编译会出错,而新版本的gcc(比如4.2.X)解决了这个bug,可以正常编译了。

【解决办法】

将编译器gcc升级至新版本的,比如我此处的4.2.1或4.2.4之类的,再重新编译,就可以了。

转载请注明:在路上 » 【已解决】unimplemented: inlining failed in call to XXX function body not available

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
50 queries in 0.437 seconds, using 12.78MB memory