dunken 发表于 2012-11-28 21:30:33

U-BOOT1.3.4引导没有加头的zImage.bin问题

根据U-BOOT1.1.6的选项 Boot the system对应的启动内核的文件lib_arm/boot_zImage.c进行修改的!

出现如下错误信息:
Enter your selection: 8            选择启动系统
Start Linux ...
Copy linux kernel from 0x00200000 to 0x30008000, size = 0x00300000 ... Copy Kernel to SDRAM done,zImage magic = 0x016f2818
linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0"
MACH_TYPE = 168
NOW, Booting Linux......
data abort
pc : [<3000b420>]          lr : [<0000005c>]
sp : 30246608ip : 30007fff   fp : 30246624
r10: 40000000r9 : 30000000   r8 : 30008000
r7 : 30007fffr6 : 30007fff   r5 : 30007fffr4 : 3023d164
r3 : 000000a8r2 : 30256628   r1 : 30246628r0 : 30256628
Flags: nzCvIRQs offFIQs offMode SVC_32
Resetting CPU ...
(自动重新启动)
U-Boot 1.3.4 (Nov 28 2012 - 21:21:24)

主要修改如下,nand_read_whole函数是启动代码搬移用到的函数。
static inline int copy_kernel_img(ulong src, ulong dst, size_t size)
{
int ret = 0;
#if 0
ret = nand_read_ll_lp_lcd((unsigned long)src,(unsigned char *)dst,(int)size);
#else      //NAND 地址          SDRAM地址             大小
ret = nand_read_whole(src,(unsigned char *)dst,size);
#endif
return ret;
}



Linux_Cult 发表于 2012-11-29 10:59:18

如果你用ret = nand_read_ll_lp_lcd((unsigned long)src,(unsigned char *)dst,(int)size);可以的话,那么就是你的读NAND的函数有问题。你可以对照nand_read_ll_lp_lcd函数的实现来改一下你的代码。

dunken 发表于 2012-11-29 12:07:11

Linux_Cult 发表于 2012-11-29 10:59 static/image/common/back.gif
如果你用ret = nand_read_ll_lp_lcd((unsigned long)src,(unsigned char *)dst,(int)size);可以的话,那么就 ...

我并没有添加LOGO,所以参考的是        ret = nand_read_ll_lp((unsigned char *)dst,(unsigned long)src, (int)size);我想问启动代码搬移都能成功,这个错误到底是怎样造成的呢

dunken 发表于 2012-11-29 15:51:41

问题解决啦    是在判断“是否对齐上出了错误”,导致启动代码无法重定向!

if ((start_addr & NAND_PAGE_MASK)||(size& NAND_PAGE_MASK))
改成
if (start_addr & NAND_PAGE_MASK)
不判断代码重定向的大小即可
也可以做页对齐调整,参考TQ的
int_size=(size + NAND_PAGE_MASK)&~(NAND_PAGE_MASK);





页: [1]
查看完整版本: U-BOOT1.3.4引导没有加头的zImage.bin问题