这周翻了翻u-boot-Xilinx的源码,结合着网上看的对cortexA8、A9的u-boot的源码分析,再结合自己在Xilinx上下的u-boot源码,试着对u-boot的启动流程进行一下分析,也给自己理一下思路。
u-boot源码的目录结构:
第一阶段:
(1)start.S(arch/arm/cpu/armv7/start.S)
在flash中执行的引导代码,也就是bootloader中的stage1,负责初始化硬件环境,把u-boot从flash加载到RAM中去,对CPU的一个初始化,然后跳到board/xilinx/zynq/board.c中去执行。
第二阶段:
(2)board.c(board/xilinx/zynq/board.c)
选择板卡芯片的型号,启动fpga,选择启动方式(QSPI、SD、JTAG、NAND、NOR)、读取rom、ram。
(3)cmd/bootm.c和bootmenu.c
(4)然后在include/config/zynq_common.h中定义了Z7系列的一些硬件参数配置,比较重要的一个默认启动环境配置:
/* Default environment */
#ifndef CONFIG_EXTRA_ENV_SETTINGS
#define CONFIG_EXTRA_ENV_SETTINGS \
"ethaddr=00:0a:35:00:01:22\0" \
"kernel_image=uImage\0" \
"kernel_load_address=0x2080000\0" \
"ramdisk_image=uramdisk.image.gz\0" \
"ramdisk_load_address=0x4000000\0" \
"devicetree_image=devicetree.dtb\0" \
"devicetree_load_address=0x2000000\0" \
"bitstream_image=system.bit.bin\0" \
"boot_image=BOOT.bin\0" \
"loadbit_addr=0x100000\0" \
"loadbootenv_addr=0x2000000\0"