RT5350订制WIFI转串口

编译开发主机:Debian6

硬件开发平台:RT5350平台 (可以点击到这里购买)


1、搭建开发环境

1.1 连接硬件

       通过串口线连接板子的调试串口(DB9)与电脑的串口(如电脑没有串口,可用USB转串口线连接)。可在电脑上打开串口工具,winxp上可打开超级终端,或者其它的如SecureCRT/putty等工具,选择串口号(如果电脑串口,一般是COM1,如果是USB转串口线,那么打开设备管理器,根据实际的串口号进行选择),设置波特率为57600,8位数据位,1位停止位,无流控制。那么,那这个串口工具实际上就是板子的LINUX终端。 上电后,就可以在串口终端里看到linux的启动信息。




1.2 制作固件

解压固件制作包makeimg.tar.gz,并进入该目录:


vmlinux为内核固件

Makefile为制作固件镜像的规则文件

romfs为根文件系统目录,生成的文件系统为squash只读文件系统。

其它文件是制作镜像的工具

根据工具链(GCC编译器安装路径),需要对Makefile进入修改:

CUR_DIR = $(shell pwd)
IMAGEDIR = $(shell pwd)
KERNELZ = $(IMAGEDIR)/zImage
RAMDISK  = $(IMAGEDIR)/ramdisk
IMAGE = $(IMAGEDIR)/$(USER)_uImage
ROMFS_DIR = $(CUR_DIR)/romfs
COMP = lzma
CROSS_COMPILE=/opt/buildroot-gcc342/bin/mipsel-linux-

OK,下一步,拷贝文件(需要保存在固件镜像里的文件)到romfs。

然后,在当前目录下的命令行make,则可产生固件镜像文件USER_uImage,其中USER是用户名。

1.3 升级固件

升级固件的方式有两种,一种是在uboot的环境下升级固件,另外一种是通过网页来升级。

在开发过程中,往往常用uboot进行烧写固件,uboot下载固件的方法是通过TFTP。

1.3.1 搭建TFTP环境

在linux主机下,搭建TFTP环境可参照网络相关文章,在windows环境下话,可以使用tftp-win32。

1.3.2 uboot烧写固件


在uboot启动时选择操作2,进入烧写固件菜单,选择Y确认操作。

如实填写好板子的IP地址(设置板子的IP地址),服务器IP地址(即开发主机IP地址,保存有要烧写的固件文件)。

最后填写固件文件的文件名,按回车确定后,则板子开始从主机上下载固件文件,然后再完成烧写。

注意填写正确网络IP地址,主机与板子的IP地址需在同一网段。

1.3.3 网页上传升级固件

这里板子的IP地址为192.168.10.123,板子与电脑连接在同一路由器上或者直接相连。

在电脑上打开浏览器,输入板子的IP地址:


在“固件更新”那一栏选择文件,然后点击确定则可,不过升级过程需要等待一段时间,直接最后升级成功,板子会自动重启。


1.4 有线网络与WIFI无线网络

系统启动后,进入linux命令行,运行ifconfig命令,可以看到板子的网络参数如下:


其中br0为网桥,eth2为有线网络,ra0为无线网络。

1.4.1 有线网络

由于使用的是网桥的连接方式,所以板子的网卡IP地址设置只需要设置br0则可。

ifconfig br0 192.168.10.123
这样就给板子设置了新的IP地址。

当然系统启动后会有个默认的IP地址,保存在flash里,可以通过nvram工具查看或修改:

# nvram_get 2860 lan_ipaddr
192.168.10.123
# nvram_set 2860 lan_ipaddr 192.168.10.122
可以通过ping工具测试有线网络是否配置正确,如下情形为网络测试通过(192.168.10.102为主机地址):


或者,在主机电脑上打开网页浏览器,在地址栏输入板子的IP地址192.168.10.123,如能进入网页界面则网络是通的。

具体的网页界面如网页升级固件所示。

1.4.2 无线wifi网络

使用无线wifi网络需要正确配置与使用wpa_supplicant无线管理工具。

首先需要一个配置文件wpa_supplicant.conf(默认的romfs里在etc_ro目录下),在该文件里正确填写无线路由名称(SSID)和密码:

ctrl_interface=/var/run/wpa_supplicant  
network={  
    ssid="FAST_316A22"  
    scan_ssid=1  
    key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE   
    pairwise=TKIP CCMP    
    group=CCMP TKIP WEP104 WEP40      
    psk="1234567890"  
} 
在板子终端命令行里输入启动wpa_supplicant命令:

# wpa_supplicant -B -Dralink -bbr0 -ira0 -c /etc_ro/wpa_supplicant.conf 
通过wpa_cli来搜索周边的无线wifi信号:

通过iwpriv工具查看板子是否连接上无线路由:


使用无线网络时把网线拔掉,然后通过ping测试网络或通过网页浏览器测试是否可以登陆板子。


1.5 挂载NFS网络文件系统

首先在主机上搭建NFS网络环境,可参照网络资料搭建,然后在板子上通过mout命令来挂载网络文件系统:

# mount -t nfs -o nolock 192.168.10.106:/home/nfspart /mnt
然后进入/mnt目录就可以看到主机上的文件数据了。

在应用程序开发中常常用这种文件来实现主机与板子的文件传输。


1.6 编写我们的hello,world程序

1.6.1 安装交叉工具链

 把gcc工具链解码到/opt目录下:

tar -jxvf buildroot-gcc342.tar.bz2 -C/opt/
导出编译工具路径:

export PATH=/opt/buildroot-gcc342/bin:$PATH
注意,路径设置一定要正确。

执行完以上两步,可以在命令行里运行mipsel-linux-gcc  -v,则可看到编译器版本信息。

1.6.2 编译运行程序

编写helloworld程序hello.c:

#include <stdio.h>

int main()
{
    printf("hello,world!\r\n");
    return 0;
}
编译生成可执行文件hello:

mipsel-linux-gcc hello.c -o hello
通过NFS网络文件系统,拷贝hello可执行文件到/home/nfspart目录下(该目录为NFS的映射目录)

在板子终端上,可以进入/mnt查看到hello这个文件,运行:



2、wifi转串口

2.1 串口通信

int setserial(int s,struct termios* cfg, int speed,int data,unsigned char parity,int stopb)
{
	cfmakeraw(cfg);
	cfg->c_cflag |= CLOCAL | CREAD;
	switch(speed){
		case 50     : { cfsetispeed(cfg,B50)    ; cfsetospeed(cfg,B50)    ; break; }
		case 75     : { cfsetispeed(cfg,B75)    ; cfsetospeed(cfg,B75)    ; break; }
		case 110    : { cfsetispeed(cfg,B110)   ; cfsetospeed(cfg,B110)   ; break; }
		case 134    : { cfsetispeed(cfg,B134)   ; cfsetospeed(cfg,B134)   ; break; }
		case 150    : { cfsetispeed(cfg,B150)   ; cfsetospeed(cfg,B150)   ; break; }
		case 200    : { cfsetispeed(cfg,B200)   ; cfsetospeed(cfg,B200)   ; break; }
		case 300    : { cfsetispeed(cfg,B300)   ; cfsetospeed(cfg,B300)   ; break; }
		case 600    : { cfsetispeed(cfg,B600)   ; cfsetospeed(cfg,B600)   ; break; }
		case 1200   : { cfsetispeed(cfg,B1200)  ; cfsetospeed(cfg,B1200)  ; break; }
		case 1800   : { cfsetispeed(cfg,B1800)  ; cfsetospeed(cfg,B1800)  ; break; }
		case 2400   : { cfsetispeed(cfg,B2400)  ; cfsetospeed(cfg,B2400)  ; break; }
		case 4800   : { cfsetispeed(cfg,B4800)  ; cfsetospeed(cfg,B4800)  ; break; }
		case 9600   : { cfsetispeed(cfg,B9600)  ; cfsetospeed(cfg,B9600)  ; break; }
		case 19200  : { cfsetispeed(cfg,B19200) ; cfsetospeed(cfg,B19200) ; break; }
		case 38400  : { cfsetispeed(cfg,B38400) ; cfsetospeed(cfg,B38400) ; break; }
		case 57600  : { cfsetispeed(cfg,B57600) ; cfsetospeed(cfg,B57600) ; break; }
		case 115200 : { cfsetispeed(cfg,B115200); cfsetospeed(cfg,B115200); break; }
		case 230400 : { cfsetispeed(cfg,B230400); cfsetospeed(cfg,B230400); break; }
	}
	switch(parity|32){
		case 'n' : { cfg->c_cflag &= ~PARENB; break; }
		case 'e' : { cfg->c_cflag |= PARENB; cfg->c_cflag &= ~PARODD; break; }
		case 'o' : { cfg->c_cflag |= PARENB; cfg->c_cflag |= PARODD ; break; }
	}
	cfg->c_cflag &= ~CSIZE;
	switch(data){
		case 5 : { cfg->c_cflag |= CS5; break; }
		case 6 : { cfg->c_cflag |= CS6; break; }
		case 7 : { cfg->c_cflag |= CS7; break; }
		case 8 : { cfg->c_cflag |= CS8; break; }
	}
	if(stopb==1)cfg->c_cflag&=~CSTOPB;
	else cfg->c_cflag|=CSTOPB;
	return tcsetattr(s,TCSANOW,cfg);
}

2.2  wifi转串口-udp模式

	while(1){
		if(st[i]&2)n=read(s[i],buf,MAXMESG);
		else{
			n=recvfrom(s[i],buf,MAXMESG,nonblock[i]*MSG_DONTWAIT,
					(struct sockaddr*)&addr[i][st[i]],&clen[i]);
			nonblock[i]=1;
		}
		p=buf;
		while(n>0){
			if(st[!i]&2)w=write(s[!i],p,n);
			else w=sendto(s[!i],p,n,0,
				(struct sockaddr*)&addr[!i][st[!i]],clen[!i]);
			if(w>0){
				n-=w;
				p+=w;
			}else{
				fprintf(stderr,"%s: write error\n",pname);
				break;
			}
		}
		i=!i;
	}


  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值