在Windows 7系统下配置eCos开发环境时碰到一些问题,权限的问题和fork的问题,这里总结一下解决方法以便需要的朋友参考。我的环境是Windows 7 SP1,64位,中文,旗舰版,Cygwin-1.7.28 32位,eCos配置工具ecos-tools-bin-120425.cygwin.tar.bz2,GCC编译器ecoscentric-gnutools-arm-eabi-20081213-sw.cygwin.tar.bz2。
eCos官网:http://ecos.sourceware.org eCos中文技术网:http://www.52ecos.net eCos交流QQ群:144940146。
32位 vs 64位
Windows 7有32位版本和64位版本,Cygwin也有32位版本和64位版本。Windows 7 64位版本是兼容32位应用的,所以从理论上讲Windows 7的32位版本和64位版本没有什么区别,内存超过4G的使用64位,4G以内的使用32位就可以。Cygwin 64位无法运行eCos配置工具,而Cygwin 32位可以正常运行。
eCos配置工具或GCC/GDB不工作
默认安装的Cygwin没有包含eCos配置工具和GCC/GDB所需的部分组件,在Cygwin终端运行eCos配置工具和GCC/GDB,根据提示安装缺失的组件,在Windows资源管理器中双击eCos配置工具以及在Eclipse下调用GCC/GDB只会给出含糊不清的错误提示或根本不提示,所以必须首先保证在Cygwin终端下可以正常运行这些工具。
Permission denied
编译过程产生Permission denied权限问题,打开Cygwin终端,进入eCos编译目录,使用ls -l察看文件权限,权限一列的内容为“----------”或“d---------”,这个意思是没有任何读写权限!进入eCos源代码目录察看文件权限,结果也是所有文件没有任何读写权限。
解决办法是在Cygwin终端修改eCos源代码的文件读写权限。
权限修改好后,删除eCos的编译目录并重新生成编译目录,再重新编译就不会有权限问题了。
fork失败
编译过程出现fork tclsh失败的错误,cygwin\bin\libtcl8.5.dll: Loaded to different address,这是因为Windows 7在创建子进程时,子进程的内存布局与父进程的内存布局不相同引起的,而fork要求子进程与父进程有完全相同的内存布局。这个错误不是每次都会出现,有时候会出现有时候不会出现,如果不嫌烦就多试几次就可以。嫌烦的使用rebase工具修复这个问题:首先关闭所有Cygwin进程和服务,包括eCos配置工具和Cygwin Terminal;然后通过Windows资源管理器进入X:\cygwin\bin目录双击ash或dash(不能使用bash或其他终端模拟器),在ash/bash窗口输入rebaseall命令。
更多内容请阅读《How do I fix fork() failures?》,以及X:\cygwin\user\share\doc\rebase\README。
超级终端
Windows 7居然不再提供超级终端这样嵌入式开发必备的工具!从Windows XP下拷贝几个超级终端的必备文件到Windows 7,并放到同一个目录下,不一定要放到Windows 7的系统目录下。
- C:\Program Files\Windows NT\hypertrm.exe
- C:\Windows\System32\hypertrm.dll
- C:\Windows\System32\hticons.dll
更多内容请参考《如何在Win7中安装使用超级终端Hyper Terminal》。