下边开始码字,记录一下移植的过程,把这个移植当做 arm-linux开发的开始。
【目标板】tiny6410
【开发环境】Win7+Vmware+Ubuntu 16.04
【交叉编译器】arm-linux-gcc 4.5.1
【通讯方式】 Win7与Ubuntu之间使用Samba,目标板与主机之间使用SD卡
(1) 编译内核,在FriendlyARM-Tiny6410-DVD-A/Linux下有linux-2.6.38-20150708.tgz或者linux-2.6.38-20141014.tgz等形式,这里我使用的是20150708版本
tar xvzf linux-2.6.38-20150708.tgz
cd linux-2.6.38/
cp config_linux_mini6410 .config
开始编译
make
很显然使用arm-linux-gcc 4.5.1会报这样一个错误。
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
/opt/ARM/mini6410/linux/linux-2.6.38/kernel/Makefile:140: recipe for target 'kernel/timeconst.h' failed
make[1]: *** [kernel/timeconst.h] Error 255
Makefile:916: recipe for target 'kernel' failed
make: *** [kernel] Error 2
解决方法:
将kernel/timeconst.pl中第373行的defined()去掉,修改成:if(!@val)
(2) 下载解压驱动,这里我使用的是DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2,这是针对MT7601U STA模式下的驱动源码(百度在CSDN上的分享很多)
解压驱动
tar jxf DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2
修改名字
mv DPO_MT7601U_LinuxSTA_3.0.0.4_2010913 mt7601u
(3)修改Makefile
vi Makefile
注释line30, 取消注释lin49
PLATFORM = SMDK
line 275
ifeq ($(PLATFORM),SMDK)
LINUX_SRC = /home/bhushan/itcenter/may28/linux-2.6-samsung
CROSS_COMPILE = /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-
endif
修改为
PLATFORM = SMDK
ifeq ($(PLATFORM),SMDK)
LINUX_SRC =/opt/FriendARM/mini6410/linux/linux-2.6.38
CROSS_COMPILE = /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-
endif
LINUX_SRC为刚才编译内核的文件路径
CROSS_COMPLE= 交叉编译路径
(4)修改部分文件。
1.修改include/rtmp_def.h
vi /include/remp_def.h
修改line 1604,1605 将ra 修改成 wlan
2. 修改mt7601u/os/linux/config.mk
vi /mt7601u/os/linux/config.mk
在最后一行增加
ifeq ($(PLATFORM),SMDK)
ifneq (,$(findstring 2.4,$(LINUX_SRC)))
# Linux 2.4
CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include $(LINUX_SRC)/include/linux/modversions.h $(WFLAGS)
export CFLAGS
else
# Linux 2.6
EXTRA_CFLAGS := $(WFLAGS)
endif
endif
3.增加设备(如果使用的都是mt7601u芯片的话)只要使用lsusb命令即可查到设备的ID
vi common/rtusb_dev_id.c
在lin43 /*mt 6370*/ 后按照上一行的形式增加即可
(5) 编译回到mt7601u的目录
make
驱动生成很大,可以使用命令精简
arm-linux-strip -S os/linux/mt7601Usta.ko
(6) 现在可以通过Smbma进入Linux系统的编译目录 找到 mt7601Usta.ko 和RT2870STA.dat两个文件
遵循接下来的步骤
1、 将mt7601Usta.ko 拷贝至SD卡中
2、 将SD卡插入arm开发板,自动读取
3、 使用超级终端SecureCRT, 输入
(1)cp /sdcard/mt7601Usta /lib/modules/2.6.38-FriendlyARM/
(2)mkdir –p /etc/Wireless/RT2870STA/ //必须创建该目录,因为启动时会自动查询该目录
(3)cp /sdcard/RT5370/RT2870STA.dat /etc/Wireless/RT2870STA/
(4)depmod
(5) modprobe mt7601Usta
ifeq ($(PLATFORM),SMDK)
LINUX_SRC = /home/bhushan/itcenter/may28/linux-2.6-samsung
CROSS_COMPILE = /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-
4、使用友善之臂下的 "无线网络设置" 即可搜索无线网络
5、如果每次想开机后,不想重新载入驱动的话,请使用如下的命令
(1)vi /etc/init.d/rcS
(2)在最后增加一行 modprobe mt7601Usta
在之前的文章中http://blog.csdn.net/ofaith12345/article/details/24963457
使用驱动会有串口大量的信息通过超级终端吐出,在使用时造成极大的不方便,查了源码后,发现吐出的信息都是debug的信息,并没有注释。经过三天后下班时间的测试和debug,查源码,重新编译后,生成现在的版本的驱动几乎没有串口吐信息出来,很方便大家的使用。下载地址。
参考的文章地址:
1. http://blog.csdn.net/ofaith12345/article/details/24963457
2. http://blog.csdn.net/ofaith12345/article/details/24138399
3. http://blog.csdn.net/colouring/article/details/43449719
4.http://blog.csdn.net/diandianyangyi/article/details/16113473