QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2790|回复: 4

很多问题不明白,请高手解答一下吧, 感激不尽!

[复制链接]
发表于 2004-7-15 17:07:56 | 显示全部楼层 |阅读模式
内核代码: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开启以前, 这些地址并没有被映射到物理地址上啊,为什么可以对这些地址进行访问呢?
发表于 2004-7-16 12:25:16 | 显示全部楼层
这个问题网上讨论很多,可以google到.
可能算gcc3.3的bug.
请看http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11103
可以换用其他版本的gcc
回复

使用道具 举报

 楼主| 发表于 2004-7-16 14:51:09 | 显示全部楼层
哪个版本的gcc比较合适啊!

还有后面的两个问题呢? 有没有人知道?
回复

使用道具 举报

发表于 2004-7-17 12:06:34 | 显示全部楼层
按http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11103 说,
gcc3.2可能可以.
另外,也可以试试改动blk_ioctl 的代码,
避免诸如register int res asm("r0");这样的语法.
应该可以.
回复

使用道具 举报

发表于 2004-7-26 23:52:00 | 显示全部楼层
在 ftp://166.111.68.183/pub/embed/armlinux/xscale/xscale-gcc-3.3.3.tar.bz2
应该可以,我用它编译了linux-2.6.7 成功。
ftp://166.111.68.183/pub/embed/armlinux/xscale/lubbock/06-02-2003/bin/arm-linux-toolchain-bin-05-23-03.tgz
我用它编译过arm-linux-2.4.19-rmk7-pxa2


0xc000,8000是虚地址,对应于物理地址a0008000

这只是vmlinux的地址定位,
看看
bootloader实际上把zImage放到a0200000,然后zImage自己解压到a0008000
然后再执行实际的内核内容。
执行完make menuconfig后,
你可看看 linux-2.4.19/arch/arm/boot/vmlinux.lds
并对照 linux-2.4.19/arch/arm/vmlinux...lds

在start_kernel函数中,启动了MMU后,就访问的是cxxxxxx了。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-22 05:07 , Processed in 0.082183 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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