如何在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.imglpc_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 spilpc_spi 0000:00:1e.0: SPI controller at I/O 0x2e-0x2f - 查看MTD设备日志:
正常输出示例:dmesg | grep -i mtdmtd0: <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
相关产品推荐
相关产品推荐

