RT3070 USB WIFI 在连接socket编程过程中问题总结
最近耗时多天,成功的将RT3070驱动。并解决了socket的网络编程,成功的在BA9G10上面实现了USB wif。连上家里的无线路由器,通过ubuntu下面建立的服务端程序,将BA9G10中的数据成功读取到PC机上面了。其过程的艰辛和曲折说起来是满眼血泪史啊。下面将记录其中解决问题的大致过程。
最开始设计方案时,为了整体的方便。我借用了外面开发板的文件系统。本来是为了偷懒的,不知道最后我为这件事情付出了沉重的代价。开始在编译RT3070驱动时,我直接将别人的文件系统加载到BA9G10中。在加载驱动时,我发现他们提供的文件系统版本过老,我用的编译器是SBC的arm-none-linux-guneabi-gcc的4.72版本。他提供的文件系统不支持iwlist 无线搜索命令和iwconfig无线配置命令。这下我傻眼了,如果没有这个命令。我根本就没法将无线wifi连接到wireless router。我去hp的官网找打hp支持开发的开放实验里面的wireless tool29,算是最新版本了。我自己交叉编译了iwlist,和iwconfig。然后通过zmodem下载到老版本的文件系统中。在执行的时候提示-sch iwlist command not find。纠结了。我用arm-none-linux-guneabi-readelf。结果提示加载了两个库。但是这两个库在glibc里面有这两个库。这样看来,还是编译版本的问题。编译出来的两个版本的库没办法加载运行。这样我就只有硬着头皮来自己定制自己的文件系统了。
本来定制文件系统是一件比较简单的事情,但是当初也是为了偷懒。用了SBC 的IDE集成交叉编译工具链。结果导致了一个问题,就是编译完成在链接的时候没法找到crt0.o、crtn.o等链接库。就因为这个问题,浪费了我整整的5天时间,包括端午节3天假和接下来的2天周末。最后在一家外国论坛上面发现了解决这个问题的方法,其实是很简单的事情。SBC提供prifix的安装地址。通过arm-none-linux-guneabi-gcc -v命令可以查看编译器的设置。最后发现只要将工具链放到prifix的/opt/codesourery这个目录下。问题就解决了。刚刚开始我设置了LD_LIBRARY、LIBRARY 修改了ld.config文件,都无效。我觉得这个可能是SBC做工具链的一个bug。就这个问题把我给整得趴下了。
在解决交叉编译环境后,在编译busybox就是一件很简单的事情了。我建立的文件系统是基于busybox1.21.0这个最新版本的文件系统。交叉编译器也是最新的4.72版本。所以有很多问题的出现都是比较扯淡的。不过以后就有经验了。
在完成busybox的安装后,开始了自己定制文件系统。这个过程中遇到数据不对的情况,网上提供的解决方案都比较好。最后就是修改了下编译方法,make ARCH=arm CROSS_COMPILE= arm-none-linux-guneabi-。并且在make install的过程中也要添加后面的命令。这样就很简单的解决了数据不对。在修改hostname过程中遇到有乱码的问题。这个问题比较简单,原来是我输入过程中带入了中文字符。最后将书法切换后再制作文件系统,好像问题就解决了。下面是定制出来的文件系统的效果图:
在完成文件系统后,接下来是把usb wifi连接到无线路由器。这个工作也是比较轻松的。主要是命令操作。不过在linux系统下面有几个东西让我长见识了就是system(void);这个函数和popen();这个函数。觉得很强大,可以直接操作linux下面的shell命令。我在后面的socket编程中用到了,感觉爽。
原计划是将所有的操作都写在shell里面,通过linux文件系统里面的启动初始加载来实现自启动的。不过后来我发现有上面的两个函数,结果所有的命令我都可以直接通过这两个函数来实现。
Socket编程,这个我是现炒现卖,以前没搞过。看了吴秦的一篇博客,觉得他写得很好。然后也有例程。我是就看到他的例程来写的socket的建立 、连接和侦听等。不过到wireless wifi上面又不一样。Socket是建立在tcp/ip上面的。所以我们操作起来也相当的简单。理解下什么是socket,socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。
我在理解socket编程后,然后自己写了一个ubuntu下面的linux C的wifi_server监听虚拟机下面的6666这个端口。然后在BA9G10中启动wifi_app,这是一个客户端程序。在建立者两套连接后开始测试。客户端请求连接到服务器端。在这个过程中也遇到了一个小问题,就是在BA9G10中能ping通ubuntu安装的虚拟的地址。好像ping使用的Icmp方式。但是客户端却不能connect服务器端。这个问题我还纠结了下,刚刚开始我在fedora里面弄的,我觉得能ping通说明连接都没有问题了。那问题可能出在那里呢?唯一的可能性就是防火墙阻止了我的connected包。不过我想关fedora的防火墙,但是在关闭过程中遇到问题了。后面我看到关ubuntu的防火墙比较容易,用ufw disable就解决了。于是我就换到ubuntu下面来了。然后再连接的时候,就能连上了。可以在服务端拷贝客户端的数据,所有验证成功。这个部分的图到时补上。
慢慢来,技术无止境,只为玩玩而已!希望每天都有进步!
RT3070 USB WIFI 在连接socket编程过程中问题总结的更多相关文章
- 记Windows下初次使用dev C++进行socket编程过程
记初次接触socket编程,在devC++使用Winsock进行socket编程的一个过程,通过在devC++创建2个项目分别是server.client程序项目,感受通过socket使client与 ...
- Java连接远程Mysql过程中遇到的各种问题
2018-11-16 10:46 2018-11-19 21:35 前言 本篇文章记录的是本人在使用Java程序连接另一台电脑(同一局域网)上的Mysql数据库的过程中遇到的各种问题及解决方案.希望能 ...
- Devc++编程过程中的一些报错总结
以下都是我在使用Devc++的过程中出现过的错误,通过查找资料解决问题,今天小小地记录.整理一下. 1.[Error] invalid conversion from 'const char*' to ...
- QT4编程过程中遇到的问题及解决办法
1.QLineEdit显示内容的格式函数: QLineEdit *lineEditPassword = new QLineEdit: lineEditPassword -> setEchoMod ...
- PHP Socket 编程过程详解
使用代码 目的:开发一个客户端用于发送string消息到服务端,服务端将相同的信息反转后返回给客户端. PHP服务器 第1步:设置变量,如“主机”和“端口” $host = "127.0.0 ...
- 《2---关于JDBC编程过程中驱动配置问题》
说明:我在Editplus中编写了一个简单的JDBC程序,用来测试是否和数据库连接正确.读者如有其它疑问,可以留言交流. [1]程序如下: import java.sql.*; public clas ...
- AdminIII连接linux Postgresql过程中的几个小问题
1.postgresql.conf主配置文件中要配置postgresql绑定的IP,如果不设置,可能只绑定本地闭环地址:127.0.0.1,可以设定为0.0.0.0:就包括了一切IPv4地址 2.pg ...
- Win7电脑开启局域网连接和共享过程中出现的"您可能没有权限使用网络资源"的解决办法
Win7电脑开启局域网连接和共享 http://bbs.ithome.com/thread-334567-1-1.html http://jingyan.baidu.com/article/6dad5 ...
- 转 PHP编程过程中需要了解的this,self,parent的区别
{一}PHP中this,self,parent的区别之一this篇 面向对象编程(OOP,Object Oriented Programming)现已经成为编程人员的一项基本技能.利用OOP的思想进行 ...
随机推荐
- vim添加删除多行注释
CTRL+V进入可视化模式 移动光标上移或者下移,选中多行的开头 选择完毕后,按大写的的I键,此时下方会提示进入“insert”模式,输入你要插入的注释符 最后按ESC键,你就会发现多行代码已经被注释 ...
- Swift - 给图片添加滤镜效果(棕褐色老照片滤镜,黑白滤镜)
Core Image是一个强大的滤镜处理框架.它除了可以直接给图片添加各种内置滤镜,还能精确地修改鲜艳程度, 色泽, 曝光等,下面通过两个样例演示如何给UIImage添加滤镜. 1,棕褐色滤镜 - ...
- 路径中“/” "\" "\\"的区别
Unix使用斜杆/ 作为路径分隔符,而web应用最新使用在Unix系统上面,所以目前所有的网络地址都采用 斜杆/ 作为分隔符. Windows由于使用 斜杆/ 作为DOS命令提示符的参数标志了,为了不 ...
- PHP - MySQL数据库
第15章 MySQL数据库 学习要点: 1.Web数据库概述 2.MySQL的操作 3.MySQL常用函数 4.SQL语句详解 5.phpMyadmin 一.Web数据库概述 现在,我们已经熟悉了PH ...
- 基于visual Studio2013解决C语言竞赛题之1029二元数组平均值
题目 解决代码及点评 /* 功能:求二维数组中每行元素的平均值,不许引入其它的数组 时间:16:21 2013/10/24 */ #include<stdio ...
- OpenRisc-35-基于orpsoc,eCos的sd card controller的测试实验
引言 之前,曾经在orpsoc的平台上,测试验证过其sd card controller的linux的驱动,但是并不是很完美,经过努力,终于在eCos下完成了其全部功能的验证,包括驱动层验证,文件系统 ...
- ARM过程调用标准---APCS简单介绍
介绍 APCS,ARM 过程调用标准(ARM Procedure Call Standard),提供了紧凑的编写例程的一种机制,定义的例程能够与其它例程交织在一起.最显著的一点是对这些例程来自哪里没有 ...
- Netty源代码学习——ChannelPipeline模型分析
參考Netty API io.netty.channel.ChannelPipeline A list of ChannelHandlers which handles or intercepts i ...
- 基于visual Studio2013解决C语言竞赛题之1059最大平台
题目 解决代码及点评 /* 功能:编写求最大平台问题的程序. 有n个整数a1,a2, ... an, 若满足a1≤a2≤ ... ≤ an , 则认为在这n个数中有最大平台.在这种情 ...
- Js版游戏打砖块开发过程详细
最近对js的小游戏开发来了兴趣,前段时间由于回答度娘知道的提问写了个贪吃蛇,虽然难度不大并不复杂,感觉还挺有意思.感觉小时候玩过的什么俄罗斯方块,坦克大战什么的都可以试着用js实现下,这天来了兴致又想 ...