skyeye on windows: semi-final
Skyeye for windows1st draft
2006-5-15
Koodailar
1. 基本包安装
为了让skyeye能在mingw环境下编译通过,需要如下几个包:
Gtk,sdl,openvpn,binutils,gcc-core,mingw-runtime,mingw-utils,msys-libtool,win32api。其中gtk,sdl,openvpn在编译外设lcd和net的时候需要用到。Sdl默认会重置stdout,在编译时可以通过设置变量关闭该行为。为了方便我直接把源代码改掉了。其余包都是mingw和msys的主要组成部分,在网上很容易找到。下表列出了所有文件:
[ /e/tmp/mingw-all/backup ]
koodailar $ ls -al
total 16239
drwxr-xr-x 2 koodaila Administ 0 May 15 22:17 .
drwxr-xr-x 5 koodaila Administ 0 May 15 22:09 ..
-rwxr-xr-x 1 koodaila Administ6530357 Nov 17 07:03 GTK-Development-Environment-2.2.4-3.exe
-rwxr-xr-x 1 koodaila Administ5392785 Nov 17 07:03 GTK-Runtime-Environment-2.2.4.exe
-rw-r--r-- 1 koodaila Administ 357265 May 15 18:48 bash-2.05b-MSYS.tar.bz2
-rw-r--r-- 1 koodaila Administ7114497 May 15 19:15 binutils-2.16.91-20060119-1.tar.gz
-rw-r--r-- 1 koodaila Administ 306761 May 15 18:44 bison-2.0-MSYS.tar.gz
-rw-r--r-- 1 koodaila Administ3464344 May 15 18:56 gcc-core-3.4.5-20060117-1.tar.gz
-rw-r--r-- 1 koodaila Administ 348713 May 15 18:46 mingw-runtime-3.9.tar.gz
-rw-r--r-- 1 koodaila Administ1585762 May 15 18:49 mingw-utils-0.3.tar.gz
-rw-r--r-- 1 koodaila Administ 404192 May 15 18:51 msys-autoconf-2.59.tar.bz2
-rw-r--r-- 1 koodaila Administ 311288 May 15 18:46 msys-automake-1.8.2.tar.bz2
-rw-r--r-- 1 koodaila Administ 421205 May 15 18:46 msys-libtool-1.5.tar.bz2
-rwxr-xr-x 1 koodaila Administ2082857 Nov 19 11:08 openvpn-2.0_beta2-install.exe
-rw-r--r-- 1 koodaila Administ3236126 May 12 12:46 sdl-1.2.9-koodailar.tar.bz2
-rw-r--r-- 1 koodaila Administ 156162 May 15 18:48 tar-1.13.19-MSYS-2005.06.08.tar.bz2
-rw-r--r-- 1 koodaila Administ1536427 May 15 18:52 w32api-3.6.tar.gz
有了上面列表大家完全可以自己手动安装。为了节省大家时间和空间,我已经把所有东西做了个傻瓜包,minimal-mingw-for-skyeye-2006.05.15.rar 。目前放在ftp://eelinux.3322.org/incoming/others/skyeye-for-win/目录中。该傻瓜包精简了几乎所有内容,包括所有不需要的大型可执行文件,帮助文档,没有用到的大型静态链接库,等等。目前压缩包大小为12m,大小应该在大家容忍范围之内。
[ /e/tmp/mingw-all ]
koodailar $ ls -al
total 5896
drwxr-xr-x 5 koodaila Administ 0 May 15 22:09 .
drwxr-xr-x 13 koodaila Administ 0 May 15 20:30 ..
drwxr-xr-x 2 koodaila Administ 0 May 15 22:17 backup
drwxr-xr-x 8 koodaila Administ 0 May 15 22:03 mingw
-rw-r--r-- 1 koodaila Administ 12073838 May 15 22:06 minimal-mingw-for-skyeye-2006.05.15.rar
drwxr-xr-x 3 koodaila Administ 0 May 15 20:13 testsuite
虽说是傻瓜包,还是有些地方需要大家亲自动手处理。下面介绍一下整个安装过程:
a) 将minimal-mingw-for-skyeye-2006.05.15.rar解压缩至任意目录。推荐解压缩至当前目录。解压缩后会生成一个名为mingw的目录。
b) 设置路径。在用户PATH变量中加入${压缩包解压地址}\mingw\lib。例如,如果将压缩包解压至E:\tmp\mingw-all,则应该在路径后添加”E:\tmp\mingw-all\mingw\lib”。通过设置${压缩包解压地址}\etc\profile可以硬性写入路径信息。但是编译出来的skyeye.exe运行时需要gtk和sdl的动态链接库libglib-2.0-0.dll和SDL.dll,这时仍需要添加PATH变量。如果路径信息未设置正确,在编译skyeye时会出现如下错误信息:
添加的PATH信息如下图:(sample)
c) Openvpn在安装时只需要选择安装tapwin32虚拟网卡即可,如图:
安装完成后,windows操作系统右下角会多一个网线未插上的错误提示。该提示会在 skyeye打开虚拟网卡时消失。
安装完成后需要修改原有网卡的配置。控制面版->网络连接->原有网卡->属性->高级中有internet连接共享, 把 “允许...通过..”打勾,如果有“...控制或禁用...”也打勾(windows2000和windows xp略有不同,用户需要自行判断。后面那个选项在windows2003 server中默认是不出现的),如图:
如果在internet连接共享上面有个防火墙选项,需要将其关闭,如图:
在原来的网卡配置完后可能会出现一个提示窗口,说“...192.168.0.1...",点击确定(很不幸该提示信息在制作文档过程中未能成功再现,未能搞到截图)。 然后在控制面板中查看tap-win32新增加那块网卡的属性,其默认值为:ip 192。168.0.1,子网掩码255.255.255.0,如图:
d) 想到了再写吧。
2. 编译运行
运行${压缩包解压地址}\mingw\run.bat,系统会弹出一个rxvt的终端。为了保护大家视力,以及努力争求一种熟悉的感觉,我已经把色彩设成了幽幽的黑底蓝字。为了方便大家写脚本,我也把msys默认的shell从sh改成了bash。同时我也把login目录设置成了skyeye,免得不同用户会进入不同的login目录。对颜色、shell和login目录的改动大家可以查看run.bat脚本,这是一个简单的windows批处理文件。
我在login目录下放了一个可以编过的skyeye-v1,修改的为skyeye目前最新版本skyeye-1.2r7-v3。所有改动地方放在文档末尾,大家有兴趣可以查看。
编译的过程与linux上的略有不同,需要指定make脚本的位置。在rxvt窗口中输入
Make –f Makefile.win即可完成编译。截图如下:
3. 目前问题
a) 现在对终端输入(即串口输入)的处理是通过多线程实现的。Windows的stdc库据说在多线程的时候会有很诡异的问题。现在诡异的事情发生了,但是不清楚是不是和这个有关系。现把情况简单描述一下:
i. 终端输入cd 12345678901234567890
ii. 读取终端的进程会将输入保存在一个链表中,结果如上。
iii. S3c4510(目前试的是这个,大家可以试试安装包内的代码)的io_cycle处理函数会依次读取上诉结果。
iv. 显然上面命令是错的。但是输入是这样的:
cd 345670123490
中间吞掉了上面用红色标出的12,89和567,屡试不爽。
由于这个结果是可以预测的,因此我也成功的运行了大家熟悉的/bin/same/same程序,解决方法是这样的:
cd 12/bin
cd 12/same
./s12ame
解决办法就是把它吞掉的字符用12两个空格占位而已。:)
运行的截图如下:
b) Openvpn只测试了是否能打开,未进一步测试。需要等上面问题解决了才行。
4. 附录
安装GTK-Runtime-Environment-2.2.4.exe后,在运行gtk-config时无libglib-2.0-0.dll
add C:\Program Files\Common Files\GTK\2.0\lib to path
GTK-Development-Environment-2.2.4-3.exe_path\include\glib-2.0\glib\gwin32.h,
line 71-72 , add comment:
//gint g_win32_ftruncate (gint f,
// guint size);
Makefile:
line40: change gcc-3.3 to gcc.
line58: add -mms-bitfields
line 100: add binary/mingw_help.o
line 106: add binary/skyeye_net_tap.o
line 207: remove -lc , add -lmingw32 -lSDLmain -lSDL
line 351: add
binary/mingw_help.o: utils/stub/mingw_help.c utils/stub/mingw_help.h
$(CC)$(ALL_CFLAGS) -c $< -o $@
utils/main/skyeye.c:
line 404://struct termios skyeye_termios_old;
line 408:// tcsetattr (0, TCSANOW, &skyeye_termios_old);
line 423-432:
// struct termios old, tmp;
// tcgetattr (0, &old);
// tcgetattr (0, &skyeye_termios_old);
// tcgetattr (0, &tmp);
// tmp.c_lflag &= ~ICANON;
// tmp.c_lflag |= ISIG;
// tmp.c_lflag &= ~ECHO;
// tmp.c_cc[VMIN] = 0;
// tmp.c_cc[VTIME] = 0;
// tcsetattr (0, TCSANOW, &tmp);
line 552://tcsetattr (0, TCSANOW, &old);
utils/debug/skyeye2gdb.c:
line 822-841:
// static fd_set rfds;
// static struct timeval tv;
//
// tv.tv_sec = 0;
// tv.tv_usec = 0;
// FD_ZERO( &rfds );
// FD_SET( remote_desc, &rfds );
//
// if ( select( remote_desc+1, &rfds, NULL, NULL, &tv ) == 1 )
// {
// int n;
// static char buf[100];
//
// n = read( remote_desc, buf, sizeof(buf) );
// if ( n>0 )
// DBG_RDI("Got async char");
// if ( buf[0] == '\003' )
// DBG_RDI(":Ctrl+C, interrupted.\n");
// return 1;
// }
device/net/skyeye_net_tap.c
line 224: ht_snprintf(actual_name, actual_name_size, "%s", name_data);
change to snprintf
谢谢,真高兴看到了SKYEYE的新进展。我初学嵌入系统,已经被这些东西搞得晕头转向。 哪个傻瓜包为什么现在下不了了?
我照楼主说的安装,始终编译不了,不知道怎么回事?
能给一个能顺利编译的版本就好了,还有相关的一些需要的包什么的.
谢谢楼主了!
页:
[1]