开发环境

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

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;
}

下面是测试的结果,

客户端

服务器端

时间: 2024-10-27 10:59:09

开发环境的相关文章

Eclipse+ADT+Android SDK 搭建安卓开发环境

要求 必备知识 windows 7 基本操作. 运行环境 windows 7 下载地址 环境下载 最近开接触Android(安卓)嵌入式开发,首要问题是搭建Andoid开发环境,由于本人用的是windows7的笔记本,也就只能到Windows中搭建Android 开发环境了! 就搭建环境都花了比较长的时间, 在各种版本之间折腾了比较久的时间, 装好后SDK包更新又是一个比较大的麻烦(天朝的网络大家懂的--).下面把我的安装过程和经验分享个大家!! 安装JDK 这里可以参考我之前写的一篇关于安装J

Linux 安装GO开发环境

安装GO开发环境 [[email protected] ~]# yum install golang GO的Hello world [[email protected] ~]# cat hello.go  package main import (     "fmt" ) func main() {     fmt.Println("Hello world") } [[email protected] ~]# 直接运行 [[email protected] ~]# 

ActiveReports 9实战教程(1): 手把手搭建好开发环境Visual Studio 2013 社区版

ActiveReports9刚刚公布3天.微软就公布了 Visual Studio Community 2013 开发环境. Visual Studio Community 2013 提供完整功能的 IDE ,可开发 Windows.Android 和 iOS 应用.支持:C++, Python, HTML5, JavaScript, 和 C#,VB, F# 语言的开发.提供设计器.编辑器.调试器和诊断工具. 最牛逼的在于你全然能够免费使用该工具: 能够正大光明的免费使用visual studi

安装OpenResty开发环境

OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态 Web 应用.Web 服务和动态网关(摘自官网).本文将会介绍如何在Centos7上,安装Nginx+Lua的开发环境,并运行一个"Hello World"示例. 一.环境安装 1.1 创建工作路径 我计划将Openresty安装到/usr/servers下,首先创建这个文件夹. [[email

.Net Core + Angular Cli 开发环境搭建

一.基础环境配置 1.安装VS 2017 v15.3或以上版本 2.安装VS Code最新版本 3.安装Node.js v6.9以上版本 4.重置全局npm源,修正为 淘宝的 NPM 镜像: npm install -g cnpm --registry=https://registry.npm.taobao.org 5.安装TypeScript cnpm install -g typescript typings 6.安装 AngularJS CLI cnpm install -g @angul

MyBatis应用开发(1)应用之开发环境

1. 应用 1.1. 开发环境 MyBatis官方网站:http://www.mybatis.org/ MyBatis3介绍页面:http://www.mybatis.org/mybatis-3/ MyBatis3下载页面:https://github.com/mybatis/mybatis-3/releases 本文基于mybatis-3.4.2这个版本来编写,使用的jar包包括: (1)Mybatis框架: mybatis-3.4.2.jar (2)依赖的第三方库: ant-1.9.6.ja

11款PHP集成开发环境

最近准备用PHP搭建一款小说网站,效果仿照我爱书屋www.52shu.org.工欲善其事,比先利其器,于是现在网上收罗了一番PHP的开发工具 , 汇总一下 . ----------------------------------此为背景 -----------------------------------------------------------------------------------------------------------------------------------

基于 Eclipse 的 MapReduce 开发环境搭建

文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6055850.html 上周末本来要写这篇的,结果没想到上周末自己环境都没有搭起来,运行起来有问题的呢,拖到周一才将问题解决掉.刚好这周也将之前看的内容复习了下,边复习边码代码理解,印象倒是很深刻,对看过的东西理解也更深入了. 目录 1.概述 2.环境准备 3.插件配置 4.配置文件系统连接 5.测试连接 6.代码编写与执行 7.问题梳理 7.1 console 无日志输出问题 7.2

搭建Andriod开发环境

上一篇文章中总结了Andriod系统架构以及系统移植要点,为了进行Andriod系统移植,需要搭建相应开发环境,包括:JDK.SDK(adt).NDK(cdt)以及arm-Linux交叉编译环境等.我的平台以Linux虚拟机为背景,以下为详细步骤: JDK安装: 可以先下载安装再配置环境变量,或者直接在Terminal下执行以下代码一次性完成: # add-apt-respository "deb http://archive.canonical.com/ lucid partner" # ap

搭建Android开发环境

通过学习Android系统基本构架和Android移植的工作后,我们就要学习如何搭建Android开发环境了. 搭建Android底层开发环境,主要包括:Android应用程序开发环境.Android NDK开发环境.交叉编译环境. 底层环境的开发,需要配置Linux的驱动开发环境,Android应用程序和Android NDK的开发环境,还需要辅助工具测试Linux驱动及调试开发板,本书作者建议使用Ubuntu Linux10.04或以上版本作为Linux驱动的平台.底层环境开发需要的工具有: