主题 : 无线网卡芯片(RT2870)驱动程序该如何编译为驱动模块(ARM可用)? 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 79046
精华: 0
发帖: 57
金钱: 285 两
威望: 57 点
综合积分: 114 分
注册时间: 2012-09-28
最后登录: 2014-11-12
楼主  发表于: 2012-11-17 14:14

 无线网卡芯片(RT2870)驱动程序该如何编译为驱动模块(ARM可用)?

本人按照国嵌的无线网卡移植手册支持的网线网卡列表,买了TL-WN721N的无线网卡,可买回来以后发现并不能使用。因为是芯片的原因,这款无线网卡的芯片是RT2870,小弟不知道该怎么编译这个驱动源程序为ARM可用的驱动模块?希望能够得到大家的 帮助!附驱动源码   2010_0709_RT2870_Linux_STA_v2.4.0.1.tar.bz2 (629 K) 下载次数:82
级别: 侠客
UID: 79046
精华: 0
发帖: 57
金钱: 285 两
威望: 57 点
综合积分: 114 分
注册时间: 2012-09-28
最后登录: 2014-11-12
1楼  发表于: 2012-11-17 14:44
急求帮助!
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2012-11-17 20:32
(假设你的内核源代码在/home/xxx/kernel目录下,交叉编译工具arm-linux-gnueabi-gcc安装在/opt/toolchain/bin目录下)

首先,确保你在/home/xxx/kernel目录下成功编译了内核镜像并下载到开发板中运行以避免出现编译出来的内核模块和开发板上的内核镜像不匹配的情况;
其次,你需要在驱动源代码包根目录下的Makefile的219行添加
ifeq ($(PLATFORM),MVL5)
LINUX_SRC = /home2/charlestu/AP-VT3426/linux-2.6.18
CROSS_COMPILE = /opt/montavista/pro/devkit/arm/v5t_le_mvl5/bin/arm_v5t_le-
endif

ifeq ($(PLATFORM),MINI2440)
LINUX_SRC = /home/xxx/kernel
CROSS_COMPILE = /opt/toolchain/bin/arm-linux-gnueabi-
endif

在249~250行添加
ifeq ($(PLATFORM),FREESCALE8377)
    $(MAKE) ARCH=powerpc CROSS_COMPILE=$(CROSS_COMPILE) -C  $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules
else
ifeq ($(PLATFORM),MINI2440)
        $(MAKE) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) -C  $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules
else
    $(MAKE) -C $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules
endif
endif



然后把Makefile里的
PLATFORM = PC
改成
PLATFORM = MINI2440

这样应该就可以用"make all"来编译了
[ 此帖被kasim在2012-11-17 20:50重新编辑 ]
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 79046
精华: 0
发帖: 57
金钱: 285 两
威望: 57 点
综合积分: 114 分
注册时间: 2012-09-28
最后登录: 2014-11-12
3楼  发表于: 2012-11-17 23:50
我的内核是国嵌的linux-2.6.32.2,交叉编译工具是版本是4.3.2,并且环境变量已经设置好了。在编译的时候出现了以下错误:
[root@localhost dbb]#make all
make -C tools
make[1]: Entering directory `/home/dbb/RT2870/tools'
gcc -g bin2h.c -o bin2h
make[1]: Leaving directory `/home/dbb/RT2870/tools'
/home/dbb/RT2870/tools/bin2h
cp -f os/linux/Makefile.6 /home/dbb/RT2870/os/linux/Makefile
make ARCH=arm CROSS_COMPILE=arm-linux- -C /home/dbb/linux-2.6.32.2 SUBDIRS=/home/dbb/RT2870/os/linux modules
make[1]: Entering directory `/home/dbb/linux-2.6.32.2'
  CC [M]  /home/dbb/RT2870/os/linux/../../common/crypt_md5.o
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:28:23: error: rt_config.h: No such file or directory
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:43: error: expected ')' before '*' token
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:66: error: expected ')' before '*' token
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:159: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'MD5Init'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:187: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'MD5Update'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:259: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'MD5Final'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:341: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'MD5Transform'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:455: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'SHAInit'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:483: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'SHAUpdate'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:551: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'SHAFinal'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:627: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'SHATransform'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:708: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'HMAC_SHA1'
make[2]: *** [/home/dbb/RT2870/os/linux/../../common/crypt_md5.o] Error 1
make[1]: *** [_module_/home/dbb/RT2870/os/linux] Error 2
make[1]: Leaving directory `/home/dbb/linux-2.6.32.2'
make: *** [LINUX] Error 2
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
4楼  发表于: 2012-11-18 09:23

 回 3楼(honeydbb) 的帖子

看来还得在os/linux/config.mk的末尾加上
ifeq ($(PLATFORM),MINI2440)
EXTRA_CFLAGS := $(WFLAGS) -I$(RT28xx_DIR)/include
endif
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 79046
精华: 0
发帖: 57
金钱: 285 两
威望: 57 点
综合积分: 114 分
注册时间: 2012-09-28
最后登录: 2014-11-12
5楼  发表于: 2012-11-18 13:19
还是有错误啊,主要是提示这个文件(crypt_md5.c)问题。
[root@localhost RT2870]# make all
make -C tools
make[1]: Entering directory `/home/dbb/RT2870/tools'
gcc -g bin2h.c -o bin2h
make[1]: Leaving directory `/home/dbb/RT2870/tools'
/home/dbb/RT2870/tools/bin2h
cp -f os/linux/Makefile.6 /home/dbb/RT2870/os/linux/Makefile
make ARCH=arm CROSS_COMPILE=/usr/local/arm/4.3.2/bin/arm-linux- -C /home/dbb/linux-2.6.32.2 SUBDIRS=/home/dbb/RT2870/os/linux modules
make[1]: Entering directory `/home/dbb/linux-2.6.32.2'
  CC [M]  /home/dbb/RT2870/os/linux/../../common/crypt_md5.o
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:28:23: error: rt_config.h: No such file or directory
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:43: error: expected ')' before '*' token
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:66: error: expected ')' before '*' token
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:159: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'MD5Init'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:187: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'MD5Update'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:259: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'MD5Final'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:341: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'MD5Transform'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:455: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'SHAInit'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:483: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'SHAUpdate'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:551: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'SHAFinal'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:627: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'SHATransform'
/home/dbb/RT2870/os/linux/../../common/crypt_md5.c:708: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'HMAC_SHA1'
make[2]: *** [/home/dbb/RT2870/os/linux/../../common/crypt_md5.o] Error 1
make[1]: *** [_module_/home/dbb/RT2870/os/linux] Error 2
make[1]: Leaving directory `/home/dbb/linux-2.6.32.2'
make: *** [LINUX] Error 2
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
6楼  发表于: 2012-11-18 14:17

 回 5楼(honeydbb) 的帖子

我按照这样修改已经编译成功了,附件里是我修改过后的Makefile和os/linux/config.mk, 供你参考。
我的内核源代码目录在/opt/projects/opencsbc/build/linux-2.6.32.2, 工具链安装在/opt/FriendlyARM/toolschain/4.4.3/bin/目录下
附件: fix_build.tar.gz (6 K) 下载次数:36
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 79046
精华: 0
发帖: 57
金钱: 285 两
威望: 57 点
综合积分: 114 分
注册时间: 2012-09-28
最后登录: 2014-11-12
7楼  发表于: 2012-11-18 20:06
这都一样了,我的还是不行。难道跟linux操作系统那个有关系吗?要不你把那个生成的模块发给我吧!谢谢
级别: 侠客
UID: 79046
精华: 0
发帖: 57
金钱: 285 两
威望: 57 点
综合积分: 114 分
注册时间: 2012-09-28
最后登录: 2014-11-12
8楼  发表于: 2012-11-18 20:10
编译之前要设置以下这个:

/os/linux下,编辑config.mk,修改这两句,启用WPA特性
HAS_WPA_SUPPLICANT=y
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
级别: 侠客
UID: 79046
精华: 0
发帖: 57
金钱: 285 两
威望: 57 点
综合积分: 114 分
注册时间: 2012-09-28
最后登录: 2014-11-12
9楼  发表于: 2012-11-19 12:17
换了fedora9操作系统。终于编译成功,非常感谢!!