Start.s网上有很多注解,但是看完注解后对其整个工作过程又有些模糊,特别是涉及到内存地址的地方,所以通过查阅资料慢慢完善对Start.s的分析,包括他的背景叙述和代码的一些分析,这篇随笔还不断晚上,添加上自己的一些体会和查到的资料。
CPU:s3c2440
系统启动流程:
#if 1 bl CopyCode2Ram /* r0: source, r1: dest, r2: size */ #else
其中CopyCode2Ram函数的工作是判断是Nor flash还是Nand flash启动,如果是Nand flash启动那么则将包括前4k内容的整个boot代码段复制到SDram指定位置,代码如下:
1 int CopyCode2Ram(unsigned long start_addr, unsigned char *buf, int size) 2 { 3 unsigned int *pdwDest; 4 unsigned int *pdwSrc; 5 int i; 6 7 if (bBootFrmNORFlash()) 8 { 9 pdwDest = (unsigned int *)buf; 10 pdwSrc = (unsigned int *)start_addr; 11 /* 从 NOR Flash启动 */ 12 for (i = 0; i < size / 4; i++) 13 { 14 pdwDest[i] = pdwSrc[i]; 15 } 16 return 0; 17 } 18 else 19 { 20 /* 初始化NAND Flash */ 21 nand_init_ll(); 22 /* 从 NAND Flash启动 */ 23 nand_read_ll_lp(buf, start_addr, (size + NAND_BLOCK_MASK_LP)&~(NAND_BLOCK_MASK_LP)); 24 return 0; 25 }
原文:http://www.cnblogs.com/orangeJuice/p/5826828.html