十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Zephyr 中 Gaisler generic_leon3 板卡支持详解:LEON3(SPARC V8)平台上构建、硬件调试与 TSIM3 仿真全流程

Zephyr 中 Gaisler generic_leon3 板卡支持详解:LEON3(SPARC V8)平台上构建、硬件调试与 TSIM3 仿真全流程 Zephyr 中 Gaisler generic_leon3 板卡支持详解LEON3SPARC V8平台上构建、硬件调试与 TSIM3 仿真全流程【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr本篇围绕 Zephyr 仓库中的 generic_leon3 板卡文档 展开系统讲解该“通用 LEON3”板型适配层的定位与适用场景它面向 GRLIBGaisler 公司GPL 发行版中的 LEON3 处理器模板设计并可与 TSIM3 LEON3 模拟器配合使用。读完本文你将掌握为generic_leon3构建应用的完整流程、设备树与链接脚本定义的内存布局、通过 GRMON3 调试监视器在真实 FPGA 硬件上加载运行 Zephyr 的命令行操作以及使用tsim-leon3进行纯软件仿真的方法并能对照仓库源码理解板级 Kconfig、设备树与模拟器配置之间的对应关系。一、板卡定位一个“通用模板”而非具体硬件根据 boards/gaisler/generic_leon3/doc/index.rst 的 Overview 部分generic_leon3这一板卡配置的设计目标是配合 GRLIB GPL 发行版中可获得的 LEON3 处理器模板设计工作同时也可用于 TSIM3 LEON3 模拟器的评估版本。也就是说它不绑定某一块具体的商业开发板而是作为“LEON3 通用系统”的板型抽象存在。文档的 Hardware 小节进一步说明该板卡配置兼容大多数 GRLIB LEON3 FPGA 模板设计例如Digilent Arty A7Terasic DE0-NanoMicrosemi M2GL-EVAL-KIT。这些 FPGA 开发板通过下载 GRLIB 提供的 LEON3 模板工程即可获得一个带 GRLIB 标准 IPAPB UART、IRQMP 中断控制器、模块化定时器等的 LEON3 SoC 实例而generic_leon3板型正是为这类“同构但不同 FPGA 载体”的系统做统一适配。从仓库源码结构看板级元数据与这一抽象定位一致boards/gaisler/generic_leon3/board.yml 声明板卡name: generic_leon3、完整名称Generic LEON3、厂商gaisler并关联唯一 SoCleon3boards/gaisler/generic_leon3/generic_leon3.yaml 给出了 CI 与工具链视角的板卡画像架构sparc、RAM 4096 KiB、Flash 2048 KiB、工具链zephyr、支持netif网络设备接口并在测试中忽略net与bluetooth标签其中还声明了simulation: tsim、exec: tsim-leon3说明该板卡的官方仿真入口就是tsim-leon3可执行程序。二、硬件抽象层设备树与 SoC 描述generic_leon3的设备树顶层定义在 boards/gaisler/generic_leon3/generic_leon3.dts 中其关键内容如下#include gaisler/leon3soc.dtsi / { model Generic LEON3 system; compatible gaisler,generic-leon3; chosen { zephyr,console uart0; zephyr,shell-uart uart0; zephyr,sram ram0; }; }; ram0 { reg 0x40000000 0x00400000; }; uart0 { status okay; };可以看到板级 DTS 做了三件事通过#include gaisler/leon3soc.dtsi引入 SoC 公共描述在chosen节点中指定 Zephyr 控制台与 shell 均使用uart0SRAM 使用ram0将ram0实际大小改写为0x40000000起、4 MiB0x00400000并把默认禁用的uart0置为okay。所引用的 SoC 公共设备树位于 dts/sparc/gaisler/leon3soc.dtsi它定义了 LEON3 通用 SoC 的硬件骨架cpu0: cpu0compatible gaisler,leon3的单核处理器节点ram0: memory40000000mmio-sram内存节点SoC 层面默认声明 1 GiB 窗口由板级 DTS 按实际 FPGA 配置缩小为 4 MiBsoc总线compatible gaisler,leon3-soc, simple-bus下的三个核心外设irqmp080000200gaisler,irqmp多处理器中断控制器作为整个 SoC 的interrupt-parent其自身异常中断挂接eirq 0timer0: gptimer80000300gaisler,gptimer通用定时器接中断号 8uart0: apbuart80000100gaisler,apbuartAPB 通用 UART接中断号 2SoC 层面status disabled由板级 DTS 启用。这套“公共 SoC 描述 板级覆盖”的分层写法使得同一份leon3soc.dtsi可以被所有 GRLIB LEON3 模板设计复用板级只需修改内存大小、时钟与外设开关。三、链接布局与内存模型LEON3 的链接脚本位于 soc/gaisler/leon3/linker.ld它揭示了该平台的内存模型MEMORY { rom (rx) : ORIGIN 0x00000000, LENGTH 512M RAM (rwx) : ORIGIN RAM_ADDR, LENGTH RAM_SIZE IDT_LIST (wx) : ORIGIN 0xFFFFF7FF, LENGTH 2K } REGION_ALIAS(REGION_TEXT, RAM); REGION_ALIAS(REGION_RODATA, RAM); ... #define ROMABLE_REGION RAM #define RAMABLE_REGION RAM其中RAM_ADDR/RAM_SIZE直接取自设备树 chosen 节点DT_CHOSEN_SRAM_ADDR/DT_CHOSEN_SRAM_SIZE即上文的0x40000000与 4 MiB。这与板卡 YAML 中ram: 4096KiB的声明严格吻合。值得注意的是代码段最终落在 RAM 中执行REGION_TEXT指向 RAM且ROMABLE_REGION也是 RAM这与 GRMON 加载输出中text段位于0x40000000、入口点Entry point 0x40000000的现象一致。此外IDT_LIST保留在0xFFFFF7FF附近的 2 KiB 区域对应 SPARC 架构的异常/中断入口表脚本末尾通过#include zephyr/arch/sparc/linker.ld引入 SPARC 架构通用的分区定义。四、板级 Kconfig时钟、架构特性与默认配置generic_leon3的 Kconfig 体系由三个文件构成boards/gaisler/generic_leon3/Kconfig.generic_leon3定义BOARD_GENERIC_LEON3并select SOC_LEON3把板卡与 soc/gaisler/leon3 下的 SoC 驱动代码soc.h、idle.c等关联起来boards/gaisler/generic_leon3/Kconfig.defconfig给出板级 Kconfig 默认值if BOARD_GENERIC_LEON3 config SPARC_CASA default n config SYS_CLOCK_HW_CYCLES_PER_SEC default 50000000 config UART_INTERRUPT_DRIVEN default y endif从源码结构看这三项默认值含义明确SYS_CLOCK_HW_CYCLES_PER_SEC设定系统时钟为 50 MHz与文档中 GRMON 输出的Detected frequency: 50.0 MHz及 TSIM3 的system frequency: 50.000 MHz对应UART_INTERRUPT_DRIVEN默认开启使串口控制台走中断驱动模式而非轮询SPARC_CASA默认关闭即默认不启用 LEON3 的 CASA 协处理接口。boards/gaisler/generic_leon3/generic_leon3_defconfig板级 defconfig开启CONFIG_CONSOLE、CONFIG_SERIAL、CONFIG_UART_CONSOLE与CONFIG_EXTRA_EXCEPTION_INFO保证构建出的镜像默认具备 UART 控制台并输出更丰富的异常诊断信息——这对 FPGA 模板设计这类“无 IDE、靠串口排障”的场景尤为实用。五、构建设置 BOARD 变量即可文档 Building 小节说明generic_leon3的应用构建方式与 Zephyr 通用构建流程一致只需把BOARD变量设置为generic_leon3。以仓库内 hello_world 示例为例典型命令为$ west build -b generic_leon3 samples/hello_world构建完成后会在build/目录生成可调试符号的zephyr.elf后续 GRMON 与 TSIM3 加载的都是这个文件。由于板卡 YAML 声明的工具链为zephyr即 Zephyr SDK 中的 SPARC 交叉工具链前提是本地安装了包含 SPARC 目标的 Zephyr SDK。generic_leon3还属于仿真板boards/gaisler/generic_leon3/board.cmake 声明了模拟器平台set(SUPPORTED_EMU_PLATFORMS tsim) find_program(TSIM tsim-leon3) set(TSIM_SYS -uart_fs 32)即支持west build -b generic_leon3/tstm3风格的仿真构建find_program(TSIM tsim-leon3)说明模拟器入口必须为 PATH 中的tsim-leon3可执行程序TSIM_SYS -uart_fs 32则会把 APB UART 的波特率基准固定为 32对应 50 MHz 系统时钟下 115200 波特率的经典 GRLIB 分频配置保证仿真串口输出速率正确。六、硬件运行GRMON3 调试监视器加载与启动文档 “Running on hardware” 小节给出了在真实 FPGA 硬件上运行的完整命令序列示例使用的是 Terasic DE2-115 Cyclone IV FPGA 板。第一步是通过grmon -altjtag -u连接 GRMON3 调试监视器-altjtag指定使用 ALT JTAG 通道连接成功后会打印出完整的 JTAG 链与组件清单$ grmon -altjtag -u GRMON debug monitor v3.2.8 eval version Copyright (C) 2020 Cobham Gaisler - All rights reserved. For latest updates, go to http://www.gaisler.com/ Comments or bug-reports to supportgaisler.com JTAG chain (1): EP3C120/EP4CE115 GRLIB build version: 4250 Detected frequency: 50.0 MHz Component Vendor LEON3 SPARC V8 Processor Cobham Gaisler AHB Debug UART Cobham Gaisler JTAG Debug Link Cobham Gaisler GR Ethernet MAC Cobham Gaisler GRDMAC DMA Controller Cobham Gaisler LEON2 Memory Controller European Space Agency AHB/APB Bridge Cobham Gaisler LEON3 Debug Support Unit Cobham Gaisler Generic UART Cobham Gaisler Multi-processor Interrupt Ctrl. Cobham Gaisler Modular Timer Unit Cobham Gaisler General Purpose I/O port Cobham Gaisler SPI Controller Cobham Gaisler AHB Status Register Cobham Gaisler Use command info sys to print a detailed report of attached cores grmon3 load zephyr/zephyr.elf 40000000 text 16.2kB / 16.2kB [] 100% 400040A8 initlevel 40B [] 100% 400040D0 rodata 484B [] 100% 400042B4 datas 20B [] 100% 400042C8 sw_isr_table 256B [] 100% 400043C8 devices 36B [] 100% Total size: 16.98kB (1.91Mbit/s) Entry point 0x40000000 Image zephyr/zephyr.elf loaded grmon3 run *** Booting Zephyr OS build zephyr-v2.4.0-30-ga124c31ec4cf *** Hello World! generic_leon3这段输出值得注意的几个事实注意其中Booting Zephyr OS build zephyr-v2.4.0...是文档撰写时的历史示例实际版本号以你当前构建的仓库为准检测到的 JTAG 链上依次是 LEON3 处理器、AHB Debug UART、JTAG 调试链路、GR 以太网 MAC 等 GRLIB 组件其中Multi-processor Interrupt Ctrl.、Modular Timer Unit、Generic UART正是leon3soc.dtsi里描述的irqmp、gptimer与apbuart设备说明设备树与真实硬件一一对应load命令分text/rodata/sw_isr_table等节加载入口点0x40000000与 linker.ld 中 RAM 起始地址、以及 DTS 中ram0地址完全一致run后处理器从入口点启动Zephyr 通过uart0APB UART经 JTAG 调试通道或物理串口回传打印启动横幅与 hello 输出。整个调试链路的分工是GRMON3 负责 JTAG 连接、内存写入load与单步/断点调试runZephyr 的串口控制台负责运行期输出。对 GRLIB 模板设计而言这是“无烧录器、无 flash 工具链”环境下最直接的部署方式。七、TSIM3 仿真运行同一镜像的纯软件验证文档 “Running in simulation” 小节指出同一个应用二进制可以用 TSIM3 LEON3 模拟器进行仿真。完整交互示例如下$ tsim-leon3 TSIM3 LEON3 SPARC simulator, version 3.0.2 (evaluation version) TSIM3 LEON3 SPARC simulator, version 3.0.2 (evaluation version) This software may only be used with a valid license. For latest updates, go to https://www.gaisler.com/ Comments or bug-reports to supportgaisler.com Number of CPUs: 2 system frequency: 50.000 MHz icache: 1 * 4 KiB, 16 bytes/line (4 KiB total) dcache: 1 * 4 KiB, 16 bytes/line (4 KiB total) Allocated 4096 KiB SRAM memory, in 1 bank at 0x40000000 Allocated 32 MiB SDRAM memory, in 1 bank at 0x60000000 Allocated 2048 KiB ROM memory at 0x00000000 tsim load zephyr/zephyr.elf section: text, addr: 0x40000000, size 16552 bytes section: initlevel, addr: 0x400040a8, size 40 bytes section: rodata, addr: 0x400040d0, size 484 bytes section: datas, addr: 0x400042b4, size 20 bytes section: sw_isr_table, addr: 0x400042c8, size 256 bytes section: devices, addr: 0x400043c8, size 36 bytes Read 436 symbols tsim run Initializing and starting from 0x40000000 *** Booting Zephyr OS build zephyr-v2.4.0-30-ga124c31ec4cf *** Hello World! generic_leon3仿真器打印的内存配置与仓库描述高度自洽4096 KiB SRAM 位于0x40000000对应generic_leon3.yaml的ram: 4096与 DTS 的ram02048 KiB ROM 位于0x00000000对应flash: 2048与 linker.ld 中rom (rx)分区系统频率 50 MHz 对应Kconfig.defconfig的 50000000 Hz 默认时钟。这也解释了为什么硬件与仿真可以共用一个zephyr.elfgeneric_leon3的设备树、时钟与内存布局就是按“GRLIB 模板设计/TSIM3 默认环境”这一公共基准来定义的。使用 TSIM3 时的两点注意事项评估版本evaluation version存在功能限制生产验证需要有效授权请以 Gaisler 官方产品说明为准结合 board.cmake 中的TSIM_SYS -uart_fs 32通过 west/west build的仿真平台机制启动时该参数会自动附加保证 APB UART 波特率正确若手动运行tsim-leon3直接加载 ELF则按模拟器默认配置即可复现上述流程。八、小结与延伸阅读generic_leon3是 Zephyr 对 SPARC V8 LEON3 架构的通用板型适配以 GRLIB 模板设计与 TSIM3 模拟器为公共目标通过 设备树、SoC 描述、链接脚本 与 板级 Kconfig 共同定义了 50 MHz 时钟、4 MiB 0x40000000SRAM、APB UART 控制台这一套标准硬件假设。核心工作流可以概括为三步构建west build -b generic_leon3 应用目录硬件grmon -altjtag -u→load zephyr/zephyr.elf→run仿真tsim-leon3→load zephyr/zephyr.elf→run。如欲继续深入建议按以下路径阅读仓库源码板卡全部元文件boards/gaisler/generic_leon3含board.yml、board.cmake、generic_leon3.dts、defconfigLEON3 SoC 驱动与架构支持soc/gaisler/leon3soc.h、idle.c、linker.ld及 SPARC 架构层 dts/sparc/gaisler/leon3soc.dtsi同厂商另一颗 LEON 系列 SoCGR716的对照实现soc/gaisler/gr716a可用于理解 Gaisler 家族在 Zephyr 中的适配模式。文档 References 一节提及的三个外部工具——GRLIB IP LibraryGPL 版、TSIM3 LEON3 模拟器、GRMON3 调试监视器——均为 GaislerCobham Gaisler公司产品获取与授权事宜请查阅其官方渠道说明。【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表