Hisi3520+USBWIFI(RT3070)做路由器移植过程
硬件平台:Hisi3520开发板 Linux内核:linux-3.0.y
说明:这是一个Hisi3520+RT3070WIFI作为路由器的移植过程!
在做下面的过程中,我认为你是有个有点嵌入式开发经验的人,内核源码已经可以编译通过运行等!特别要强调,usb总线驱动一定要是好的。下面的步骤也描述了如何利用sdk安装交叉编译器。如需帮助,请联系孙怀亚。
第一步、下载 Hi3520A_SDK_V1.0.2.0.tgz,这是海思的开发SDK,可以将 第二步、解压缩海思SDK
#tar -zxvf Hi3520A_SDK_V1.0.2.0.tgz
修改sdk.Unpack文件 #vim sdk.unpack
将第一行的#!bin/sh改为#!bin/bash,如下图
#./sdk.unpack
解压完成后目录多出如下目录osdrv,mpp目录:
进入osdrv目录 #cd osdrv
在osdrv目录下,有文件系统工具busybox,内核kernel,交叉编译工具toolchain,uboot等,目录结构详细说明请看目录的readme_en.txt。
第三步、安装交叉编译器:
进入toolchain目录
进入arm-hisiv100-linux
运行#./cross.install 安装脚本将自动帮你将交叉编译器安装到/opt目录下,同时在
/etc/profile文件的最后一行加入环境变量,你可以看一下这两个地方的变动: 可以看到/opt目录下多出了hisi-linux目录
可以看到/etc/profile文件最后多出了如下几行:
运行一下环境变量配置:
#Source /etc/profile 这个将重新配置环境变量 在中端中输入
#arm-hisiv100-linux-gcc –v
如果看到如上图信息说明你的交叉编译已经安装完毕,可以使用了!如果没有,你需查找原因,一般会解决的,如果实在不行,请联系孙怀亚。
邮箱:sunhuaiya@163.com qq:413983254
第四步:编译WIFI驱动:回到osdrv目录: 在移植WIFi前,wifi驱动源码需要内核自持,
所以,我们将osdrv目录下的kernel也拷贝到/opt/kener目录下:
将2010_0203_RT3070_SoftAP_v2.4.0.1_DPA.bz2拷贝到wireless目录下
进入kener目录,在内核linux-3.0.y根目录下添加.config文件。如果你没有这个文件,请联系孙怀亚,或360avs项目组其它成员,切记,这个文件不可缺少,编译内核时都要用到!或者在内核根目录执行下面代码:
#cp arch/arm/configs/godarm_defconfig .config
进入/opt/wirelss #cd /opt/wirelss
解压缩2010_0203_RT3070_SoftAP_v2.4.0.1_DPA.bz2 #tar –jxvf 2010_0203_RT3070_SoftAP_v2.4.0.1_DPA.bz2 生成2010_0203_RT3070_SoftAP_v2.4.0.1_DPA目录
#mv 2010_0203_RT3070_SoftAP_v2.4.0.1_DPA us_wifi 太长,修改一下名字
进入usb_wifi目录,在目录下有MODULE、NETIF、UTIL三个文件夹,里面分别还有makefile,
我们编译时是调用者三个makefile执行的
下面我们修改者三个makefile,三个同样的方法。例如进入MODULE目录修改如下:
# cd MODULE
# vim Makefile 找到如下代码修改
修改三个目录下os/linux/config.mk,主意要分别修改三个! #cd os/linux/
#vim config.mk 找到如下代码修改
进入/opt/wireless/usb_wifi/UTIL/os/linux修改rt_usb_util.c文件
将usb_buffer_alloc 和 usb_buffer_free这两个函数用usb_alloc_coherent 和 usb_free_coherent代替
保存退出!
进入驱动源码的顶层Makefile,添加知道架构指令:
make ARCH=arm CROSS_COMPILE=arm-hisiv100-linux-
#vim Makefile 修改如下:
回源码顶层目录执行: #make
MODULE、NETIF、UTIL三个文件夹下都能看到 os目录.在三个
os/linux目录下分别有rt3070ap.ko,rtutil3070ap.ko,rtnet3070ap.ko文件,就是我们编译好的
编译一会,没有错误。进入文件
第五步:移植wifi,编译通过后,将在MODULE、NETIF、UTIL三个文件夹中分别生成三个
可加载模块:rt3070ap.ko,rtutil3070ap.ko,rtnet3070ap.ko。通过U盘或网络拷贝到开发板目录下运行.将这三个模块和MODULE/rt2870ap.dat文件拷贝到开发板目录下。并将文件移动到相应位置:不管你用什么方式,必须将rt2870ap.dat文件放到开发板文件系统的
/etc/Wireless/RT2870AP/目录下:其他模块可通过网络挂载方式或u盘等在开发板上加载!rt2870ap.dat为默认配置,essid,密码等!感兴趣可以打开看看!好多的配置
#mkdir /etc/Wireless/ 创建一个文件夹,这个是雷凌默认启动路径, #mkdir /etc/Wireless/RT2870AP/ 再创建一个目录,也是雷凌默认启动路径
#cp rt2870ap.dat /etc/Wireless/RT2870AP/RT2870AP.dat拷贝配置文件到默认路径 #cp rt3070ap.ko /opt 拷贝三个文件到开发板一个目录。 #cp rtutil3070ap.ko /opt #cp rtnet3070ap.ko /opt
第六步:加载模块
首先我是网络挂载的:#mount -t nfs 192.168.1.3:/opt/ /opt -o nolock,这里将ubuntu的opt目录挂载到开发板的opt目录!
进入开发板opt目录,加载驱动模块,顺序要按一下顺序加载,不然会有错误:
#insmod rtutil3070ap.ko
#insmod rt3070ap.ko //这个如果出问题,请参考6410的移植方法 #insmod rtnet3070ap.ko 第七步:查看网络:可以看到有两个以太网,一个无线网(为啥有两个以太网,不太清楚)
#ifconfig –a eth0 Link encap:Ethernet HWaddr 00:0C:30:A0:39:C5 inet addr:192.168.1.216 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2491 errors:0 dropped:0 overruns:0 frame:0 TX packets:105 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
RX bytes:1797070 (1.7 MiB) TX bytes:12690 (12.3 KiB) Interrupt:119
eth1 Link encap:Ethernet HWaddr 00:00:00:00:00:00 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:119 Base address:0x4000
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
ra0 Link encap:Ethernet HWaddr 00:00:00:00:00:00
BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
因篇幅问题不能全部显示,请点此查看更多更全内容