omap3530启动过程

omap3530启动过程

启动过程:

3530片内的bootrom->X-Load->uboot->Linux kernel

X-Load:

1.         首先,执行start.s文件,完成CPU模式设置,存储器初始化,代码重定位,堆栈指针设定等。

2.         通过SignGP工具的源码、\xloader\board\omap3530Mini\x-load.lds文件和\xloader\board\omap3530Mini\config.mk文件可以看出X-load被加载到的内存地址。

3.         在X-Load源代码的board.c文件中的宏CFG_LOADADDR定义了X-Load将uboot加载到的内存地址。这里的地址是uboot加载地址并非是运行时的地址,通常在加载地址与运行地址不同,通过重定位代码实现。

uboot:

1.       执行过程:首先,执行start.s文件,完成CPU模式设置,存储器初始化,代码重定位,堆栈指针设定等,然后进入c语言代码部分执行,最后,或根据用户请求进行操作;或根据bootcmd的命令,读取Linux内核,并加载Linux内核到内存,在根据内核的头,再将内核解压(或不解压,根据内核是否压缩而定)到指定位置,然后跳转运行内核。

注意经过编译的内核生成文件是image,是不能不被uboot认识引导的,通过uboot源代码的tools/目录下有mkimage工具,将image变成uImage(即,压缩或不压缩,加头)才能被uboot认识引导。Linux2.4内核需要用命令mkimage手动完成,Linux2.6直接用make uImage命令即可(怎么改见2)。

Linux2.6:

1.       Linux2.6 make uImage生成uImage的规则在/linux-2.6 /arch/arm/boot/Makefile文件中,地址参数具体定义在/linux-2.6/arch/arm/mach-omap2/Makefileboot文件中的zreladdr-y。

2.       在/linux-2.6/arch/arm/mach-omap2/board_xx.c中的static struct mtd_partition xx_nand_partitions[]结构体中有NandFlash的分区,其中用了宏定义MTDPART_OFS_APPEND,值是(-1),表示下一个存储部分。

3.       内核如何知道文件系统在哪?即如何改变文件系统的存储位置?(其实我知道)。


你可能感兴趣的:(omap3530启动过程)