|
内核代码:2.4.19
arm补丁:patch-2.4.19-rmk6
xscale补丁:diff-2.4.19-rmk6-pxa1
打完补丁后,用gcc-2.95.3进行交叉编译,在make dep时出现如下错误:
arm-linux-gcc -D__KERNEL__ -I/var/os_src/linux-2.4.19/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -Uarm -fno-common -pipe -g -mapcs-32 -D__LINUX_ARM_ARCH__=5 -mcpu=xscale -mtune=xscale -mshort-load-bytes -msoft-float -Uarm -S -o constants.h.tmp.1 getconstants.c
cc1: bad value (xscale) for -mtune= switch
cc1: bad value (xscale) for -mcpu= switch
make[2]: *** [constants.h] Error 1
make[2]: Leaving directory `/var/os_src/linux-2.4.19/arch/arm/tools'
make[1]: *** [dep] Error 2
make[1]: Leaving directory `/var/os_src/linux-2.4.19/arch/arm/tools'
在网上查,说是应该用gcc-3.3.2等高版本的编译器.于是用gcc-3.3.2进行编译,make dep可以通过,但在make zImage时,有出现
-blkpg.c:252: error: asm-specifier for variable `__r1' conflicts with asm clobber
这样的错误.
到底是怎么回事啊,快帮帮我呀!
还有两个问题:
1.armlinux的编译地址,就是TEXTADDR,好像都在0xc000,0000以上,
如0xc000,8000. 为什么这个TEXTADDR要设置成这样子呢?
2.因为TEXTADDR几乎都在0xc000,0000以上,从链接脚本中可以看出,stext,
__proc_info_begin, __proc_info_end, __arch_info_begin,
__arch_info_end等符号的地址都应该在0xc000,0000以上吧. 在__lookup_processor_type函数, 和 __lookup_architecture_type函数中,对 __proc_info_begin, __proc_info_end, __arch_info_begin, __arch_info_end这些符号的访问, 也就是对0xc000,0000
以上的地址进行访问. 那在处理器的mmu开启以前, 这些地址并没有被映射到物理地址上啊,为什么可以对这些地址进行访问呢? |
|