buf

BE something YOU love and understand
posts - 94, comments - 35, trackbacks - 0, articles - 2
   :: 首页 :: 新随笔 :: 联系 ::  :: 管理

在Armulator中运行uClinux

Posted on 2008-01-19 15:22 buf 阅读(569) 评论(0)  编辑 收藏 引用 所属分类: Embedded

有了Getting familiar with uClinux/ARM 2.6一文提供的step by step指导,我的uClinux很快在Armulator中运行起来了。由于我使用了不同的uClinux distro(20051130),编译过程中曾出现一些让我莫名其妙的问题,在此记录一下。

当所有准备工作就绪,执行make menuconfig发现并没有按照uClinux-dist/vendors/GDB/Armulator目录下的默认配置文件进行内核、库、用户程序的设置。从make的输出也发现ARCH=arm,我想这不能啊,应该是armnommu才对啊。于是make mrproper再次执行make menuconfig,依然如此。于是查找ARCH=arm出处:uClinux-dist/vendors/GDB/Armulator/config.arch中包含了一个针对armnommu体系结构的通用配置文件$(ROOTDIR)/vendors/config/armnommu/config.arch ,后者定义了ARCH:

. . .

MACHINE       = arm
ifdef CONFIG_DEFAULTS_KERNEL_2_6
ARCH          = arm
else
ARCH          = armnommu
endif
ENDIAN        ?= little
CROSS_COMPILE = arm-elf-
CROSS         = $(CROSS_COMPILE)

. . .

问题就在这里了。由于我要编译的是内核版本是linux-2.6.5,于是 CONFIG_DEFAULTS_KERNEL_2_6 会被定义,ARCH自然就定义为arm了。原来在较早的linux-2.6-xx代码树中(比如这里我所使用的linux-2.6.5),armnommu是一个独立的ARCH,但是不知从哪个版本开始,armnommu被合并到arm中去了。我使用了较新的uClinux distro,已经增加了对CONFIG_DEFAULTS_KERNEL_2_6的检查来决定ARCH的定义,所以出现了上面的问题。

解决的办法也很清楚了,去掉上面对 CONFIG_DEFAULTS_KERNEL_2_6的检查,直接定义ARCH为armnommu就OK了:

MACHINE       = arm
#ifdef CONFIG_DEFAULTS_KERNEL_2_6
#ARCH          = arm
#else
#ARCH          = armnommu
#endif
ARCH          = armnommu
ENDIAN        ?= little
CROSS_COMPILE = arm-elf-
CROSS         = $(CROSS_COMPILE) 

或者在执行make时在命令行中指定ARCH和CROSS_COMPILE,如:
$ make ARCH=armnommu CROSS_COMPILE=arm-elf- ...
这样makefile文件中所有对ARCH和CROSS_COMPILE的定义就都被忽略了。


只有注册用户登录后才能发表评论。