You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在QEMU x86_x64上启用M25P80闪存设备仿真

在QEMU x86平台启用ST M25P80仿真并对接MTD子系统

1. QEMU启动参数配置

x86平台无默认SPI控制器,需先仿真LPC总线SPI控制器,再挂载M25P80设备:

  • 提前创建M25P80镜像文件:
    dd if=/dev/zero of=m25p80.img bs=1M count=1
    
  • 给QEMU启动命令添加设备参数(嵌入到你原有的启动命令中):
    qemu-system-x86_64 \
      # 保留你的原有启动参数(如内核、根文件系统等)
      -device lpc_spi,bus=pci.0,addr=0x1e \
      -device m25p80,spi-bus=0,cs=0,size=1048576,file=m25p80.img
    
    参数说明:
    • lpc_spi:x86兼容的LPC总线SPI控制器,挂载到PCI总线0的0x1e地址
    • m25p80:仿真的SPI闪存设备,指定连接到SPI总线0、片选0,大小1MB,关联提前创建的镜像文件

2. Guest内核配置/模块加载

确保Guest Linux内核支持SPI和MTD相关组件:

  • 自行编译内核时需开启以下配置:
    CONFIG_SPI=y
    CONFIG_SPI_LPC=y
    CONFIG_MTD=y
    CONFIG_MTD_SPI_NOR=y
    CONFIG_MTD_CHAR=y
    CONFIG_MTD_BLOCK=y # 可选,启用MTD块设备支持
    
  • 使用发行版内核时,手动加载必要模块:
    modprobe spi_lpc
    modprobe mtd_spi_nor
    modprobe mtdchar
    

3. 验证设备识别

Guest系统启动后,通过以下命令确认设备加载状态:

  • 查看SPI控制器初始化日志:
    dmesg | grep -i spi
    
    正常输出示例:lpc_spi 0000:00:1e.0: SPI controller at I/O 0x2e-0x2f
  • 查看MTD设备日志:
    dmesg | grep -i mtd
    
    正常输出示例:mtd0: <unnamed> at 00000000 1024 KiB, sector size 64 KiB
  • 检查MTD字符设备:
    ls /dev/mtd*
    
    应显示/dev/mtd0和/dev/mtd0ro

4. 使用mtd-utils操作仿真闪存

通过mtd-utils执行基础闪存操作:

  • 擦除整个闪存:
    flash_erase /dev/mtd0 0 0
    
  • 写入数据:
    dd if=test_data.bin of=/dev/mtd0
    
  • 读取并验证数据:
    dd if=/dev/mtd0 of=readback.bin
    cmp test_data.bin readback.bin
    
  • 锁定指定扇区(示例:锁定第0个扇区):
    flash_lock /dev/mtd0 0 1
    

注意事项

  • 旧版QEMU可能存在参数差异,若spi-bus不生效,可尝试替换为spi-master参数
  • 若Guest内核未自动识别设备,需确认内核与QEMU版本的兼容性,或检查模块是否成功加载

内容的提问来源于stack exchange,提问作者tcpham14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 09:05:22