搭建舒服高效的嵌入式linux开发环境

我们知道,嵌入式linux以其独特的魅力霸占了初级嵌入式程序员学习的整个阶段,同时嵌入式linux的开发环境要求我们,在linux上编译,在windows上下载调试,这不能不说是一种无奈,面对这样的情形,我们有诸多办法,比如2台机器,分别linux和windows,这样在windows上使用linux编译开发,在windows上下载,不过今天我给大家展现一种舒服高效的嵌入式linux开发环境,不是什么创新,而是已有技术的结合。

虚拟机大家都用过,嵌入式linux开发的时候,大家一定用过,那么有没有感觉到,来会切换很烦人,很费时呢?跟我来:

1.安装vmware虚拟机,这里推荐6.0.2 Build59824汉化版,测试使用非常的稳定ps:怎么安装就不说了

2.vmware安装Fedora11_YlmF_V1.0,此版本也很不错,稳定,已经中文化好了,测试使用非常的稳定,怎么安装就不说了

3.这里到了最关键的部分,切换到虚拟机的时候,我们选择快速切换,此时虚拟机是全屏幕的,注意调整下分辨率,和windows桌面一样大,并且调整好桌面背景,看起来是同一个桌面一样。

下面我们要实现虚拟机桌面和windows桌面的前换的一键完成,暂定F4键

4.我们在windows上建立如下程序,并添加到自启动,看的出来,是一个后台运行的微型web服务,代码如下:

//minServer.c
/***
*    No Copyright
*    Author : linucos
*
*******************************************************************************/

#include <Winsock.h>
#include <stdio.h>
#pragma comment (linker, "/ENTRY:mainCRTStartup")
#pragma comment (linker, "/subsystem:windows")
#pragma   comment(lib,   "ws2_32.lib")
struct sockaddr_in local;
struct sockaddr_in from;
int fromlen;
char buffer[10] = "/0";
HWND   hWnd;

int main(void)
{
 SOCKET servSock;
 WSADATA wsaData;
 int iErrorCode;
 if (WSAStartup(MAKEWORD(2,1), &wsaData))
 {
  printf("Winsock initial failure....../n");
  WSACleanup();
  return 0;
 }

 printf("server startup......./n");
 fromlen = sizeof(from);
 local.sin_family = AF_INET;
 local.sin_port = htons(8989);
 local.sin_addr.s_addr = INADDR_ANY;

 servSock = socket(AF_INET, SOCK_DGRAM, 0);
 bind(servSock, (struct sockaddr*)&local, sizeof(local));
 while (1)
 {
  if (recvfrom(servSock, buffer, sizeof(buffer), 0, (struct sockaddr*)&from,&fromlen))
  {
   if (buffer[0] == 'm')
   {

//找到vmware程序ui,并发送最小化消息
    hWnd   =   FindWindow("VMUIFrame", NULL);  
    SendMessage(hWnd, WM_SYSCOMMAND, (WPARAM)SC_MINIMIZE, NULL);
   }
   sendto(servSock, buffer,sizeof(buffer), 0, (struct sockaddr*)&from, fromlen);
  }
 }
 closesocket(servSock);

 return 0;
}

意思是,当我们收到m消息时,最小化虚拟机,这样就不用我们在虚拟机里边,找最小化窗口了,或者跳出虚拟机的快捷键。

此时,可以测试一下,运行程序,vmware是否最小化;

5.在fedora下,建立程序如下,

root 11:15:40
  //minClient.c
/***
* No Copyright
* Author : linucos
*
*****************************************************************************/
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <arpa/inet.h>

struct sockaddr_in server_addr;
int socketId;
int size;

int main(void)
{
 socketId = socket(AF_INET, SOCK_DGRAM, 0);
 
 server_addr.sin_family = AF_INET;
 server_addr.sin_port = htons(8989);

//这个地方的ip地址,你要知道windows的ip哦,ipconfig看下就好
 server_addr.sin_addr.s_addr = inet_addr("192.168.1.9");
 
 size = sizeof(struct sockaddr);

 if (connect(socketId, (struct sockaddr*)&server_addr, size) < 0)
 {
  printf("connect failure....../n");
  return 0;
 }

 send(socketId, "mm", 3, 0);
 printf("minClient : Done....../n");
 return 0;
}

意思是给window发消息mm,让他最小化vmware,哈哈~

6.在fedora中,自定义快捷键,指向刚刚建立的minClient,快捷键定为F4哦~

下载可以F4下看看了~是不是退出虚拟机了呢?~

7.现在可以实现一键切换到windows,但是要是也F4切换回linux那就很爽了,下面就行这样的工作,既然能给vmware发最小化消息,当然也能发最大化消息了,程序如下:

//forServer.c
/***
*    No Copyright
*    Author : linucos
*
***********************************************************************************/
#include <Winsock.h>
#include <stdio.h>
int main(void)
{
 HANDLE hWnd   =   FindWindow("VMUIFrame", NULL);  
 SendMessage(hWnd, WM_SYSCOMMAND, (WPARAM)SC_MAXIMIZE, NULL);
 return 0;
}

ok,工作全部完毕,为此程序建立一个快捷方式,快捷键指定为F4哦,呵呵~注意要把快捷方式拖到开始菜单中~

F4看看,是不是切到linux,再F4,是不是又回来了~

大功告成~~~

你可能感兴趣的:(vmware,linux,虚拟机,windows,struct,嵌入式)