通过前面3节内容,我们知道了:
- Xilinx ZYNQ的内部结构
- PL端FPGA的开发过程
- ZYNQ启动过程及固化
那么ZYNQ包含CortexTM-A9核,那么它的ARM资源应用主要就落在嵌入式linux上。ZYNQ的嵌入式Linux开发流程是本节介绍的重点。
一、嵌入式linux开发三要点
嵌入式linux底层开发主要工作是:
-
bootloader
- 内核
- 文件系统
内核和文件系统都是编译好或制作好的文件,一般固化在flash上等待uboot加载或内核挂载。所以上电要确保运行的ARM端程序就是uboot。
u-boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:
1)第一阶段的功能
硬件设备初始化
加载 u-boot 第二阶段代码到 RAM 空间
设置好栈,跳转到第二阶段代码入口
2)第二阶段的功能
初始化本阶段使用的硬件设备
检测系统内存映射
将内核从 Flash 读读到 RAM 中
为内核设置启动参数
调用内核
二、ZYNQ开发重点
2.1 Boot.bin(FPGA+Bootloader)
这是一个过程,主要是完成FPGA端资源的设计,同时完成ARM bootloader的开发,这样保证了上电后FPGA功能被正常配置,且uboot可以引导起后期的内核。最终就是完成boot.bin的开发。
2.2 FPGA功能的具体设计
重点之一FPGA端资源的驱动及功能实现。完成后需要更新boot.bin。
2.3 ARM端内核驱动开发
重点之一就是完成外设的驱动。此部分不需要重新编译boot.bin,只需要覆盖新开发好的内核即可。
2.4 应用开发
完成FPGA功能设计后,主要就是完成ARM应用程序的设计以实现产品的开发。比如QT移植等。应用开发依赖于第3步的驱动及创建的设备节点。
三、总结
Xilinx为ZYNQ提供了很好的系统支持,比如uboot、内核代码等,所以ZYNQ开发的重点在于:
- FPGA逻辑资源的设计
- 定制ARM端内核驱动
- FPGA与ARM的协同工作