zynq开发学习记录:Linux与FreeRTOS AMP运行

  • Linux + FreeRTOS

1.创建FreeRTOS工程

  • 使用ps7_cortexa9_1创建FreeRTOS工程,示例如下

  • 修改main.c 去掉xil_printf相关的调用,根据FPGA工程师提供的寄存器地址和bit文件操作LED周期闪烁
  • 修改lscript.ld文件地址(不要和cpu0使用地址冲突)

  • 打开board support package setting界面,添加 -DUSE_AMP=1 宏

  • 打开board support package setting界面,去除stdin及stdout配置为none

  • 修改FreeRTOS  bsp工程中中的boot.s文件,注释地址映射部分(Vivado 2016无需此步骤)。如下图所示:

  • 编译生成FreeRTOS可执行文件

2.修改Linux相关文件

  • U-boot、Linux设备树修改
memory {

device_type = "memory";

reg = <0x0 0x30000000>;

};/*修改CPU0地址空间范围*/
  • Linux内核启动参数,修改设置为SMP,CPU个数为1

            bootargs "console=ttyPS0,115200 maxcpus=1 root=/dev/ram rw earlyprintk "

  • 编译u-boot、内核

3.创建fsbl工程

  • 在ps7_cortexa9_0上创建普通fsbl工程
  • 在main.c中,main函数前添加如下函数定义
#define sev() __asm__("sev")

#define CPU1STARTADR 0xfffffff0

void LoadCpu1(void)

{

#if 1



    *(volatile unsigned int *)0x2F000000 = 0x12345678;

    *(volatile unsigned int *)0x2F000010 = 0x87654321;

    *(volatile unsigned int *)0x3F000000 = 0x19890314;

    *(volatile unsigned int *)0x3F000010 = 0x20170427;

    fsbl_printf(DEBUG_GENERAL,"FSBL: DDR Test:%x,%x,%x,%x\n\r",*(volatile unsigned int *)0x2F000000,*(volatile unsigned int *)0x2F000010,*(volatile unsigned int *)0x3F000000,*(volatile unsigned int *)0x3F000010);



    fsbl_printf(DEBUG_GENERAL,"FSBL: writing startaddress for cpu1\n\r");

    Xil_Out32(CPU1STARTADR, 0x30000000);

    dmb(); //waits until write has finished



    fsbl_printf(DEBUG_GENERAL,"FSBL: sending the SEV to wake up CPU1\n\r");

    sev();



#endif

}
  • 在main函数中,如下位置添加函数调用

 

  /*

     * Load boot image

     */

    HandoffAddress = LoadBootImage();



    fsbl_printf(DEBUG_INFO,"Handoff Address: 0x%08lx\r\n",HandoffAddress);

    LoadCpu1();
  • 编译生成fsbl.elf
  • 创建BOOT.bin运行
    • 利用SDK创建BOOT.bin文件,文件顺序为fsbl.elf、zynq.bit(FPGA工程师提供)、u-boot.elf以及freeRtos.elf。
    • 将生成的BOOT.bin放进SD卡,启动模式修改为SD启动。

       上电后可以观察到:

             CPU0 终端串口上 Linux启动正常

             CPU1 测试LED一直在闪烁

  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
文档共60页。主要向初学者提供了Zynq开发的技术方向,针对不同应用给出了基本的参考文档;同时对Zynq双核AMP加载方式做了详细描述,对Zynq的fsbl启动流程做了简单介绍。章节如下: Zynq User Guide 1 介绍 4 2 快速上手指南 4 3 多核开发教程 4 3.1 AMP开发说明 6 3.1.1 快速生成amp工程 6 3.1.2 Generating Boot File 8 3.1.3 烧写程序 9 3.1.4 启动 10 3.1.5 调试 10 3.1.6 总结 11 3.2 SMP开发说明 11 4 ZC706启动代码分析 11 4.1 启动代码 12 4.2 FSBL流程(FOR AMP) 13 4.3 CPU0启动CPU1流程 14 5 程序在线烧写方案及流程 14 5.1 程序烧写需求 14 5.2 提出该需求的原因 14 5.3 程序烧写方案 14 5.3.1 BOOT.BIN组成 14 5.3.2 BOOT.BIN生成方法 15 5.4 FSBL.BIN和APP.BIN等的生成 15 5.5 制作*BIN及烧写的具体步骤 15 5.5.1 制作*bin流程 15 5.5.2 BOOT.bin制作过程 15 5.5.3 FSBL.bin和APP.bin等的生成过程 22 5.6 烧写BOOT.BIN步骤 26 5.6.1 通过SDK工具烧写步骤 26 5.6.2 通过上位机烧写软件的烧写步骤 29 5.6.3 通过串口调试助手烧写步骤 29 6 Zynq Qspi控制器 30 6.1 基本特性 30 6.2 I/O接口 31 6.3 QSPI控制器模式 33 6.3.1 I/O模式 33 6.3.2 线性地址(linear address)模式 33 6.3.3 传统(legacy)SPI模式 34 6.4 QSPI 例程 34 6.5 QSPI控制器支持访问32MB方法 35 6.5.1 Bank地址寄存器(Bank address register) 35 6.5.2 扩展地址模式(Extended address mode) 35 6.5.3 使用新写命令(New commands) 35 6.6 QSPI FLASH选择 35 6.7 作为BOOT器件考虑 35 7 µC/OS系统启动指南 36 7.1 INTRODUCTION 36 7.1.1 Software Requirements 36 7.1.2 Hardware Requirements 36 7.2 HARDWARE DESIGN 37 7.2.1 Step 1. Invoke the Vivado IDE and Create a project 37 7.2.2 Step 2. Create an IP Integrator Design 39 7.2.3 Step 3. Add and setup the Zynq processor system IP block 39 7.2.4 Step 4. Customize the Zynq block for our design 41 7.2.5 Step 5. Add the soft peripherals 45 7.2.6 Step 6. Generate HDL Design Files 47 7.2.7 Step 7. Synthesis, Implement and Generate Bitstream 48 7.3 SOFTWARE DESIGN 49 7.3.1 Step 1. Installation of the µC/OS Repository 49 7.3.2 Step 2. Generate the µC/OS BSP 50 7.3.3 Step 3. Build and Debug the Demonstration Project 54 7.3.4 Step 4. Program the AXI Timer 0 with the ucos_axitimer Driver 55 7.3.5 Step 5. Program the AXI Timer 1 with the Xilinx tmrctr Driver 58 7.4 CONCLUSION 59 8 Linux系统启动指南 59
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值