关于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,有人如果有解决的经验,请告诉我。
刚开始我平台选择: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,有人如果有解决的经验,请告诉我。
相关文章推荐
- 关于vs编译的驱动体积大小问题
- 关于在Helper2416开发板编译内核和驱动的问题总结
- 关于vc6++编译DDK驱动出现的问题fatal error C1083: Cannot open include file: 'specstrings.h': No such file or dir
- 关于arm-linux下编译加载ch341串口驱动的方法与问题
- 关于linux内核驱动开发中Makefile编译的问题
- 关于linux内核驱动开发中Makefile编译的问题
- 在移植rt3070驱动的时候编译遇到的问题
- 关于linux内核驱动开发中Makefile编译的问题
- 关于QT编译ORACLE驱动的问题
- Macaca 关于 macaca 升级安卓最新驱动后,执行用例报错遇到的问题解决分享
- 请问各位大神一个关于 .net mf 编译的问题
- FlashDevelop+OMSF第一个例子,关于编译常量的问题
- 调试记录-关于#include与#include在64位编译时的问题
- 关于kali linux安装驱动的问题
- 一个关于VS2008在其他未安装VS2008的电脑上无法运行编译的程序的问题 收藏
- 关于Thinkpad E420双显卡驱动安装和切换的问题
- 最新自动化编译脚本,关于gradle编译遇到的一些问题的解决方案
- 关于libevent的环境搭建和编译使用问题
- 关于命令行中javac 编译成功,用 java 运行 class 文件出现 “ 找不到或无法加载主类 ” 的问题
- 关于Windows 10只能在启动选项中通过F7禁用驱动签名才能启动的问题