Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3037869
  • 博文数量: 674
  • 博客积分: 17881
  • 博客等级: 上将
  • 技术积分: 4849
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 10:15
文章分类

全部博文(674)

文章存档

2013年(34)

2012年(146)

2011年(197)

2010年(297)

分类:

2011-12-01 09:36:05

原文地址:WiFi 移植 作者:vincent-cws

WiFi 88W8686移植过程记录:

(1)移植gspi_io.c和gspi_io.h文件,主要是WiFi中断响应函数,直接发送数据函数,直接接收数据函数的移植过程。

(2)配置linux系统为打开所有的Wireless参数.

(3)Linux WiFi source code makefile修改为如下:
============================================================================
# File: Makefile
#############################################################################
# Configuration Options
#############################################################################
# Debug Option
# DEBUG LEVEL n/1/2:
# n: NO DEBUG
# 1: Only PRINTM(MSG,...), PRINTM(FATAL,...), ...
# 2: All PRINTM()
CONFIG_DEBUG=0

# Proc in /proc/net/wlan
CONFIG_PROC_DEBUG=y

# Linux Power Management
CONFIG_ENABLE_PM=n

# Re-association in driver
CONFIG_REASSOCIATION=y

# Manufacturing firmware support
CONFIG_MFG_CMD_SUPPORT=y

CONFIG_PROC_FS=y
CONFIG_PROC_DEBUG=y

CONFIG_WIRELESS_EXT=y

CONFIG_REASSOCIATION=y

#############################################################################
# Select Platform Tools
#############################################################################

KERNEL_WE=22

KERNELDIR=/home/no773/xxxx/kernel
BINDIR = ../bin_gspi8686

#############################################################################
# Compiler Flags
#############################################################################

CFLAGS += -I$(KERNELDIR)/include

CFLAGS += -DFPNUM='"4"'


ifeq ($(CONFIG_DEBUG),1)
    CFLAGS += -DDEBUG_LEVEL1
endif

ifeq ($(CONFIG_DEBUG),2)
    CFLAGS += -DEBUG_LEVEL2
    CFLAGS += -DDEBUG_LEVEL1
    CFLAGS += -DDEBUG_LEVEL2
    DBG = -dbg
endif

ifeq ($(CONFIG_WIRELESS_EXT),y)
    CFLAGS += -DWIRELESS_EXT=22
endif



ifeq ($(CONFIG_PROC_DEBUG),y)
    CFLAGS += -DPROC_DEBUG
    export CONFIG_PROC_DEBUG
endif

ifeq ($(CONFIG_ENABLE_PM),y)
    CFLAGS += -DENABLE_PM
endif

ifeq ($(CONFIG_REASSOCIATION),y)
    CFLAGS += -DREASSOCIATION
endif

ifeq ($(CONFIG_MFG_CMD_SUPPORT),y)
    CFLAGS += -DMFG_CMD_SUPPORT
endif

#############################################################################
# Make Targets
#############################################################################
WLANOBJS =    wlan_main.o wlan_fw.o wlan_wext.o \
        wlan_rx.o wlan_tx.o \
        wlan_cmd.o wlan_cmdresp.o \
        wlan_scan.o wlan_join.o

WLANOBJS += wlan_wmm.o
WLANOBJS += wlan_11d.o
WLANOBJS += wlan_fops.o

ifeq ($(CONFIG_PROC_FS),y)
    CFLAGS += -DCONFIG_PROC_FS
    WLANOBJS += wlan_proc.o
    ifeq ($(CONFIG_PROC_DEBUG), y)
        CFLAGS += -DCONFIG_PROC_DEBUG
        WLANOBJS += wlan_debug.o
    endif
endif

CFLAGS += -DSSPCTRLER=1
IFOBJS := if_gspi.o
IOOBJS := gspi_io.o gspi_debug.o
obj-m := gspi8xxx.o gspi.o
gspi8xxx-objs := $(WLANOBJS) $(IFOBJS)
gspi-objs := $(IOOBJS)

default:
    $(MAKE) -C $(KDIR) M=`pwd` modules

clean:
    $(MAKE) -C $(KDIR) M=`pwd` clean
    rm -rf *.o *.ko *.mod.c *.symvers *.cmd *.mod  wlanconfig

============================================================================

(4)编译内核后,再编译wifi驱动,成功后,再把无线配置工具也移植过去。

(5)移植iwconfig工具,直接使用交叉编译器编译(修改Makefile后)然后,"./configure&make",
    编译链接后把iw开头的工具全部移动到嵌入式NFS根目录下,就可以使用啦。
============================================================================
##
## Please check the configurion parameters below
##

ARCH ?=arm
CROSS_COMPILE ?= arm-softfloat-linux-gnu-
#INCLUDE ?= /usr/local/arm/3.4.5/arm-softfloat-linux-gnu/include
INCLUDE ?= /home/no773/xxxx/compiler/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/

CC := $(CROSS_COMPILE)gcc
AS := $(CROSS_COMPILE)as
GCC := $(CROSS_COMPILE)gcc
AR := $(CROSS_COMPILE)ar

## Installation directory. By default, go in /usr/local.
## Distributions should probably use /, but they probably know better...
ifndef PREFIX
  PREFIX = .
endif

## Compiler to use (modify this for cross compile).
//CC = gcc
## Other tools you need to modify for cross compile (static lib only).
//AR = ar
RANLIB = ranlib
##
.......
============================================================================

(6)同时也把测试工具netperf移植过来,交叉工具编译时把"./configure"时的错误信息直接屏蔽,跳过错误后,就可以编译链接处结果。

(6.5)编译wpa_supplicant-0.7.3包时,可以先不使用OpenSSL库,“cp defconfig .config”然后
修改.config内容如下(在默认基础上,修改如下,其他不变):
============================================================================
# Driver interface for Atmel driver
##CONFIG_DRIVER_ATMEL=y  (注释掉这个)

# Select TLS implementation
# openssl = OpenSSL (default)
# gnutls = GnuTLS (needed for TLS/IA, see also CONFIG_GNUTLS_EXTRA)
# internal = Internal TLSv1 implementation (experimental)
# none = Empty template
#CONFIG_TLS=openssl
CONFIG_TLS=none (配置为空,不使用OpenSSL)
============================================================================


(7)写个bash的脚本,在编译驱动完成时也把这些iw*配置工具和netperf测试工具拷贝到NFS根目录下,如下:
============================================================================
#! /bin/sh -v

###############################################################
#  @file: post_process.sh
#  @brief: post-process for install the output file
#  @author: NO.773 (xxxx@xxxx.com)
#  history:
#  @20110513: initial
#
###############################################################


NFS_HOME='/root/rootfs/home'

WIFI_TST='/home/no773/xxx/driver/wifi/s80/test'
WIFI_SRC='/home/no773/xxx/driver/wifi/s80/src'
WIFI_CFG='/home/no773/xxx/driver/wifi/s80/iwconfig'
WIFI_LIB='/home/no773/xxx/driver/wifi/s80/lib'
WIFI_TOOLS='/home/no773/xxx/driver/wifi/s80/tools'
NFS_HOME='/root/rootfs/home'

## remove all file under nfs root
rm -f ${NFS_HOME}/*

## copy all needed files to nfs root
cp  "${WIFI_SRC}/gspi.ko" \
    "${WIFI_SRC}/gspi8xxx.ko" \
    "${WIFI_SRC}/gspi8686.bin" \
    "${WIFI_SRC}/helper_gspi.bin" \
    "${WIFI_TOOLS}"/* \
    "${NFS_HOME}/"

## make test example and copy to nfs root
make -C "${WIFI_TST}"/examples/
cp "${WIFI_TST}"/examples/*-tcp "${WIFI_TST}"/examples/*-udp "${NFS_HOME}/"



============================================================================

(8)写好上述步骤后,就可以下载linux内核,然后启动linux,通过串口输出shell来操作嵌入式linux系统,进入到nfs根系统的home目录下后,直接启动"./init.sh"脚本来配置wifi网络参数,init.sh如下所示:
============================================================================
#! /bin/sh -v

###############################################################
#  @file: init.sh
#  @brief: initial wifi enviroment after linux boot up
#  @author: NO.773 (xxx@xxx.com)
#  history:
#  @20110513: initial
#  @20110516: add WEP, WPA-PSK(TKIP/AES), WPA2-PSK(TKIP/AES)
#             testing code.
#  @20110517: add DHCP client
#
###############################################################

RESOLV_CONF="/etc/resolv.conf"  # DNS server file
DNS_S1='192.168.0.126'          # DNS server IP
DNS_S2='192.168.0.111'          # DNS server IP

DHCP=yes                        # DHCP client

AUTH_SEL=wpa            # 'wep' slect WEP method to encrypt data,
                        # 'wpa' use WPA-PSK method
                        # otherwise plain text ( free ... )

LIB_DIR='/lib'            # lib directory
BIN_DIR='/bin'            # bin directory
AP_NAME='xxx_NO773'       # accept point (ssid)
AP_PW=''     # AP psk (pre-shared key)
AP_PRO='WPA2'             # WPA or WPA2

WEP_K0='aaaaa'            # WEP KEY 0
WEP_K1='bbbbb'            # WEP KEY 1
WEP_K2='ccccc'            # WEP KEY 2
WEP_K3='ddddd'            # WEP KEY 3

ETH_NUM='eth1'            # device (eth0, eth1 ...)
IP_CARD='192.168.56.200'  # ip address
NM_CARD='255.255.254.0'   # net mask
RT_NET='192.168.56.0'     # route net
RT_GW='192.168.56.1'      # route gate way

FW_HP='./helper_gspi.bin' # firmware helper bin
FW_NM='./gspi8686.bin'    # firmware name bin

NETPERF_PORT='8880'            # netperf server port
NETPERF_SERV='192.168.56.137'  # netperf server host IP

## install wifi fireware firstly
insmod gspi.ko
insmod gspi8xxx.ko helper_name=${FW_HP} fw_name=${FW_NM}

## tool for setting wifi options
cp iw*  ${BIN_DIR}/
cp *.so* ${LIB_DIR}/

## tool for testing wifi performance
cp netperf netserver ${BIN_DIR}/

## setting which AP(SSID) to connect
## iwconfig ${ETH_NUM} essid ${AP_NAME}

##########################################################################
## WPA(2)-PSK: create the configure file of setting SSID and Password Info
##########################################################################
AP_CF_FILE='WPA-PSK-TEMP.conf'
touch ${AP_CF_FILE}
echo "# WPA-PSK
network={
    ssid=\"${AP_NAME}\"
    key_mgmt=WPA-PSK
    proto=${AP_PRO}
    pairwise=CCMP TKIP
    group=CCMP TKIP
    psk=\"${AP_PW}\"
}" > ${AP_CF_FILE}

##########################################################################
## WEP KEY: create the configure file of setting SSID and Password Info
##########################################################################
AP_WEP_FILE='WEP-TEMP.conf'
touch ${AP_WEP_FILE}
echo "# Static WEP keys
network={
    ssid=\"${AP_NAME}\"
    key_mgmt=NONE
    wep_key0=\"${WEP_K0}\"
    wep_key1=\"${WEP_K1}\"
    wep_tx_keyidx=0
}" > ${AP_WEP_FILE}

##########################################################################
## NO KEY: create the configure file of setting SSID and Password Info
##########################################################################
AP_PLAIN_FILE='PLAIN-TEMP.conf'
touch ${AP_PLAIN_FILE}
echo "# Plaintext (no encryption) network
network={
    ssid=\"${AP_NAME}\"
    key_mgmt=NONE
}" > ${AP_PLAIN_FILE}


## login the Accept Point
if [ "${AUTH_SEL}" = wep ]; then
    ./wpa_supplicant -B -i${ETH_NUM} -c./${AP_WEP_FILE}
elif [ "${AUTH_SEL}" = wpa ]; then
    ./wpa_supplicant -B -i${ETH_NUM} -c./${AP_CF_FILE}
else
    ./wpa_supplicant -B -i${ETH_NUM} -c./${AP_PLAIN_FILE}
fi


if [ "${DHCP}" = yes ]; then
## DHCP allocate IP address from DHCP server
udhcpc -b -i ${ETH_NUM} -C "pos_wifi"
else
## setting DNS servers
echo "nameserver ${DNS_S1}
nameserver ${DNS_S2}" > ${RESOLV_CONF}
## setting wifi IP manually
ifconfig ${ETH_NUM} ${IP_CARD} netmask ${NM_CARD}
fi

## delay for a minite
ping -c 2 -I ${ETH_NUM} ${NETPERF_SERV}

## view current ethXX infomation
ifconfig -a

## make the wifi route at the toppest item in route table
route del -net ${RT_NET} netmask ${NM_CARD} dev ${ETH_NUM}
route add -net ${RT_NET} netmask ${NM_CARD} dev ${ETH_NUM}

## setting the default gateway in route table
route add default gw ${RT_GW} ${ETH_NUM}

## testing to WLAN
ping -c 4 -I eth1

## testing the bandwidth of WiFi Card
## netperf server need startup firstly
## command "netserver.exe -L 192.168.56.137 -p 8880 -4"
./netperf -p ${NETPERF_PORT} -H ${NETPERF_SERV}

## view route table
netstat -nr

============================================================================

DONE! GOOD LUCK!

阅读(1128) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~