OMAP3530启动及参数配置

 拿到DevKit8000后,启动Linux,发现有些输出信息不对,起初还怀疑是不是CPU搞错了,或者板子给错了,但这种可能性还是很小的,所以就开始钻研他的启动代码了。

Texas Instruments X-Loader 1.41
Starting OS Bootloader...
U-Boot 1.3.3-svn (Feb 6 2010 - 16:29:12)
OMAP3530-GP rev 2, CPU-OPP2 L3-165MHz
OMAP3 DevKit8000 Board + LPDDR/NAND
DRAM: 256 MB
NAND: 256 MiB
Using default environment

In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0

NAND read: device 0 offset 0x280000, size 0x240000
2359296 bytes read: OK
## Booting kernel from Legacy Image at 80300000 ...
Image Name: Linux-2.6.28-rc9-omap1
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2165084 Bytes = 2.1 MB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux............................................................................................................................................
done, booting the kernel.
Linux version 2.6.28-rc9-omap1 (cyz@TIOP) (gcc version 4.2.1 (CodeSourcery Sourcery G++ Lite 2007q3-51)) #1 Wed Feb 24 15:49:35 CST 2010
CPU: ARMv7 Processor [411fc083] revision 3 (ARMv7), cr=10c5387f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: OMAP3 DevKit8000 Board
Memory policy: ECC disabled, Data cache writeback
OMAP3430 Unknown revision

实际上,我买的DevKit8000是基于OMAP3530开发的开发板,而默认安装的系统,从x-load、u-boot到linux kernel,最多都只支持到OMAP3430,fint,天漠搞的这东西,不得不说,糙的可以!

具体启动过程总结如下:(参考:http://hi.baidu.com/xiaojian009/blog/item/3addff154f84c80a4a90a753.html)

OMAP3530片内的bootrom->X-Load->u-boot->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加载地址并非是运行时的地址,通常在加载地址与运行地址不同,通过重定位代码实现。

u-boot:

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.       内核如何知道文件系统在哪?即如何改变文件系统的存储位置?

发表评论

电子邮件地址不会被公开。

Proudly powered by WordPress and Sweet Tech Theme