QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2653|回复: 2

skyeye on windows: semi-final

[复制链接]
发表于 2006-5-16 00:02:35 | 显示全部楼层 |阅读模式
Skyeye for windows
1st 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的主要组成部分,在网上很容易找到。下表列出了所有文件:
[code:1]
[ /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 Administ  6530357 Nov 17 07:03 GTK-Development-Environment-2.2.4-3.exe
-rwxr-xr-x    1 koodaila Administ  5392785 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 Administ  7114497 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 Administ  3464344 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 Administ  1585762 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 Administ  2082857 Nov 19 11:08 openvpn-2.0_beta2-install.exe
-rw-r--r--    1 koodaila Administ  3236126 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 Administ  1536427 May 15 18:52 w32api-3.6.tar.gz

[/code:1]
有了上面列表大家完全可以自己手动安装。为了节省大家时间和空间,我已经把所有东西做了个傻瓜包,minimal-mingw-for-skyeye-2006.05.15.rar 。目前放在ftp://eelinux.3322.org/incoming/others/skyeye-for-win/目录中。该傻瓜包精简了几乎所有内容,包括所有不需要的大型可执行文件,帮助文档,没有用到的大型静态链接库,等等。目前压缩包大小为12m,大小应该在大家容忍范围之内。

[code:1]
[ /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

[/code:1]
虽说是傻瓜包,还是有些地方需要大家亲自动手处理。下面介绍一下整个安装过程:
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窗口中输入
[code:1]Make –f Makefile.win[/code:1]即可完成编译。截图如下:


3. 目前问题
a) 现在对终端输入(即串口输入)的处理是通过多线程实现的。Windows的stdc库据说在多线程的时候会有很诡异的问题。现在诡异的事情发生了,但是不清楚是不是和这个有关系。现把情况简单描述一下:
i. 终端输入[code:1]cd 12345678901234567890[/code:1]
ii. 读取终端的进程会将输入保存在一个链表中,结果如上。
iii. S3c4510(目前试的是这个,大家可以试试安装包内的代码)的io_cycle处理函数会依次读取上诉结果。
iv. 显然上面命令是错的。但是输入是这样的:
[code:1]cd 345670123490[/code:1]
中间吞掉了上面用红色标出的12,89和567,屡试不爽。
由于这个结果是可以预测的,因此我也成功的运行了大家熟悉的/bin/same/same程序,解决方法是这样的:
[code:1]
cd 12/bin
cd 12/same
./s12ame
[/code:1]
解决办法就是把它吞掉的字符用12两个空格占位而已。
运行的截图如下:

b) Openvpn只测试了是否能打开,未进一步测试。需要等上面问题解决了才行。


4. 附录
[code:1]
安装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:
line  40: change gcc-3.3 to gcc.
line  58: 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
       
[/code:1]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2006-5-16 08:57:46 | 显示全部楼层
谢谢,真高兴看到了SKYEYE的新进展。我初学嵌入系统,已经被这些东西搞得晕头转向。
回复

使用道具 举报

发表于 2006-7-29 23:35:54 | 显示全部楼层
哪个傻瓜包为什么现在下不了了?
我照楼主说的安装,始终编译不了,不知道怎么回事?
能给一个能顺利编译的版本就好了,还有相关的一些需要的包什么的.
谢谢楼主了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-23 10:06 , Processed in 0.067318 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表