#1. QorIQ P系列处理器简介
QorIQ P系列处理器基于Power Architecture e500系列内核。其中P10xx系列、P2010和P2020基于e500v2内核,P204x、P30xx和P40xx基于e500mc内核,P50xx基于e5500内核。
其中,P2系列专为网络、电信、军工等各种市场提供高品质部件。P2010包含一个1.2GHz内核,512KB二级高速缓存等等。
#2. mkimage工具介绍
mkimage工具可以用来制作不压缩或者压缩的多种可启动镜像文件。
mkimage在制作镜像文件的时候,是在原来的可执行镜像文件的前面加上一个64字节的头,记录参数所指定的信息,这样uboot才能识别这个镜像是针对哪个CPU体系结构的,哪个OS的,哪种类型,加载内存中的哪个位置,入口点在内存的哪个位置以及镜像名是什么等等。
mkimage工具用法如下:
-A:设定架构类型;
-O:设定操作系统类型;
-T:镜像类型;
-a:指定镜像在内存中的加载地址;
-e:指定镜像运行的入口点地址;
-C:指定压缩方式;
-n:指定镜像名;
-d:指定制作镜像的源文件。
P2010的BSP源码中,使用命令$(TOOLCHAIN_PREFIX)mkimage -A PowerPC -O linux -a 0x1000000 -e 0x1000000 -d $(OUTDIR)/bspp2010.bin -T kernel -C none -n "SylixOS" $(OUTDIR)/uImage
来制作镜像文件uImage。
指定架构类型为PowerPC,操作系统类型为linux,内存加载地址为0x1000000,镜像运行地址为0x1000000,无压缩方式,镜像类型为kernel,镜像名为SylixOS,生成的文件名为uImage。
#3. uboot使用bootm引导内核
由于P2010使用了Linux的fdt,所以需要使用bootm命令加载kernel和fdt。
P2010使用命令tftp 0x2000000 uImage;bootm 0x2000000 - 0xefe80000引导内核。通过tftp加载mkimage命令制作的镜像文件uImage到内存0x2000000地址处,然后通过bootm命令启动系统。其中0x2000000为tftp下载到内存中的镜像的地址,-表示不读取ramdisk,0xefe80000为fdt所在的内存地址。
bootm命令解析镜像文件格式,按Linux方式启动系统,获取到fdt内存地址。随后将其获取的fdt地址传入SylixOS。
#4. 启动SylixOS
文件startup.s中,在SylixOS进入halPrimaryCpuMain函数之前,通过从FDT_REGISTER寄存器暂存dts内存地址,如图 4.1所示。
图 4.1 暂存FDT
然后将暂存的dts内存地址传入启动函数,即halPrimaryCpuMain函数中,如图 4.2所示,由此完成了uboot到SylixOS的fdt参数传递。
图 4.2 读取FDT
halPrimaryCpuMain函数根据获取到的fdt地址,获取设备信息,完成设备相关初始化工作。