码迷,mamicode.com
首页 > 其他好文 > 详细

开发环境

时间:2016-01-31 13:27:58      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:

这几天废了一翻周折将自己的开发环境配置好了,结构如下图:

技术分享

Linux服务器是一台闲置的笔记本,它使用无线连接到路由器,与台式机都是192.168.1.x网段。这样方便台式机ssh登录到server开发。并且server配置了samba服务将个人目录共享出来方便linux与windows之间的文件传输。另外Linux服务器与开发板之间利用网线连接,它们都在192.168.0.x网段。在Linux服务器上配置nfs服务,板子通过nfs挂载远程的根文件系统。这样开发工作完全可以在服务器上或者台式机上进行,省去了文件移植或传输等繁琐的过程。最后开发板的串口接在windows上,当然也可以接在linux上。这几天南方遇到了BOSS寒潮。在家里敲代码那叫一个冷啊,如果以后再给自己添一个笔记本的话,可以很方便的通过无线连接ssh到server或者windows开发,那么这样自己就可以躲在被窝里了。所有的代码管理使用git工具,这里Linux服务器也起到了代码备份的作用。不过,这样的配置摒弃了虚拟机花销还是挺大的。而且通过家庭的无线路由器做路由,网络环境并不是很好也并不安全。

同时也借助这个搭建开发环境的过程将交叉编译,u-boot,内核移植,busybox,根文件系统制作更为熟练一些。在这里就不详细的列出开发环境的配置步骤、服务程序的安装配置了。下面是两个值得参考的链接:

http://www.maiziedu.com/course/qrs/1-130/

http://www.maiziedu.com/course/qrs/486-6258/

 

开发环境配置好了,写个程序测试一下吧。当然首选的程序是 Hello world 

#include <stdio.h>

int main()
{
    printf("Hello ARM-Linux\n");
    return 0;
}

 

编译执行,在开发板上运行 hello world 程序,是可以正确输出的,说明开发环境没什么大问题。那么以后就可以在这个简易的平台上进行开发了。接下来我打算学习无线技术里面的蓝牙。

比如让蓝牙传个文件或者语音,又或者利用蓝牙组一个ad-hoc的网络等等。那就要涉及到网络编程。下面这个例子引自 《UNIX网络编程》中的网络回射程序。Linux端作为服务器,开发板作为客户端。下面是代码:

 

/*
 *
 *
 * server 
 *
 *
 */

#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <errno.h>
#include <signal.h>

#define LISTENQ 5

void conn_handle(int);
void sig_child(int signo);


int main()
{
    int listenfd, connfd;
    socklen_t len;

    struct sockaddr_in serveraddr, cliaddr;
    char buff[128] = {0};

    if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
        goto errorout;

    memset(&serveraddr, 0, sizeof(struct sockaddr_in));
    serveraddr.sin_family = AF_INET;
    serveraddr.sin_port = htons(3060);
    inet_pton(AF_INET, "192.168.0.1", &serveraddr.sin_addr.s_addr);
    if (bind(listenfd, (struct sockaddr *)&serveraddr, sizeof(struct sockaddr_in)) < 0)
        goto errorout;

    if (listen(listenfd, LISTENQ) < 0)
        goto errorout;

    // SIGCHLD signal
    if (signal(SIGCHLD, sig_child) < 0)
        goto errorout;

    while (1)
    {
        len = sizeof(cliaddr);
        if ((connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &len)) < 0)
            goto errorout;

        // hanle every connection with child-process
        pid_t pid;
        if((pid = fork()) < 0)
            goto errorout;

        else if (pid == 0)
        {
            // child process
            close(listenfd);
            conn_handle(connfd);
            close(connfd);
            exit(0);
        }

        // parent process
        close(connfd);
    }

errorout:
    printf("something wrong\n");
    int err = errno;
    if (listenfd > 0)
    {
        close(listenfd);
    }
    errno = err;
    printf("the errno is %s\n", strerror(errno));
    return -1;
}



void conn_handle(int connfd)
{
 // printf the connfd 
        struct sockaddr_in connaddr;
        socklen_t connlen = sizeof(struct sockaddr_in);
        getpeername(connfd, (struct sockaddr *)&connaddr, &connlen);
        char buff[128] = {0};
        printf("connect from  %s, port %d\n", inet_ntop(AF_INET, 
                    &connaddr.sin_addr, buff, sizeof(buff)), ntohs(connaddr.sin_port));
        
        // recv from client
        int nRead = 0;
        int nWrite = 0;
        
        // main loop to handle data
        while (1)
        {
            memset(buff, 0, sizeof(buff));
            if ((nRead = recv(connfd, buff, sizeof(buff), 0)) <= 0)
            {
                printf("read error\n");
                // read error handle
                //
                return;
            }
            printf("have recv %s", buff);
            nWrite = send(connfd, buff, nRead, 0);
            if (nWrite < 0)
            {
                printf("write error\n");
                // write error handle
                //
                return;
            }
        }
}


void sig_child(int signo)
{
   pid_t pid;
   int status;
   if((pid = wait(&status)) < 0)
       return;
   printf("child %d terminated\n", pid);
   return;
}

 

下面是客户端的代码:

/*
 * 
 *
 * client
 *
 *
 */


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <errno.h>

int main()
{
    int clientfd;
    struct sockaddr_in addr;
    const char interface[] = "127.0.0.1";
    char buff[128] = {0};
    int nRead, nWrite;

    clientfd = socket(AF_INET, SOCK_STREAM, 0);
    if (clientfd < 0)
    {
        goto errorout;
    }

    addr.sin_family = AF_INET;
    inet_pton(AF_INET, interface, &addr.sin_addr.s_addr);
    addr.sin_port = htons(3060);

    if (connect(clientfd, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) < 0)
    {
        goto errorout;
    }

    // read from stdin
    while (1)
    {
        printf("input you words to send to server:\n");
        if (fgets(buff, 128, stdin) == NULL)
        {
            close(clientfd);
            return 0;
        }

        // else send buff
        nWrite = send(clientfd, buff, strlen(buff), 0);
        if (nWrite < 0)
        {
            goto errorout;    
        }

    
        //recv from net
        memset(buff, 0, sizeof(buff));
        nRead = recv(clientfd, buff, sizeof(buff), 0);
        if (nRead < 0)        
        {
            goto errorout;
        }
        else if (nRead == 0)
        {
            printf("server has shutdown\n");
            close(clientfd);
            return 0;
        }
        else
        {
            printf("server echo %s", buff);
        }
    }

errorout:
    printf("something wrong\n");
    int err = errno;
    if (clientfd > 0)
    {
        close(clientfd);
    }
    errno = err;
    printf("the errno is %s\n", strerror(errno));
    return -1;
}

 

下面是测试的结果,

客户端

技术分享

 

服务器端

技术分享

开发环境

标签:

原文地址:http://www.cnblogs.com/Gru--/p/5172929.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!