最近耗时多天,成功的将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下面来了。然后再连接的时候,就能连上了。可以在服务端拷贝客户端的数据,所有验证成功。这个部分的图到时补上。


  慢慢来,技术无止境,只为玩玩而已!希望每天都有进步!

RT3070 USB WIFI 在连接socket编程过程中问题总结的更多相关文章

  1. 记Windows下初次使用dev C++进行socket编程过程

    记初次接触socket编程,在devC++使用Winsock进行socket编程的一个过程,通过在devC++创建2个项目分别是server.client程序项目,感受通过socket使client与 ...

  2. Java连接远程Mysql过程中遇到的各种问题

    2018-11-16 10:46 2018-11-19 21:35 前言 本篇文章记录的是本人在使用Java程序连接另一台电脑(同一局域网)上的Mysql数据库的过程中遇到的各种问题及解决方案.希望能 ...

  3. Devc++编程过程中的一些报错总结

    以下都是我在使用Devc++的过程中出现过的错误,通过查找资料解决问题,今天小小地记录.整理一下. 1.[Error] invalid conversion from 'const char*' to ...

  4. QT4编程过程中遇到的问题及解决办法

    1.QLineEdit显示内容的格式函数: QLineEdit *lineEditPassword = new QLineEdit: lineEditPassword -> setEchoMod ...

  5. PHP Socket 编程过程详解

    使用代码 目的:开发一个客户端用于发送string消息到服务端,服务端将相同的信息反转后返回给客户端. PHP服务器 第1步:设置变量,如“主机”和“端口” $host = "127.0.0 ...

  6. 《2---关于JDBC编程过程中驱动配置问题》

    说明:我在Editplus中编写了一个简单的JDBC程序,用来测试是否和数据库连接正确.读者如有其它疑问,可以留言交流. [1]程序如下: import java.sql.*; public clas ...

  7. AdminIII连接linux Postgresql过程中的几个小问题

    1.postgresql.conf主配置文件中要配置postgresql绑定的IP,如果不设置,可能只绑定本地闭环地址:127.0.0.1,可以设定为0.0.0.0:就包括了一切IPv4地址 2.pg ...

  8. Win7电脑开启局域网连接和共享过程中出现的"您可能没有权限使用网络资源"的解决办法

    Win7电脑开启局域网连接和共享 http://bbs.ithome.com/thread-334567-1-1.html http://jingyan.baidu.com/article/6dad5 ...

  9. 转 PHP编程过程中需要了解的this,self,parent的区别

    {一}PHP中this,self,parent的区别之一this篇 面向对象编程(OOP,Object Oriented Programming)现已经成为编程人员的一项基本技能.利用OOP的思想进行 ...

随机推荐

  1. QTableWidget 导出到csv表格

    跳槽到了新的公司,开始苦逼的出差现场开发,接触到了新的应用.有很多应用需要将Table导出成表格,可以把table导出成csv格式的文件.跟大伙分享一下: lass TableToExcle : pu ...

  2. QVector 和vector的比较(QVector默认使用隐式共享,而且有更多的函数提供)

    QVector和vector的比较: Qvector默认使用隐式共享,可以用setSharable改变其隐式共享.使用non-const操作和函数将引起深拷贝.at()比operator[](),快, ...

  3. Python IDLE 运行错误:IDLE's subprocess didn't make connection. --已解决(原创)!

    Python IDLE 错误描述: Subprocess Startup ErrorIDLE's subprocess didn't make connection. Either IDLE can' ...

  4. 拥抱AngularJS

    文中一些地方AngularJS简称ng 简介: ng诞生于2009年,由Misko Hevery等创建,后被Google收购,为克服HTML在构建应用上的不足而设计. 是一款优秀的前端JS框架,核心特 ...

  5. Server-side Sessions with Redis | Flask (A Python Microframework)

    Server-side Sessions with Redis | Flask (A Python Microframework) Server-side Sessions with Redis By ...

  6. POJ 3892 RSA Factorization

    题目地址:http://poj.org/problem?id=3892 题目大意:RSA分解. 这儿的N比较大,要用高精度,如果一般的肯定分解不了,但是这儿有一个限制 |q-kp|<=10000 ...

  7. [转]java开发环境搭建

    分成两个部分: 1.下载安装jdk,并配置环境变量 链接:http://www.runoob.com/java/java-environment-setup.html 2.安装Eclipse 链接:h ...

  8. shell程序设计(转)

    1.shell脚本的基本概念: (1)Shell执行的是称为shell程序,这些程序通常被称为脚本. (2)Shell是一个用户和系统间接口的程序,它允许用户向操作系统输入需要执行的命令. (3)sh ...

  9. 1.0.3-学习Opencv与MFC混合编程之---打开本地摄像头

    源代码:http://download.csdn.net/detail/nuptboyzhb/3961643 版本1.0.3新增内容 打开摄像头 Ø 新建菜单项,Learning OpenCV——&g ...

  10. try catch finally的执行顺序到底是怎样的?

    首先执行try,如果有异常执行catch,无论如何都会执行finally 一个函数中肯定会执行finally中的部分. 关于一个函数的执行过程是,当有return以后,函数就会把这个数据存储在某个位置 ...