技术天地

在Linux主板上实现无线AP热点应用    发布时间:2014-9-26    被阅览数:

1、简述

 

  这里先简单介绍下英创公司现有的Linux产品系列,大致分为三个系列的产品:

 


产品系列

产品型号

CPU

内核版本

  EM9X60

  EM9160 / EM9460

  EM9260

  EM9360

  EM9660

  ATMEL AT91SAM9260 (200MHz)
  Linux-2.6.30
  EM928x

  EM9280

  EM9281

  EM9287

  FreeScale iMX283/iMX287 (454MHz)
  Linux-3.9.7
  EM335x

  EM335x

  EM3352

  Cortex-A8 AM3354 (1GHz)

  Cortex-A8 AM3352 (600MHz)

  Linux-3.12.10


 

  Wi-Fi无线网络短距离数据传输以其无需布线、数据传输速度快等优势,在工业应用中越来越普及。针对这类的应用我们公司已经在EM9X60、EM928x、EM335X等系列Linux嵌入式板卡板卡上移植了基于rt2870sta、rt3070sta、rt5370sta、rt5572sta的无线网络驱动,并在应用产品的开发中得以应用。

 

  无线网卡rt3070还有一种驱动工作模式为SoftAP,即可以支持无线模块工作在软AP模式下,可以作为一个软接入点。针对这类的应用,我们在公司Linux嵌入式系列板卡上做了相应的移植,实现AP热点功能。

 

  在实际应用中,若设备物理安放位置满足WiFi的信号传输条件,则可利用AP热点功能,方便地实现设备间的数据通讯,代替RS485、CAN等现场总线,大幅度降低系统布线的成本。

 

  本文将介绍 rt3070 SoftAP驱动在EM9281产品上的移植和应用。无线模块选择了目前市面上性价比较高的B-LINK公司的BL-LW05-H模块。

 

2、rt3070 SoftAP移植

 

  rt3070 SoftAP的移植过程:

 

  1、下载驱动文件:2010_0203_RT3070_SoftAP_v2.4.0.1_DPA.bz2
  2、解压后,分别修改MODULE、UTIL、NETIP三个目录下的Makefile 以及os/linux/config.mk文件配置。
    LINUX_SRC = /home/hl/em9280/linux-3.9.7
    CROSS_COMPILE = arm-none-linux-gnueabi-
  3、编译make

 

  编译成功后,将在MODULE、UTIL、NETIP三个目录下分别生成三个可加载模块:rt3070ap.ko、rtutil3070ap.ko、rtnet3070ap.ko,将这三个文件复制到EM9281根文件系统中/lib/modules/3.9.7/下,同时把rt2870ap.dat文件复制到/etc/Wireless/RT2870AP/目录下。

 

  至此rt3070 SoftAP的驱动移植完成。

 

3、rt3070 AP的应用

 

  Linux嵌入式板卡启动完成后,可通过insmod命令来加载rt3070ap的驱动,这里我们编辑了一个脚本文件来自动加载和配置rt3070 AP的应用,脚本文件ap.sh内容如下:

 

  #!/bin/sh

  insmod /lib/modules/3.9.7/rtutil3070ap.ko
  insmod /lib/modules/3.9.7/rt3070ap.ko
  insmod /lib/modules/3.9.7/rtnet3070ap.ko

  ifconfig ra0 up
  ifconfig ra0 192.168.1.1

  udhcpd /mnt/nandflash/udhcpd.conf

 

  其中的udhcpd.conf用于配置AP接入点可分配的网段ip区域。

 

  [root@EM9280 /]#./mnt/nandflash/ap.sh
  [ 24.518019] rtusb init --->
  [ 24.527379]
  [ 24.527379]
  [ 24.527379] === pAd = c8d22000, size = 417992 ===
  [ 24.527379]
  [ 24.538208] <-- RTMPAllocAdapterBlock, Status=0
  [ 24.556368] usbcore: registered new interface driver rt2870
  [ 25.105709] <-- RTMPAllocTxRxRingMemory, Status=0
  [ 25.114482] -->RTUSBVenderReset
  [ 25.117869] <--RTUSBVenderReset
  [ 25.688699] Key1Str is Invalid key length(0) or Type(0)
  [ 25.694479] Key2Str is Invalid key length(0) or Type(0)
  [ 25.700364] Key3Str is Invalid key length(0) or Type(0)
  [ 25.706197] Key4Str is Invalid key length(0) or Type(0)
  [ 25.721043] 1. Phy Mode = 9
  [ 25.723866] 2. Phy Mode = 9
  [ 25.726670] NVM is Efuse and its size =2d[2d0-2fc]
  [ 25.878998] 3. Phy Mode = 9
  [ 25.964389] MCS Set = ff 00 00 00 01
  [ 26.022838] SYNC - BBP R4 to 20MHz.l
  [ 26.345731] SYNC - BBP R4 to 20MHz.l
  [ 26.675462] SYNC - BBP R4 to 20MHz.l
  [ 27.005730] SYNC - BBP R4 to 20MHz.l
  [ 27.335732] SYNC - BBP R4 to 20MHz.l
  [ 27.665994] SYNC - BBP R4 to 20MHz.l
  [ 27.995606] SYNC - BBP R4 to 20MHz.l
  [ 28.325587] SYNC - BBP R4 to 20MHz.l
  [ 29.081255] Main bssid = 48:02:2a:40:2e:c5
  [ 29.085390] <==== rt28xx_init, Status=0
  [ 29.092623] 0x1300 = 00064320

 

  至此,一个默认网络名为RT2860AP的网络就建立起来了,我们可以通过手机加入此接入点。

 

 

  对实际的工控设备来说,只要加入此接入点,就可按照标准的socket方式,与其他设备进行数据通讯了。

Go Top