调用BIOS磁盘服务读取扇区返回0x01无效参数错误,如何解决?
问题根因
你遇到的错误是SeaBIOS识别的磁盘物理CHS几何参数,和分区表中存储的逻辑CHS参数不匹配导致的。
你从分区表读取到的磁头值是32(DH=0x20),但QEMU默认给16MiB大小的磁盘分配的磁头数仅为16,合法磁头编号范围是0~15,你传入的DH值超出了BIOS支持的最大值,所以触发AH=0x01的无效参数错误。
现代磁盘工具(fdisk/sfdisk)在生成MBR分区表时,写入CHS字段的是逻辑CHS值,仅为了兼容MBR的遗留格式,和BIOS实际枚举磁盘时计算出的物理CHS没有绑定关系,这是CHS寻址模式的典型遗留问题。
解决方案
方案1:改用INT 13h扩展读取功能(推荐)
直接使用LBA寻址的INT 13h扩展调用(AH=0x42),完全绕过CHS匹配问题,目前所有支持SeaBIOS的环境都兼容该调用,是更通用的实现方式。
方案2:手动指定QEMU磁盘CHS参数
如果必须使用CHS寻址模式,可以在启动QEMU时手动指定磁盘的CHS参数,和分区表的逻辑CHS对齐,修改启动命令为:
qemu -gdb tcp::26000 -S -drive file=disk.img,format=raw,cyls=16,heads=64,secs=63
调整cyls/heads/secs参数和你分区表使用的逻辑CHS参数一致即可。
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

