一、组成
ZYNQ上面移植Linux操作系统包括四个部分,uboot,devicetree,kernel,ramdisk. 其中uboot类似于bios,负责对设备进行简单的初始化,devicetree以树的形式对zynq相连的硬件设备进行描述,kernel是加载的操作系统内核,ramdisk是操作系统启动之后挂载的文件系统。
二、启动过程
移植操作系统后zynq的启动过程如下,首先加载bootrom(zynq中自带,用户无法修改),然后执行fsbl(这个根据硬件在sdk中创建),然后执行uboot,uboot会将kernel、devicetree和ramdisk载入ddr,跳转到内核入口处执行,这样linux就启动了。
对bootrom、fsbl和uboot详细描述如下。
三、uboot设置
uboot可以从xilinx 官方github上面下载,地址是: 通常uboot不需要升级,目前使用的版本为xilinx 2015年底发布的版本2015.4.不过针对不同的模块uboot需要进行修改,主要修改下面几个地方。 1、参考时钟修改
地址位于arch\arm\cpu\armv7\zynq\clk.c 由于ZYNQ设计大多使用50M参考时钟,需要更改参考时钟 # define CONFIG_ZYNQ_PS_CLK_FREQ 33333333UL更改为 # define CONFIG_ZYNQ_PS_CLK_FREQ 50000000UL 2、串口配置修改
地址位于include\configs\zynq_zc70x.h 根据硬件串口情况进行配置 #define CONFIG_ZYNQ_SERIAL_UART1 使用串口1 #define CONFIG_ZYNQ_SERIAL_UART0 使用串口0 如果两个串口都启用,一起配置即可。 3、DDR配置修改
地址位于include\configs\zynq_zc70x.h 根据DDR实际大小地址修改配置参数 #define CONFIG_SYS_SDRAM_SIZE (1024 * 1024 * 1024) 1GB DDR #define CONFIG_SYS_SDRAM_SIZE (512 * 1024 * 1024) 512MB DDR 4、PHY地址配置
地址位于include\configs\zynq_zc70x.h 根据硬件PHY地址进行配置,通常硬件会将PHY地址设置为0 #define CONFIG_ZYNQ_GEM_PHY_ADDR0 0 如果硬件启用了两个网卡,则需要设置两个PHY的地址 #define CONFIG_ZYNQ_GEM0 #define CONFIG_ZYNQ_GEM_PHY_ADDR0 1
#define CONFIG_ZYNQ_GEM1 #define CONFIG_ZYNQ_GEM_PHY_ADDR1 18 5、启动方式配置
地址位于include\configs\zynq_common.h 如果使用QSPI flash方式启动,需要配置QSPI FLASH对应地址,如下。 "sf probe 0 0 0 && " \ "sf read 0x3000000 0x400000 ${kernel_size} && " \ "sf read 0x2A00000 0x900000 ${devicetree_size} && " \ "echo Copying ramdisk... && " \ "sf read 0x2000000 0x920000 ${ramdisk_size} && " \ "bootm 0x3000000 0x2000000 0x2A00000\0" \ 6、IP地址配置
地址位于include\configs\zynq_common.h #define CONFIG_IPADDR 192.168.100.12 //uboot启动时板子的IP地址 #define CONFIG_SERVERIP 192.168.100.6 //uboot启动时能访问的远程服务器地址,若采用TFTP加载,需要将本地电脑配置为该地址 7、启动延迟设置
地址位于include\configs\zynq_common.h #define CONFIG_BOOTDELAY 7 /* -1 to Disable autoboot */ Uboot默认延迟7s再从QSPI flash中加载操作系统,如果设置为-1表明禁止自动加载 8、初始化设置
地址位于net\eth.c 和 arch\arm\lib\board.c Uboot中需要对5396进行初始化,同时使用GPIO对PHY或NOR FLASH等进行复位,可以在eth.c中增加代码 void mygpio_init() { } 然后将Mygpio_init()加入到arch\arm\lib\board.c中 9、Uboot编译
修改完成后,可以使用下列命令编译产生uboot 进入u-boot文件夹 $ make distclean //文件夹清理 $ make zynq_zc70x_config // 载入配置,通常使用zynq_zc70x.h文件
$ make 编译完成后文件夹下会出现u-boot文件,将其修改为u-boot.elf
|