请问armboot的入口地址

发布于 2022-09-29 00:59:09 字数 6940 浏览 15 评论 0

我的用的uclinux s3c2510的操作系统的flash分区原先是正确的,程序可以正确boot。但是我分给image文件的区太小了,现在想扩大一点。修改后的maps如下:
#define NUM_PARTITIONS 6
static struct mtd_partition s3c2510_partitions[NUM_PARTITIONS] = {
        {
                name: "boot (128K)",
                size: 0x00020000,
                offset: 0
        },
        {
                name: "kernel (2944K)",//(2432K)
                size: 0x002e0000,//add by zh,0x260000
                offset: 0x00020000
        },
        {
                name: "jffs2 (1024K)",//(1536K)
                size: 0x00100000,//add by zh,0x180000
                offset: 0x00300000//0x280000
        },
                                {
                name: "boot environment (8K)",
                size: 0x2000,
                offset: 0x004000
        },
        {
                name: "runtime environment (8K)",
                size: 0x2000,
                offset: 0x006000
        },
        {
                name: "complete (4M)",
                size: 0x400000,
                offset: 0
        },
};

     原先的分区正如注释里的大小。现在出现的问题是我修改了flash分区后flash区能容纳的映象文件大小没有发生变化。当小于原先设置时仍可正常启动,当大于原先设置时在armboot启动时就会出现如下错误:

ARMboot for SAMSUNG MicroProcessor - V3.1

code size : 00000000 -> 0001ef3c
DRAM Configuration:
Bank #0: 00000000 16 MB
Flash: 4 MB

*** Using default environment
cp15 register : c000107d
Instruction Cache is ON
cp15 register : c000107d
Data (writethrough) Cache is ON
Write Buffer Control register : 0000000c
Write Buffer is ON

Hit any key to stop autoboot:  3  0

Daredevil # setenv serverip 192.168.20.209
Daredevil # saveenv

Un-Protected 1 sectors
Erasing sector  2 ...
Saving Environment to Flash...done.
Protected 1 sectors

Daredevil # tftp

BootFile [image.2510.img], Load addr [0x400000]
ARP broadcast 1
eth addr: 00:0c:29:17:5b:61
Got good ARP - start TFTP
Server ethernet address 00:0c:29:17:5b:61
TFTP from server 192.168.20.209; our IP address is 192.168.20.78
Filename 'image.2510.img'.
Load address: 0x400000

Loading: *#####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################

done
Bytes transferred = 2479937 (25d741 hex)

Daredevil # bootm

## Booting image at 00400000 ...
   Image Name:   IPCAM-2.1.0-REL-uCLinux-2.4.24-u
   Image Type:   ARM Linux Kernel Image (gzip compressed)
   Data Size:    2479873 Bytes = 2421 kB = 2 MB
   Load Address: 80020000
   Entry Point:  00040000
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK

No initrd

## Transferring control to Linux (at address 00040000) ...

Starting kernel ...

prefetch abort

pc : [<00049014>]    lr : [<00012fa8>]
sp : 00026bf8  ip : 0001bd34  fp : 00000000
r10: 00000000  r9 : 00019da0  r8 : 00000000
r7 : 00026ef0  r6 : 00000000  r5 : 00000000  r4 : 00000000
r3 : 00000000  r2 : f006000c  r1 : 00000032  r0 : 600000d3
Flags: nZCv  IRQs off  FIQs off  Mode SVC_32

Resetting CPU ...

### ERROR ### Please RESET the board ###

armboot最后报错起初是报的data abort,最近不知怎么报成prefetch abort了?

   我感觉问题还是出在armboot这一部分,是不是入口地址有问题啊?我看别人的armboot打印的load address和entry point是一样的,为什么我的不同呢?有什么区别吗?那前面的booting image at的地址和load address、entry point又是什么关系呢?他们与config.mk中的TEXT_BASE有什么关系呢?我的TEXT_BASE = 0x00000000。而且我可以flwrite,只是系统不能启动。是不是我的程序太大了导致我tftp到ram中的程序超过了一定界限,或是覆盖了某部分的入口地址?

   一直很疑惑的是我修改了flash分区后映象文件的大小仍然受以前的分区的限制,说明我的分区没有成功,但是一旦我的映象文件小于这个限制,程序仍和正常启动,并显示:

Creating 6 MTD partitions on "Physically mapped flash":
0x00000000-0x00020000 : "boot (128K)"
mtd: Giving out device 0 to boot (128K)
0x00020000-0x00300000 : "kernel (2944K)"
mtd: Giving out device 1 to kernel (2944K)
0x00300000-0x00400000 : "jffs2 (1024K)"
mtd: Giving out device 2 to jffs2 (1024K)
0x00004000-0x00006000 : "boot environment (8K)"
mtd: Giving out device 3 to boot environment (8K)
0x00006000-0x00008000 : "runtime environment (8K)"
mtd: Giving out device 4 to runtime environment (8K)
0x00000000-0x00400000 : "complete (4M)"
mtd: Giving out device 5 to complete (4M)

    说明我的配置正确了,系统也可以读取配置信息。

哪位大侠可以指导一下啊,都弄了好几天了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文