ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

QEMU 中的 Kyoto Microcomputer KZM-ARM11-01 板卡模拟(`kzm`):基于 i.MX31 SoC 的 ARM1136 评估板实战指南

2026/9/23 22:46:07 拓冰建站 浏览量
QEMU 中的 Kyoto Microcomputer KZM-ARM11-01 板卡模拟(`kzm`):基于 i.MX31 SoC 的 ARM1136 评估板实战指南 虚拟化硬件仿真【免费下载链接】qemuOfficial QEMU mirror. Please see https://www.qemu.org/contribute/ for how to submit changes to QEMU. Pull Requests are disabled. Please only use release tarballs from the QEMU website.项目地址https://gitcode.com/gh_mirrors/qe/qemu点击查看免费下载本文聚焦 QEMU 源码树中kzm板卡模拟器docs/system/arm/kzm.rst对应的 kzm.c全面介绍其模拟的 Kyoto Microcomputer KZM-ARM11-01 评估板、NXP原 Freescalei.MX31 SoC 的片上外设、完整的内存映射以及如何在 QEMU 中启动内核、配置串口与网络。读完本文你将掌握kzm板卡的能力边界、外设地址与中断号分布并能依据仓库源码定位每一处模拟实现的证据。板卡概述一块基于 i.MX31 的 ARM1136 评估板kzm板卡模拟的是日本京都微型计算机公司Kyoto Microcomputer推出的KZM-ARM11-01 评估板。该评估板的核心是一颗NXP i.MX31 SoC源码注释中写作 Freescale i.MX31片上集成的 CPU 为ARM1136内核ARM11 家族、ARMv6 指令集架构。QEMU 中该机器的注册信息位于 hw/arm/kzm.cstatic void kzm_machine_init(MachineClass *mc) { mc-desc ARM KZM Emulation Baseboard (ARM1136); mc-init kzm_init; mc-ignore_memory_transaction_failures true; mc-default_ram_id kzm.ram; } DEFINE_MACHINE(kzm, kzm_machine_init)由此可以确认在 QEMU 命令行中该机器名为kzm用法形如qemu-system-arm -M kzm ...。机器描述字符串为 ARM KZM Emulation Baseboard (ARM1136)默认 RAM 区域 ID 为kzm.ramignore_memory_transaction_failures true表示对未映射地址的访问失败会被忽略而不是触发异常这与下方内存映射中大量 IGNORED 区域的设计一致。从源码结构看整个板卡由两层构成SoC 层TYPE_FSL_IMX31fsl-imx31实现在 hw/arm/fsl-imx31.c提供 CPU 与全部片上外设板卡层IMX31KZM结构体hw/arm/kzm.c内嵌FslIMX31State soc负责挂载 SDRAM、FPGA 串口、LAN9118 网卡并加载内核。内存映射哪些被模拟、哪些被忽略原文档只列出了模拟设备清单未给出内存布局。QEMU 源码在 hw/arm/kzm.c 中注释了完整的 KZM 基板内存映射逐条整理如下地址均为物理地址地址范围用途QEMU 处理0x00000000–0x7fffffffi.MX31 SoC 内部资源ROM、IRAM、外设等由 SoC 模拟0x80000000–0x8fffffffSDRAMSDRAM0EMULATED0x90000000–0x9fffffffSDRAMSDRAM1EMULATED0xa0000000–0xafffffffNOR FlashIGNORED0xb0000000–0xb3ffffff不可用IGNORED0xb4000000–0xb4000fff8-bit 自由空间IGNORED0xb4001000–0xb400100f板级控制寄存器含0xb4001003DIP 开关IGNORED0xb4001010–0xb400101f7 段 LEDIGNORED0xb4001020–0xb400102fLEDIGNORED0xb4001030–0xb400103fLEDIGNORED0xb4001040–0xb400104fFPGA 内 UART触摸屏串口EMULATED0xb4001050–0xb400105fFPGA 内 UARTEMULATED0xb4001060–0xb40fffffFPGA 其余部分IGNORED0xb6000000–0xb61fffffLAN 控制器LAN9118EMULATED0xb6200000–0xb62fffffFPGA NAND 控制器IGNORED0xb6300000–0xb7ffffff空闲IGNORED0xb8000000–0xb8004fff内存控制器寄存器IGNORED0xc0000000–0xc3ffffffPCMCIA / CompactFlashIGNORED0xc4000000–0xffffffff保留IGNORED也就是说QEMU 只精确模拟了 SDRAM、两块 FPGA 串口、LAN9118 以太网控制器以及整个 i.MX31 SoC评估板上的 Flash、板级控制/LED 等“真实硬件寄存器”均被忽略这正好呼应了机器类中ignore_memory_transaction_failures标志的用途——访客访问这些空洞区域不会导致模拟器报错。上述宏在 include/hw/arm/fsl-imx31.h 中有对应定义例如FSL_IMX31_SDRAM0_ADDR 0x80000000、FSL_IMX31_CS4_ADDR 0xb4000000、FSL_IMX31_CS5_ADDR 0xb6000000板卡代码中KZM_FPGA_ADDR取CS4 0x1040KZM_LAN9118_ADDR直接等于CS5基址。i.MX31 SoC 与外设清单原文档列出的模拟设备UARTs、LAN9118 以太网、AVIC、CCM、GPT、EPIT 定时器、I2C、GPIO 控制器、看门狗在 hw/arm/fsl-imx31.c 的fsl_imx31_init()中逐一实例化1 个ARM1136 CPUARM_CPU_TYPE_NAME(arm1136)1 个AVICTYPE_IMX_AVIC——i.MX31 向量中断控制器负责汇总片上外设中断并接到 CPU 的 IRQ/FIQ1 个CCMTYPE_IMX31_CCM——时钟控制模块为 GPT/EPIT 等提供时钟源代码中s-gpt.ccm、s-epit[i].ccm均引用 CCM2 个UARTTYPE_IMX_SERIAL1 个GPTTYPE_IMX31_GPT——通用定时器2 个EPITTYPE_IMX_EPIT——增强周期中断定时器3 个I2CTYPE_IMX_I2C3 个GPIOTYPE_IMX_GPIO且显式关闭了has-edge-sel属性fsl-imx31.c1 个看门狗TYPE_IMX2_WDT。此外SoC 内部还模拟了 16 KB 安全启动 ROMimx31.secure_rom地址0x00000000、16 KB 掩膜 ROMimx31.rom地址0x00404000以及 16 KB 内部 SRAMimx31.iram地址0x1fffc000并在0x10000000处映射了覆盖 256 MB–16 KB 的别名区间imx31.iram_alias见 fsl-imx31.c。片上外设地址与中断号速查表依据 include/hw/arm/fsl-imx31.h 与 fsl-imx31.c 中的serial_table/epit_table/i2c_table/gpio_table整理出 i.MX31 模拟外设的 MMIO 基址与 AVIC 中断号外设基地址0x…中断号备注AVIC68000000—中断控制器本身CCM53F80000—时钟控制模块UART1 / UART243F90000/43F9400045 / 32SoC 串口GPT53F9000029通用定时器EPIT1 / EPIT253F94000/53F9800028 / 27增强周期中断定时器I2C1 / I2C2 / I2C343F80000/43F98000/43F8400010 / 4 / 3GPIO1 / GPIO2 / GPIO353FCC000/53FD0000/53FA400052 / 51 / 56看门狗53FDC000—IMX2 看门狗SoC 的 MMIO 映射与中断连接均在fsl_imx31_realize()中完成例如 AVIC 经sysbus_mmio_map映射到FSL_IMX31_AVIC_ADDR并把输出中断连到 CPU 的 IRQ索引 0与 FIQ索引 1每个外设的中断脚则接到 AVIC 的对应 GPIO 输入。板卡初始化逻辑与内存限制kzm_init()hw/arm/kzm.c的执行顺序值得关注实例化 SoCobject_initialize_child(..., TYPE_FSL_IMX31)后qdev_realize完成所有片上外设的创建与映射RAM 容量校验machine-ram_size若超过FSL_IMX31_SDRAM0_SIZE FSL_IMX31_SDRAM1_SIZE即 256 MiB 256 MiB 512 MiB会输出错误并退出RAM size more than %s is not supported。因此-m参数上限为 512 MiBSDRAM 与别名映射主 RAM 挂在0x80000000若ram_size不足 512 MiB代码会用memory_region_init_alias创建ram.alias把同一份 RAM 续接到 SDRAM1 区域0x90000000之后的剩余地址0x90000000 size保证访客视角下两个 SDRAM 片选区间连续且都有存储体网卡通过qemu_find_nic_info(lan9118, true, NULL)检测用户是否配置了 NIC若配置则在KZM_LAN9118_ADDR0xb6000000实例化 LAN9118并将其中断接到AVIC 的 52 号输入即 GPIO1 中断线qdev_get_gpio_in(DEVICE(s-soc.avic), 52)FPGA 串口触摸屏若指定了第 3 个串口serial_hd(2)非空则在KZM_FPGA_ADDR 0x10即0xb4001050以14745600 Hz波特率时钟创建serial_mm_init中断同样接到 AVIC 52 号。也就是说第三个串口被板卡用作 FPGA 上的触摸屏/辅助 UART内核加载bootinfo.loader_start 0x80000000SDRAM0 基址、bootinfo.board_id 1722旧式 ARM Linux ATAG 引导协议使用的机器 ID、bootinfo.ram_size machine-ram_size最后在非 qtest 环境下调用arm_load_kernel加载-kernel指定的内核镜像。启动内核与使用建议kzm属于传统arm_load_kernel引导模型非 QEMU 固件引导因此典型用法是直接提供 Linux 内核镜像qemu-system-arm -M kzm -m 256M \ -kernel zImage \ -nographic实用要点串口分配SoC 的 UART1/UART2 对应-serial的第 1、2 个串口第 3 个串口-serial第 3 项serial_hd(2)会作为 FPGA 触摸屏 UART 被实例化。-nographic或-serial stdio即可把 UART1 接到终端内存上限-m不得超过 512 MiB否则板卡代码会直接报错退出网络配置 NIC 后板卡自动挂载 LAN9118对应-nic系列选项例如-nic user或-netdev user,idn1 -device lan9118,netdevn1无需手动指定设备模型LAN9118 中断接到 AVIC 52启动协议board_id 1722用于旧式 ATAG 引导若内核为现代设备树DTB引导可通过-dtb提供设备树需配合可识别 KZM 布局的 DTS。源码导读与进一步探索板卡主体与内存映射注释hw/arm/kzm.ci.MX31 SoC 设备模型与 realize 流程hw/arm/fsl-imx31.c地址、大小与中断号宏定义include/hw/arm/fsl-imx31.h文档原始定义docs/system/arm/kzm.rst并收录于 docs/system/target-arm.rst 的 ARM 平台索引中同类参考基于 i.MX25 SoC 的 docs/system/arm/imx25-pdk.rst 与 hw/arm/imx25_pdk.c 展示了同一套FslIMX*SoC 封装风格在不同板卡上的复用整体来看kzm是 QEMU ARM 平台上结构清晰、外设适中的评估板模拟特别适合作为研究 i.MX31 SoC 设备模型、旧式 ARM 板级引导流程以及 QEMU 板卡代码组织方式的入门样本其“大量外设 IGNORED、核心外设 EMULATED”的设计也体现了 QEMU 板级模拟中“只模拟软件所需硬件”的典型取舍。赞分享虚拟化硬件仿真【免费下载链接】qemuOfficial QEMU mirror. Please see https://www.qemu.org/contribute/ for how to submit changes to QEMU. Pull Requests are disabled. Please only use release tarballs from the QEMU website.项目地址https://gitcode.com/gh_mirrors/qe/qemu点击查看免费下载相关推荐Zephyr 中基于 BabbleSim 的 nRF54LM20 模拟板卡 nrf54lm20bsim 使用指南Zephyr 中基于 BabbleSim 的 nRF54LM20 模拟板卡 nrf54lm20bsim 使用指南 导读 nrf54lm20bsim 是 Zeph操作系统嵌入式RTOS物联网Zephyr 开发板指南基于 ATSAME70Q21 的 SAM E70 Xplained 评估板Zephyr 开发板指南基于 ATSAME70Q21 的 SAM E70 Xplained 评估板 SAM E70 Xplained 是 Atmel现 Mi操作系统嵌入式RTOS物联网QEMU 中的 Stellaris 板卡模拟深入解读 lm3s6965evb 与 lm3s811evbQEMU 中的 Stellaris 板卡模拟深入解读 lm3s6965evb 与 lm3s811evb 本文以 QEMU 官方文档 docs/system/a虚拟化硬件仿真上一篇终极指南如何在Android-Sunflower项目中配置多模块构建变体与productFlavors下一篇sqlx与太空资源法律框架法律问题的数据库系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考