2008/11/26

Cygwin下vivi和kernel编译全攻略

最近打算设计新产品,在Friendly Arm买了一套Matrix5系统研究一下。发现用ARM-Linux开发似乎比较明智些!
但用Windows习惯了,还不太熟悉Linux,而且重装RH9恐怕很费事。还是先用Win2000吧,Linux熟悉熟悉再说!
看见版上有个Cygwin,可以在Windows下建立仿Linux系统,下了一个试用一下,感觉还不错,只可惜没有图形界面!
根据杨老板所说,Cygwin里可以编译Matrix5的vivi和kernel。就先以此开始熟悉Linux吧!
大约用了一周左右的时间,终于搞定了vivi和kernel在Cygwin里的编译。

现在把编译的过程贴出来,以供有相同感受的兄弟们参考:
(由于Cygwin里操作全部使用行命令输入方式,所以最好先熟悉一下Linux的常用命令)
1、安装Cygwin:
安装过程不多说了,开发中心里有参考。不过要提两点:最好在系统比较干净时安装,建议系统刚启动完就安装,否则安装可能会出错;另外安装时一定要装gcc和ncurse库,否则menuconfig用不了,假如搞不清就全部安装吧!
装完Cygwin后会有一个快捷方式,运行它就可以进入Cygwin系统了。第一次进Cygwin系统还会有一些初始化过程,完了会进入命令输入状态,提示符为“@”。 ARM
这里要先说明一下,Linux的文件系统是从/开始的,Cygwin系统的/就是在Windows里安装Cygwin时选的安装路径 (X:\cygwin)。假如想在Cygwin里访问Windows的所有逻辑盘,到/cygdrive里找。比如Windows里的C:就是 Cygwin里的/cygdrive/c 。这样可以在Windows和Cygwin中交叉访问文件,对于已经熟悉Windows操作的人来说是比较方便的。
还有就是要注重Linux里是区分大小写的,也就是说“file”和“FILE”不是同一个名字。尤其一些文件或目录名中既有大写字母也有小写字母,注重不要输错!
2、安装arm-linux-gcc:
这个安装开发中心里也有,去下载一下解开就算安装好了,注重要解到/opt目录(Windows中的X:\cygwin\opt)下。
修改启动脚本/etc/profile文件(可在Windows中用文本编辑器修改X:\cygwin\etc\profile)中的PATH环境变量为
PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/opt/FriendlyARM/crosstool/arm-linux/gcc-2.95.3-glibc-2.2.3/binPATH
gdbserver可以先不用,好象是Debug时才会用到。至少我在编译时是没用到。
输入“arm-linux-gcc -v”,自己测试一下吧。
3、编译VIVI:
在开发中心已有较具体的说明。一定要下载版上的“vivi_cygwin.tgz”,不要用光盘里的。预配置文件在包里已经有了(config.friendlyarm),不用再下载。 字串5
由于VIVI要用到kernel的一些头文件,所以需要kernel的源代码,在光盘里“SBC-2410X/SBC-2410X-Linux /matrix5-kernel-v5.5.tgz”。将vivi和kernel都解到/friendly-arm下,即/friendly-arm /vivi和/friendly-arm/kernel里。然后需修改/friendly-arm/vivi/Makefile里的一些变量设置:
LINUX_INCLUDE_DIR = /friendly-arm/kernel/include/
CROSS_COMPILE = arm-linux-
ARM_GCC_LIBS = /opt/FriendlyARM/crosstool/arm-linux/gcc-2.95.3-glibc-2.2.3/lib/gcc-lib/arm-linux/2.95.3
三个变量在不同位置,自己找一下吧。其中前面两个变量杨老板已经改好了,核对一下就可以了;注重第三个变量中FriendlyARM中间没有减号,gcc-2.95.3-glibc-2.2.3中的g是小写。
为确保编译的有效性,最好在编译之前将vivi里所有的“*.o”和“*.o.flag”文件删掉(本人曾经上过当)。
进入/friendly-arm/vivi目录里,输入“make menuconfig”,开始选择配置。可以Load也可以自己修改试试(不要乱选,有些选项是不能支持的)。注重Exit时一定要选“Yes”保存配置。
再输入“make”正式开始编译,一会儿就完了。假如不报错,在/friendly-arm/vivi里面就有你自己的“vivi”了。 字串5
4、编译kernel:
这是最痛苦的一步,开发中心里虽然有这个条目,但还没放上去。只好自己摸,搞了好几天。
kernel的源程序在上面编译vivi时已经解到/friendly-arm/kernel中了。因为这个程序包已在Linux中编译过,有一些中间和目标代码和Cygwin是不兼容的。必须先处理一下,否则不能正常进行编译。
首先,还是把kennel里所有的“*.o”和“*.o.flag”文件删掉,以免不必要的麻烦。然后进入/friendly-arm/kernel目录,可以输一下“make menuconfig”试试。结果提示出错。这是由于配置脚本已在Linux中编译过,在scripts/lxdialog里产生了一个Linux下的可执行程序lxdialog。在Cygwin里这是个坏东西,它既不能执行,还会阻止可执行程序的生成。必须把它删掉。类似的文件如下:
/friendly-arm/kernel/scripts/lxdialog/lxdialog
/friendly-arm/kernel/scripts/mkdep
/friendly-arm/kernel/scripts/split-include
/friendly-arm/kernel/drivers/char/conmakehash
/friendly-arm/kernel/drivers/net/hamradio/soundmodem/gentbl
这几个文件必须删掉,注重是没有扩展名的文件,不要把源文件“*.c”删掉!
现在应该可以用“make menuconfig”进行配置了。这里的选项太多,先Load包里的config.friendly配置,待会儿再慢慢研究各个选项吧。同样,Exit时一定要选“Yes”保存配置。
下面可以开始编译了。输入“make zImage”,可以看见开始一个个模块的编译。但是过了一、二分钟,就会报一个错,大概是说“/friendly-arm/kernel /include/asm/arch/ide.h”没找到。这个问题很希奇,按理说头文件丢失是个低级错误,不可能发现不了,不知道RH9中编译是否也有同样问题。可以这样解决,从别的地方复制一个ide.h过来,只要其中有相应的两个函数定义就可以了。比如:
cp /friendly-arm/kernel/include/asm/arch-l7200/ide.h /friendly-arm/kernel/include/asm/arch/ide.h
再执行“make zImage”应该可以完成编译了。不过时间比较长,得要好几分钟。不报错的话,在/friendly-arm/kernel/arch/arm/boot目录里会生成你编译的zImage 。
接下来,也许你打算自己修改一下“make menuconfig”里的配置。这里有个比较麻烦的问题,你最好先把“/friendly-arm/kernel/.hdepend”这个文件备份一下。问题是这样的:当你修改了某些比较要害的选项后,会提示你进行“make dep”。此时即使你直接进行“make zImage”,该过程亦会自动先运行。一旦执行到一个要生成“.hdepend”的命令时会提示命令参数太长。再看.hdepend已成了一个空文件。 ARM开发论坛
这个“.hdepend”真是个头痛的问题,估计在RH9里应该没这种事,否则这编译根本进行不下去。开始想把Cygwin的设置改一下应该就可以了,可找了半天也没找到有关的设置。求助杨工,倒是给了一个办法,可还是不顶用。直到现在,这个问题仍没有很好的解决。不过,把我自己用的两个方法写出来给大家参考一下:
a)把备份好的“.hdepend”复制回来,修改“/friendly-arm/kernel/Makefile”,将其中一行“scripts /mkdep -- `find $(FINDHPATH) -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend”的行首加一个“#”字符。实际上就是直接使用原有的“.hdepend”,编译时跳过重新生成该文件。此法已经试过,是可以的。但有什么副作用不知道!
b)仍然要把“Makefile”中生成“.hdepend”那一行去掉,换成下面三个命令行:
scripts/mkdep -- `find $(HPATH)/asm -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend
scripts/mkdep -- `find $(HPATH)/linux -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` >> .hdepend 字串4
scripts/mkdep -- `find $(HPATH)/scsi $(HPATH)/net -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` >> .hdepend
注重三行前面都有一个TAB。当执行过“make dep”后还要手工修改一下“.hdepend”:查找“.PRECIOUS:”字样引导的三段列表,将它们合并成一个“.PRECIOUS:”列表(列表头上的“.PRECIOUS:”留着,中间两个删掉即可)并将列表放在文件尾上。然后再执行“make zImage”即可完成编译。此法较麻烦,但可靠性高一点!

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/29898/showart_1296232.html

没有评论:

发表评论