设为首页 收藏本站
查看: 937|回复: 0

[经验分享] RT3070 USB WIFI 在连接socket编程过程中问题总结

[复制链接]

尚未签到

发表于 2015-10-2 08:58:24 | 显示全部楼层 |阅读模式
  最近耗时多天,成功的将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过程中遇到有乱码的问题。这个问题比较简单,原来是我输入过程中带入了中文字符。最后将书法切换后再制作文件系统,好像问题就解决了。下面是定制出来的文件系统的效果图:



BA9G10 文件系统定制  在完成文件系统后,接下来是把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下面来了。然后再连接的时候,就能连上了。可以在服务端拷贝客户端的数据,所有验证成功。这个部分的图到时补上。
   慢慢来,技术无止境,只为玩玩而已!希望每天都有进步!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-121569-1-1.html 上篇帖子: android 学习笔记(五) 调试相关 5.1 android使用wifi进行程序调试 下篇帖子: 将笔记本变身WiFi热点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表