基于ZynqDesign.sdk建立ucosii工程和fsbl工程,并融合生成BOOT.bin文件
一、建立ucosii_test工程
1、打开xillinx SDK软件,File/Switch Workspace打开对应的ZynqDesign.sdk;
2、打开Xilix Tools/Respositories,添加ucosii内核;
3、新建工程 工程名为ucosii_test
打开 File/New/Application Project,在弹出的对话框中填写对应的内容,需要注意的是,OS Platform处要点开选择ucos操作系统。zynq7010有两个CPU内核,我们ucosii使用的是内核0。选择next就可以选择一个模板例程,我们可以选择ucosii-helloworld。
也可以直接跳过使用finish。
3.1 在ucos工程bsp包下,选中system.mss后点击右键,点击board support package settings,进入到板级支持库设置,选中
ps7_cortexa9_0,在如下图所示位置添加-g -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard。
选中ucos,并作出如下图所示位置的更改
配置ucos 程序的ld 地址空间分配,在ld 文件中配置ARM0 运行的地址空间,如下图,此地址空间与ARM1 将要运行的地址空间不能冲突。
编译运行成功后会生成 .elf文件(ucosii_test.elf文件)
二、新建fsbl工程,为生成uboot文件创造条件:
注意在新建fsbl工程中,OS Platform选择standlone裸机,next选项之后,选择fsbl工程即可。
1、 在fsbl的bsp包下,选中system.mss后点击右键,点击board support package settings,进入到板级支持库设置, 中添加-DUSE_AMP 编译选项。
2、修改fsbl main.c,在fsbl 配置RAM1 核的起始运行地址。如下图:
代码说明:
#define CPU1_CATCH 0xfffffff0 :用来唤醒cpu1 运行地址的指针地址
#define APP_CPU1_ADDR 0x04000000 :cpu1 的DDR 起始地址在0x04000000 开始
0x04000000:u-boot.elf 的起始地址(Entry point address),通过readelf u-boot 查看,定
义在zynq-common.h 中
Xil_Out32(CPU1_CATCH, APP_CPU1_ADDR):向CPU1_CATCH 写入APP_CPU1_ADDR
#define sev() __asm__("sev"):定义一个宏,用来启动核1
三、制作uboot.bin
在fsbl工程界面,选中fsbl包的情况下,选中Create Boot Image
进入如下界面,需要添加ucosii_test.elf(这个是在xilinx SDK平台下生成的),和linux平台下的u-boot.elf,共同融合后才生成BOOT.bin,就可以烧写到板子上啦。
顺序如下,点击Create Image即可生成BOOT.bin文件