您的位置:首页 > Web前端

关于rt3070驱动编译问题(2)

2012-09-11 17:34 288 查看
      前段时间也编译个RT3070驱动,开发板是mini2440,内核时2.6.32.遇到很多问题,但都解决了,详细请看博客。这几天因为要在另外一块板子移植驱动板子是sam9x5,内核2.3.39,因为有前面的经验,以为会很容易,没想到,各种问题的出现,而且是以前没遇到个的。不过努力之后还搞定了。关于修改Makefile和config.mk就不在一步步说了,前面的博客里都有说明,大同小异。主要是说下遇到的问题吧。

       刚开始我平台选择:PLATFORM = IXP,对于平台选择我也不是很懂,只晓得这与芯片有关,但每个PLATFORM具体代表那个厂家芯片我不知道,有知道的博友请在评论里给我说说,这里先谢了,因为网上看到有用ATMEL芯片的也选择这平台。编译时出现错误如下:

mcuzone/wifi/rt3070sta/os/linux/../../common/cmm_mac_usb.c: In function 'NICInitRecv':

/mcuzone/wifi/rt3070sta/os/linux/../../common/cmm_mac_usb.c:789:3: error: implicit declaration of function 'usb_buffer_alloc'

/mcuzone/wifi/rt3070sta/os/linux/../../common/cmm_mac_usb.c:789:30: warning: assignment makes pointer from integer without a cast

/mcuzone/wifi/rt3070sta/os/linux/../../common/cmm_mac_usb.c:818:4: error: implicit declaration of function 'usb_buffer_free'

make[2]: *** [/mcuzone/wifi/rt3070sta/os/linux/../../common/cmm_mac_usb.o] Error 1

make[1]: *** [_module_/mcuzone/wifi/rt3070sta/os/linux] Error 2

make[1]: Leaving directory `/mcuzone/work/linux-2.6.39'

make: *** [LINUX] Error 2

以前编译时好像也出现过类似问题,记得是内核没编译好的原因,于是一遍遍的编译内核,在测试,但没有解决。关于内核的配置,这个博客写得比较详细http://blog.csdn.net/unsigned_/article/details/6123876。想了想可能是平台的原因,平台不同,CFLAG也就不同,于是选择以前用的平台PLATFORM = PC。编译时出现问题如下:

/mcuzone/wifi/rt3070sta/os/linux/../../common/cmm_mac_usb.c: In function 'NICInitRecv':

/mcuzone/wifi/rt3070sta/os/linux/../../common/cmm_mac_usb.c:789:3: error: implicit declaration of function 'usb_buffer_alloc'

/mcuzone/wifi/rt3070sta/os/linux/../../common/cmm_mac_usb.c:789:30: warning: assignment makes pointer from integer without a cast

/mcuzone/wifi/rt3070sta/os/linux/../../common/cmm_mac_usb.c:818:4: error: implicit declaration of function 'usb_buffer_free'

make[2]: *** [/mcuzone/wifi/rt3070sta/os/linux/../../common/cmm_mac_usb.o] Error 1

make[1]: *** [_module_/mcuzone/wifi/rt3070sta/os/linux] Error 2

make[1]: Leaving directory `/mcuzone/work/linux-2.6.39'

make: *** [LINUX] Error 2

因为内核该配置的我都配置了,不用的以防万一我也编译成模块了,所以排除内核。以前2.6.32版本并没有出现这样的问题,这次是2.3.39版本的,那么就可能是内核版本差异造成的,经过努力发现2.6.35 内核后, usb_buffer_alloc
和 usb_buffer_free 被替换成 usb_alloc_coherent 和 usb_free_coherent。所以编译才会报错。修改 include/os/rt_linux.h 文件。如下

#define
RTUSB_URB_ALLOC_BUFFER(pUsb_Dev, BufSize, pDma_addr) usb_buffer_alloc(pUsb_Dev, BufSize, GFP_ATOMIC, pDma_addr)
#define RTUSB_URB_FREE_BUFFER(pUsb_Dev, BufSize, pTransferBuf, Dma_addr) usb_buffer_free(pUsb_Dev, BufSize, pTransferBuf,
Dma_addr)
替换成:
#define RTUSB_URB_ALLOC_BUFFER(pUsb_Dev, BufSize, pDma_addr) usb_alloc_coherent(pUsb_Dev, BufSize, GFP_ATOMIC, pDma_addr)
#define RTUSB_URB_FREE_BUFFER(pUsb_Dev, BufSize, pTransferBuf, Dma_addr) usb_free_coherent(pUsb_Dev, BufSize, pTransferBuf,
Dma_addr)

然后在make。通过。另外出现的第一个问题也就是PLATFORM
= IXP,有人如果有解决的经验,请告诉我。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息