在chenyu老师的指导下,经过一些努力, skyeye现在终于可以在windows上直接编译运行了。 之前在cygwin上的版本由于cygwin固有的原因,速度始终有所局限。现在采用方法的是在mingw上编译成直接可以在windows上运行的程序。速度据目测确实相对于cygwin有很大提升。其代码已经上载进cvs中,大家可以下载后自己测试一把。以下将简单介绍一下如何使skyeye在mingw和Dev-cpp环境中的配置,编译,及执行。这个论坛好像发文不能贴图片。中间有些截屏可能会对大家有些帮助。等找到放图片的办法了再说吧。
1。环境的搭建
为了使skyeye能够在windows上编译,以下的包是必须的:
GTK-Development-Environment, mingw-install-20050907.tar.gz,SDL,devcpp
为了使skyeye能够在windows上运行,以下包使必须的:
GTK-Runtime-Environment,openvpn,SDL
为了打包skyeye的gui界面,以下包使必须的:
py2exe-0.6.3.win32-py2.4.exe
以下简单介绍以下各个包。
基本上所有包在sf上都能找到,比较稀奇古怪的东西都有全名,其余的大家可以去找最新的版本。GTK主要使为了支持touchscreen,SDL作为其替代也顺便放了进去。 openvpn的安装包中有tap-win32,这个是在windows上虚拟网卡必须的。py2exe是把python程序打包用的,for windows的版本在开发过程中顺便用python写了个gui,方便跨平台。
1。1 mingw安装。
1。1。1 mingw
mingw-install-20050907.tar.gz解压之后有个提示,大家照做即可。
1。1。2 dev-cpp
dev-cpp是mingw的集成开发环境。安装什么的大家点next即可,没有特别需要注意的。
1。2 gtk安装
gtk有两个需要安装的:GTK-Development-Environment和GTK-Runtime-Environment。前者是开发环境,后者为运行环境。前者安装时最好安装在mingw的根目录下(dev-cpp也是一样)。
DANGEROUS: gtk头文件定义似乎有问题。安装好后修改include/glib-2.0/glib/gwin32.h, 注释掉第72和73行
1。3 sdl安装
还是从源代码安装吧。SDL默认关闭了stdout和stderr。修改SDL-1.2.9\src\main\macos\SDL_main.c注释掉cleanup_output函数中 *fclose(stdout)即可。然后在mingw环境下
./configure --prefix=/mingw/
make
make install
1。4 openvpn安装
安装tap-win32即可。tap-win32的配置在pearpc的安装教程中有所介绍。不过那个介绍实在是太糟糕了,没看懂。
安装完后,控制面板。网络连接中会出现一个新网卡,写着“...网络电缆被拔出...”,这个就是tap-win32
添加的新网卡。被拔出的原因是因为还没有连接上。
先修改一下原来网卡的配置。原来网卡->属性->高级中有internet连接共享, 把那个
“允许...通过..”打勾,如果有“...控制或禁用...”的话也打勾吧。后面那个选项在
windows2003 server中默认是不出现的。在internet连接共享上面有个防火墙什么的,也顺带都关闭了。
在原来的网卡配置完后会出现一个提示窗口,说“...192.168.0.1...",不管它,确定就好。
然后看看tap-win32新增加那块网卡的属性。 这时候ip被设置成192。168.0.1,子网掩码255.255.255.0,不用改了。
2。编译运行
和在linux下的一样,不过要先改改Makefile.win
之所以要改Makefile.win,是因为`pkg-config gtk+-2.0 --cflags --libs`直接在mingw下编译是没有问题的,但在devcpp下编译会出现问题。在不是很清楚的情况下只好大家自己改Makefile了。要改的有两个地方,一个是SIM_EXTRA_LIBS,另一个是binary/skyeye_lcd_gtk.o。一个在最开头,另一个在最结尾,都很好找。
改好以后make -f Makefile.win即可。
3。note
在这里主要介绍的是在port到windows中的教训,路过的人可以不看。呵呵
基本上装好mingw后不支持的函数就剩下select和mmap两个。由于是第一次接触windows编程,select实在是想不出替代的办法。幸好所有select
只是判断一个fd是否可读而已,因此就用了sdl中的线程库,一个read,一个get。这样做有一个非常非常诡异的现象,在我宿舍的机器上面
一点问题都没有,但是挪到实验室后发现没有输入和输出。在随后的调试过程中发现sem-post之后一个printf可以解决问题。为了不
出现不雅的记号,最终采用办法是printf(" \b"),这样是看不出来有任何问题,只是效率有所牺牲。mmap的问题更加简单,纯粹就是分配
一块大内存。我问了一下,当初选择mmap好像是为了防止内存分配过大,或者分配太慢而采用的。目前测试版本中直接malloc似乎一点问题
没有。
网卡的支持是这次改版的主要目的自已。为了能支持网卡,参考了qemu和pearpc相关部分的实现。后来采用了pearpc的代码,qemu的代码其实和
pearpc基本毫无差别(我怀疑当中有一个抄另一个,呵呵),但是qemu的代码会出现诡异的问题,所以后来放弃了。
仔细的人会发现这次cvs update中几乎所有文件都修改了。主要变化是这个:
#include "armdefs.h" -> #incldue "arch/arm/common/armdefs.h"
如果不改devcpp在编译dbct的时候会出错。
Page was generated in 0.0551 seconds
There are no comments on this page. [Add comment]