请问armboot的入口地址
我的用的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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论