内核make uImage 0x30008008崩溃

转载自:http://www.linuxforum.net/forum/showflat.php?Cat=&Board=embedded&Number=717153&page=0&view=collapsed&sb=5&o=0&vc=1

 

我以前在S3C2410上一直使用2.6.25的内核,最近要做点新东西,所以打算顺便升级到新内核上工作。但是在make uImage编译完内核后,u-boot加载完kernel开始运行的时候却提示:
Starting kernel ...

data abort
pc : [<30008008>] lr : [<33f954d4>]
sp : 33f4fd48 ip : 33f4ffb8 fp : 33f60548
r10: 00000001 r9 : 00000001 r8 : 33f4ffdc
r7 : 33f990dc r6 : 00000000 r5 : 00000000 r4 : 00000000
r3 : 30008000 r2 : 30000100 r1 : 000000c1 r0 : 00000000
Flags: nZCv IRQs off FIQs off Mode SVC_32
Resetting CPU ...

折腾了好多天才搞明白为什么kernel会在30008008就abort了。原来为了便于多内核引导,u-boot的mkimage会在kernel前加上0x40(64bytes)的头,真正的内核入口就变成了0x30008040了。而在新版2.6.29的加载地址和入口点地址相同,所以就造成abort……其实在u-boot加载uImage文件的时候有显示,当时没太注意:
## Booting image at 30008000 ...
Image Name: Linux-2.6.29.1
Created: 2009-04-21 4:39:52 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1803488 Bytes = 1.7 MB
Load Address: 30008000
Entry Point: 30008000
Verifying Checksum ... OK
XIP Kernel Image ... OK

我很奇怪,为什么2.6.25都可以直接make uImage,2.6.29却不行(后来发现从2.6.28也是不行的)。带着这个疑问,仔细看了一下Makefile,发觉有些小变化:
---------------------2.6.25 arch/arm/boot/Makefile------------------
MKIMAGE := $(srctree)/scripts/mkuboot.sh
...
ZRELADDR := $(zreladdr-y)
...
cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
-C none -a $(ZRELADDR) -e 0x30008040\
-n 'Linux-$(KERNELRELEASE)' -d $< $@
----------------------------------------------------------------------


--------------------2.6.29 arch/arm/boot/Makefile---------------------
quiet_cmd_uimage = UIMAGE $@
cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
-C none -a $(LOADADDR) -e $(LOADADDR) \
-n 'Linux-$(KERNELRELEASE)' -d $< $@

ifeq ($(CONFIG_ZBOOT_ROM),y)
$(obj)/uImage: LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT)
else
$(obj)/uImage: LOADADDR=$(ZRELADDR)
endif
--------------------------------------------------------------------

主要的变化就是mkimage的参数-e,由指定入口0x30008040变成了$(LOADADDR)!我的问题就在这里,这样变化后带来了灵活性吗?-a参数和-e参数的地址如果相同,u-boot又怎么处理头的问题?没用过新的u-boot(目前我使用的是1.3.2),所以不知道能不能在新的u-boot正常引导。。。。。。。
各位高手,谁熟悉这里的变化,跟我解释解释啊!TIA!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值