来自Wi-Fi专家的声音

 

SX-580为台灯的无线化赋能 (1)

撰写于:2014年8月25日
作者:silex Wi-Fi专家

最近一直在说无线规格的话题,我也很久没有(或许是本博客的第一次)写过一篇关于用双手制作东西的文章了。本项目旨在利用本公司发布的SX-580-2700DM SDK,制作“通过iPhone可无线操控的台灯”。第一篇文章介绍如何设置 SX-580 SDK 开发环境。


关于SX-580-2700DM和SDK
SX-580-2700DM
是我们“SX-580”智能无线模块的开发套件版本。标准版 SX-580 与 SX-580-2700DM 的区别在于闪存从 64Mbit(8MByte)增加到了 256MBit(32MByte),从而在rootfs区域留出了更多空间,使用户编程更加灵活。除闪存外,其他规格大致相同,具体如下:

CPU:Freescale i.MX280 ARM926EJ @ 454MHz
RAM:32M x 16bit (64MByte) SDRAM @ 205MHz
ROM:64M(8MByte) or 256MBit(64MByte) SPI Flash @ 80MHz
LAN:1 x 10/100BASE Ethernet
WLAN:SX-SDMAN 1x1 dual-band 802.11n (AR6003)
Bluetooth:SX-SDMAN Bluetooth 4.0+LE (AR3002)
I/F:
3 x UART (1 x console, 2 x data)
2 x USB2.0FS OTG
1 x SPI
1 x I2C
11 x GPIO
SX-580 SDK(官方产品型号为"SX-IMAPP-SDK")相当于在SX-580-2700DM上运行的Linux BSP(Board Support Package)。基本上,它由生成引导加载程序(U-Boot)、Linux内核和Linux文件系统(rootfs)的源代码和构建环境,以及无线局域网驱动程序和目标固件(提供二进制文件,源代码不公开)组成。它的构建环境只是一个简单的Makefile和脚本,而不是像Eclipse那样的GUI集成环境,也没有像LTIB或YOCTO那样的软件包管理器。可以说是原始、简单、直接、易懂。

SX-580 SDK可在Linux上运行。在Windows上进行SX-580SDK的开发时,在虚拟机(Virtual Machine)上安装Linux。然后在上面安装SX-580SDK。我们提供了Ubuntu 9.04(2009年4月版)的虚拟机镜像作为推荐环境。
Ubuntu的默认安装几乎不包含任何开发工具,因此如果您进行了简洁安装,就必须使用apt-get获取各种工具,但由silex发布的虚拟机镜像已安装了构建SX-580所需的一切工具。

在Windows上创建虚拟机环境
要在Windows上创建虚拟机环境,首先要安装虚拟机软件。SX-580 SDK 的《开发人员指南》(1.0.1)包含使用 VMWare提供的 VMWare player创建虚拟机环境的说明,但VMWare player的免费发布版本被视为 "评估使用",商业使用违反了许可协议。这次我们使用的是Oracle公司的VirtualBox,它没有这些限制。这次使用的版本是4.3.14。

首先从http://www.virtualbox.org 下载并安装Windows x86版VirtualBox。这些设置都是基本默认设置,如果对话框多次询问,请反复按 "OK(确定)"和"Next(下一步)"。


VirtualBox 下载网站。

 
运行 VirtualBox 安装程序。

 
按"下一步"继续。


采用默认设置进行“下一步”。

 
采用默认设置进行“下一步”。


确认警告后选“是”。

 
“安装"。

 
开始安装。

 
您会多次收到类似的警告,但请点击"继续"。

 
安装完成。

在VirtualBox上创建虚拟Ubuntu机
安装完成后,启动VirtualBox时的界面如下所示。在这里,按下"新建"按钮创建Linux虚拟机。目前,虚拟内存设置为1 MByte,虚拟磁盘设置为"无",虚拟机准备就绪后再更改设置。


从VirtualBox初始屏幕选择 "新建"。


选择"Linux"、"Ubunut (32bi) "和"下一步"。

 
内存设置为 1024 KByte, 并点击"下一步"。

 
创建"不带虚拟磁盘"。

 
确认警告并"继续"。

 
虚拟机创建状态。

首先,运行由silex发布的自解压文件Ubuntu_VM.exe,创建Ubuntu_VM.vmdk。部署目标可以是任何地方,但我把它放在与虚拟机管理文件相同的目录下(c:\users\sasaki\VirtualBox VMs\SX580SDK),以方便备份管理。


Ubuntu_VM.exe 正在自解压中。

按下虚拟机上的"设置"按钮,打开配置面板。从左侧选项卡中选择"存储器",点击IDE控制器旁边的"+"按钮,然后从"添加现有磁盘"中选择 Ubuntu_VM.vmdk。请注意,此处的文件名已更改为"Ubuntu.vmdk",以便与SX-580SDK文档和之前的描述一致。


从虚拟机设置中选择 "存储"。


添加IDE磁盘。


选择已部署的Ubuntu虚拟机映像。


虚拟磁盘选择状态。

在虚拟磁盘旁边,更改网络设置。从左侧标签页选择"网络",将默认设置"NAT"更改为"Bridge"。这是因为Bridge更便于将虚拟机用作TFTP服务器,因为NAT允许从虚拟机内部访问外部,但不允许从外部访问虚拟机(很难)。


从虚拟机设置中选择"网络"。

 
将设置从 "NAT "更改为 "Bridge"。

此外,还要设置"共享文件夹",以便虚拟机和主机之间交换文件。如果未设置此项,则必须使用网络文件传输(如SCP)在虚拟机和主机PC之间交换文件。共享文件夹也可以是任何地方,但我指定的是C:temp\share


从虚拟机设置中选择"共享文件夹"。


选择共享文件夹。


选择共享文件夹。


“共享文件夹选择状态”设置。


共享文件夹设置状态。

启动和配置虚拟Ubuntu机
表示具有所需配置的虚拟机的状态。选择此项并按下"启动",虚拟机就会启动,Ubuntu 9.04(2009年4月版)也会启动。用户名和密码为"sxdevel"。


虚拟机配置状态。


虚拟机已启动并登录。


已登录Ubuntu。

silex提供的Ubuntu虚拟机映像默认配置为日文106 JIS键盘。我使用的是英语104 US Array,因此请选择System->Preference->Keyboard并更改设置。将键盘设置为「Generic 104-PC」,点击「+Add...」以添加「English-USA」布局,然后在布局的列表框内通过拖放将「USA」移动到上方,并点击「Default」以设置为默认值。如果您不使用日语键盘,可以删除"Japan"。


System->Preference->Keyboard 选择。


Keyboard Model 变更。


"Generic 104-key PC" 选择。


"+Add"。


Selected Layouts: 的 "+Add" 选择。


选择English / USA,然后点击 "+Add" 。


在选定布局中向上拖动USA。

现在,您已经在VirtualBox中设置了共享文件夹,但您无法使用共享文件夹功能。需要在虚拟机中运行的虚拟机上安装额外的"Guest Additions "功能。
首先,从VirtualBox的菜单中选择「Device -> Insert Guest Additions CD Image...」,在虚拟机中加载虚拟光驱。


选择Device -> Insert Guest Additions CD Image... 。


已安装虚拟光驱。


虚拟CD-ROM的内容。

打开终端,以root权限(sudo)运行虚拟CD-ROM内的脚本「VBoxLinuxAdditions.run」。


开始安装共享文件夹。


共享文件夹安装结束。

安装完成后弹出虚拟光驱。


弹出虚拟光驱。

如果在这种状态下重启虚拟机,就会在/media/sf_shared中看到c:\temp\shared的内容(需要root权限才能访问)。

在虚拟Ubuntu机上安装 SX-580 SDK
SX-580SDK开发环境中,将 SX-IMAPP-SDK_v1.0.1_source.tar.gz 放在共享文件夹中,从虚拟机中复制并解压缩。这里创建了 $HOME/sx580sdk 目录,然后在该目录下展开。


sxdevel@silex:~$ sudo cp /media/sf_share/SX-IMAPP-SDK_v1.0.1_source.tar.gz .
sxdevel@silex:~$ sudo chown sxdevel SX-IMAPP-SDK_v1.0.1_source.tar.gz
sxdevel@silex:~$ sudo chgrp sxdevel SX-IMAPP-SDK_v1.0.1_source.tar.gz
sxdevel@silex:~$ mkdir sx580sdk
sxdevel@silex:~$ cd sx580sdk
sxdevel@silex:~/sx580sdk$ tar xf ../SX-IMAPP-SDK_v1.0.1_source.tar.gz
解压后,应该会有一个名为'sx580sdk/snapshot'的目录,以及一个名为 'SX-IMAPP-SDK_v1.0.1_images.tar.gz'的压缩文件(预构建的镜像)。现在,请删除SX-IMP-SDK_v1.0.1_source.tar.gz,因为它已不再需要。进入'snapshot'目录并执行'make'命令,SX-580SDK的构建工作就会开始。第一步是生成工具链(交叉编译器),这需要很多时间。最好在午休前或工作日结束前进行。


sxdevel@silex:~/sx580sdk$ ls
snapshot SX-IMAPP-SDK_v1.0.1_images.tar.gz
sxdevel@silex:~/sx580sdk$ rm ../SX-IMAPP-SDK_v1.0.1_source.tar.gz
sxdevel@silex:~/sx580sdk$ cd snapshot
sxdevel@silex:~/sx580sdk/snapshot$ make

构建完成后,应在snapshot/staging/images 下生成一个镜像。


sxdevel@silex:~/sx580sdk/snapshot$ ls staging/images -l
total 7356
-rw-r--r-- 1 sxdevel sxdevel 125024 2014-08-05 20:05 imx28_ivt_uboot.sb
-rw-r--r-- 1 sxdevel sxdevel 3735552 2014-08-05 20:09 rootfs.jffs2
-rwxr-xr-x 1 sxdevel sxdevel  447103 2014-08-05 19:58 u-boot
-rw-r--r-- 1 sxdevel sxdevel 1610744 2014-08-05 19:58 uImage
-rwxr-xr-x 1 sxdevel sxdevel 1610680 2014-08-05 19:58 zImage
在这些当中,需要在目标设备上更新的只有根文件系统(rootfs.jffs2)。内核映像(uImage)在更改Linux内核的配置并重新构建的情况下需要更新。U-Boot在没有特殊情况下(比如需要改变启动后的硬件设置,或者重新配置Flash内存的映射等),通常不需要更新。

将生成的镜像上传到 SX-580DM-2700
通过U-Boot使用TFTP向目标设备上传镜像。首先,请在虚拟机中执行ifconfig eth0命令来确认虚拟机的IP地址。这里分配的是 192.168.5.36。


sxdevel@silex:~$ ifconfig eth0
eth0 Link encap:Ethernet  HWaddr 08:00:27:b2:92:84
          inet addr:192.168.5.36  Bcast:192.168.5.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:feb2:9284/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2665 errors:0 dropped:0 overruns:0 frame:0
          TX packets:139 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:245622 (245.6 KB)  TX bytes:19137 (19.1 KB)
将uImage和rootfs.jffs2文件复制到 /tftp 目录。


sxdevel@silex:~/sx580sdk/snapshot/staging/images$ cp uImage /tftp
sxdevel@silex:~/sx580sdk/snapshot/staging/images$ cp rootfs.jffs2 /tftp
请将SX-580EVK的9针D-SUB连接器CN6(最靠近以太网连接器的那个)连接上交叉线缆,然后使用设置为115200bps 8位无奇偶校验的终端软件(如PuTTY或TeraTerm等)连接,并插入SX-580的电源。如果在启动时立即按键输入,自动启动将被中断,并将显示U-Boot的提示符('MX28 U-Boot >')。 
PowerPrep start initialize power...

Configured for 5v only power source. Battery powered operation disabled.
Jan 17 201316:00:23
FRAC 0x92925552
memory type is DDR2
                   Wait for ddr ready 1power 0x00820616
Frac 0x92925552
start change cpu freq
hbus 0x00000003
cpu 0x00010001
start test memory accress
ddr2 0x40000000
finish simple test

U-Boot 2009.08 (Jan 17 2013 - 15:53:03)

Freescale i.MX28 family
CPU:   454 MHz
BUS:   151 MHz
EMI:   205 MHz
GPMI:   24 MHz
DRAM:  64 MB
In:    serial
Out:   serial
Err:   serial
Linux Kernel Magic Number addr 80000 magic 27051956
Net:   FEC0
Hit any key to stop autoboot:  0
MX28 U-Boot >
由于U-Boot未执行DHCP,因此必须分配一个固定IP。请确保有可用的空闲地址。下面的示例使用192.168.5.201。将serverip 设置为上述虚拟机的地址。


MX28 U-Boot > setenv ipaddr 192.168.5.201
MX28 U-Boot > setenv serverip 192.168.5.36
请尝试从U-Boot侧发送ping,以检查是否能与虚拟机通信。


MX28 U-Boot > ping ${serverip}
Using FEC0 device
FEC: Link is down 7809
host 192.168.5.36 is alive
MX28 U-Boot >
在U-Boot中使用 'sf probe 2:0' 来识别Flash内存后,使用 'run update_kernel' 和 'run update_rootfs' 来更新内核和rootfs。


MX28 U-Boot > sf probe 2:0
32768 KiB S25FL256S_256K at 2:0 is now current device
MX28 U-Boot > run update_kernel
Using FEC0 device
TFTP from server 192.168.5.36; our IP address is 192.168.5.201
Filename 'uImage'.
Load address: 0x42000000
Loading: FEC: Link is down 7809
T #################################################################
#################################################################
         #################################################################
         #################################################################
         #######################################################
done
Bytes transferred = 1610744 (1893f8 hex)
MX28 U-Boot >

MX28 U-Boot > run update_rootfs
Using FEC0 device
TFTP from server 192.168.5.36; our IP address is 192.168.5.201
Filename 'rootfs.jffs2'.
Load address: 0x42000000
Loading: FEC: Link is down 7809
T #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ###############
done
Bytes transferred = 3735552 (390000 hex)
MX28 U-Boot >
在U-Boot中使用'boot'命令来启动内核。如果一切顺利,应该会在'Starting kernel...'之后连续出现启动消息,并且在十数秒内进展到'login:'的状态。 
MX28 U-Boot > boot
32768 KiB S25FL256S_256K at 2:0 is now current device
## Booting kernel from Legacy Image at 42000000 ...
Image Name:   Linux-2.6.35.3-571
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1610680 Bytes =  1.5 MB
   Load Address: 40008000
   Entry Point:  40008000
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.35.3-571 (sxdevel@silex) (gcc version 4.4.6 (Buildroot 2012.02-git) ) #1 PREEMPT Tue Aug 5 19:55:05 PDT 2014
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: Silex SX-570/580 board
.
.
.
Welcome to SX-570/580
SXxxxxxx login:
您可以使用用户名 "root "登录,无需密码。

这样,SX-580-2700DM 的固件开发环境就搭建好了。从下期开始,我们将对 "用 iPhone 通过WiFi 控制台灯 "进行详细介绍。

 



嵌入式无线LAN模块产品介绍页面