iMX257开发板连接internet的过程

目标是模仿一个Arduino项目:Ulink——基于微信的物联网平台 (http://www.arduino.cn/thread-7368-1-1.html)

但是我到开发板是iMX257,板上有网口,要借助这个网口连接路由器上网,就需要将Arduino+W5100平台的代码移植过来。


代码主要借鉴: Linux网络编程:基于TCP的程序开发回顾篇 (http://blog.chinaunix.net/uid-23069658-id-3273673.html)

同时也参考了:
(1) Yeelink平台使用——远程控制 RT Thread + LwIP+ STM32 (http://blog.csdn.net/xukai871105/article/details/17101131)
(2) Yeelink平台查询开关量——套接字编程 Windows平台  (http://blog.csdn.net/xukai871105/article/details/17096319)

我的代码如下:

    //TCP示例客户端 tcpclt.c
    #include 
   
   
    
    
    #include 
    
    
     
     
    #include 
     
     
      
      
    #include 
      
      
       
       
    #include 
       
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
            
              #include 
             
               int main() { int skfd; char buf[1024] = {0}; struct sockaddr_in server_addr; struct hostent *host; int portnumber,nbytes; char sinaserver[] = "1.tangerlink2.sinaapp.com"; portnumber = 80; char send_data[] = "GET /downup.php?token=doubleq&data=11 HTTP/1.1\r\nHost: 1.tangerlink2.sinaapp.com\r\n\ User-Agent: arduino-ethernet\r\nConnection: close\r\n\r\n"; if(NULL == (host=gethostbyname(sinaserver)))/*DNS解析*/ { perror("Gethostname error:"); exit(1); } /* 创建socket描述符 */ if(-1 == (skfd=socket(AF_INET,SOCK_STREAM,0))) { perror("Socket Error:"); exit(1); } /* 客户端填充需要连接的服务器的地址信息结构体 */ bzero(&server_addr,sizeof(server_addr)); server_addr.sin_family=AF_INET; server_addr.sin_port=htons(portnumber); server_addr.sin_addr=*((struct in_addr *)host->h_addr); printf("My server IP Address %s\r\n" , inet_ntoa(server_addr.sin_addr)); /* 客户端调用connect主动发起连接请求 */ if(-1 == connect(skfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))) { perror("Connect Error:"); exit(1); } if(-1 == write(skfd,send_data,strlen(send_data))){ perror("Send error:"); } /*客户端只接收服务器发来的数据,然后就退出*/ if(-1 == read(skfd,buf,1024)){ perror("Recv Error:"); } printf("Date arrived:%s",buf); /* 拆除TCP连接 */ close(skfd); exit(0); } 
              
             
            
           
          
         
       
      
      
     
     
    
    
   
   

执行 ./get ,然后遇到了问题:

1. Gethostname error: Resource temporarily unavailable
解决办法:在 /etc/resolv.conf 中添加:
nameserver 192.168.1.253
说明:这一句就是指定域名服务器的IP地址,即路由器地址。搜索/etc/resolv.conf查看更多。

2. Connect Error: Network is unreachable
#开发板<---网线--->路由器, 电脑<---wifi--->路由器
#按照以上的连接方法,电脑和开发板可以互相ping通

解决方法:执行以下命令设置了网关:
# route add default gw 192.168.1.253
# route
Kernel IP routing table                                                         
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface   
192.168.1.0     *                    255.255.255.0     U          0      0        0     eth0    
default             localhost          0.0.0.0              UG         0      0        0     eth0  

3. 再执行./get ,终于成功了,在云服务器端查看数据库中data的值,已经被改成了11。

下面是开发板的打印信息。

########################################

My server IP Address 123.125.23.171                                             
Date arrived:HTTP/1.1 200 OK                                                    
Server: nginx/1.4.4                                                             
Date: Tue, 10 Feb 2015 18:07:50 GMT                                             
Content-Type: text/html                                                         
Transfer-Encoding: chunked                                                      
Connection: close                                                               
X-Powered-By: PHP/5.3.29                                                        
Via: 10.67.15.22                                                                
Set-Cookie: saeut=123.114.46.43.1423591670482511; path=/; max-age=311040000     
                                                                                
3                                                                               
{1}                                                                             
0         

##########################




参考资源链接:[EasyARM-iMX257 Linux开发环境搭建与入门教程](https://wenku.csdn.net/doc/53e1h2eyzu?utm_source=wenku_answer2doc_content) 配置交叉编译环境是进行嵌入式Linux开发的关键步骤,这将允许你在PC上编译适用于目标硬件平台的程序。为了帮助你详细理解这一过程,推荐阅读《EasyARM-iMX257 Linux开发环境搭建与入门教程》。该教程为你提供了从零开始搭建开发环境的完整指导,包括所需工具的安装和配置,系统分区,以及如何通过网络服务进行交叉编译和调试。 首先,你需要准备一台运行Linux系统的主机,推荐使用Ubuntu或者其他Debian派生的发行版。安装必要的开发工具,如gcc, binutils, libc等,这可以通过包管理器轻松完成。例如,在Ubuntu系统中,你可以使用以下命令安装: sudo apt-get install gcc-arm-linux-gnueabi libncurses5-dev bison flex libssl-dev libelf-dev 接下来,设置环境变量,包括交叉编译工具链的路径。你可以将这些变量添加到你的.bashrc或.profile文件中,以确保它们在每次登录时自动设置。 export CROSS_COMPILE=arm-linux-gnueabi- export ARCH=arm export PATH=$PATH:/your-toolchain-path/bin 配置完成后,你可以开始编译适用于EasyARM-iMX257的Linux内核和应用程序了。确保你的开发环境和目标硬件平台的硬件架构相匹配。编译内核时,你可以下载源码并使用make menuconfig来配置内核选项,然后使用make命令来编译内核和模块。 在交叉编译过程中,你可能需要根据实际情况调整编译选项,这通常涉及内核配置、硬件驱动的集成和系统初始化的配置。一旦编译完成,你可以使用NFS、SSH或TFTP服务器将编译好的内核和文件系统传输到开发板上,并进行启动测试。 通过这份教程,你将能够系统地完成交叉编译环境的配置,并进行实际的开发工作。了解这些基础知识后,你将能够在《EasyARM-iMX257 Linux开发环境搭建与入门教程》的指导下,高效地进行嵌入式软件的开发与调试。 参考资源链接:[EasyARM-iMX257 Linux开发环境搭建与入门教程](https://wenku.csdn.net/doc/53e1h2eyzu?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值