在WSL Ubuntu执行make时遇mcopy错误:No directory slots
解决WSL Ubuntu中mcopy "No directory slots"错误
针对你在WSL Ubuntu中制作FAT12软盘镜像时遇到的mcopy报错问题,以下是几种可行的解决思路:
1. 强制指定FAT12根目录项数
默认情况下mkfs.fat创建的FAT12镜像可能因WSL环境差异,导致根目录槽位识别异常。可以手动指定1.44MB软盘标准的根目录项数(224项),修改Makefile中的mkfs.fat命令:
mkfs.fat -F 12 -n "IZOS" -R 224 $(BUILD_DIR)/main_floppy.img
2. 改用挂载镜像的方式复制文件
避免mtools直接访问镜像的潜在问题,通过losetup挂载镜像后用普通cp命令复制:
修改Makefile中main_floppy.img的生成规则:
$(BUILD_DIR)/main_floppy.img: bootloader kernel dd if=/dev/zero of=$(BUILD_DIR)/main_floppy.img bs=512 count=2880 mkfs.fat -F 12 -n "IZOS" $(BUILD_DIR)/main_floppy.img dd if=$(BUILD_DIR)/bootloader.bin of=$(BUILD_DIR)/main_floppy.img conv=notrunc # 挂载镜像并复制kernel.bin sudo losetup /dev/loop0 $(BUILD_DIR)/main_floppy.img sudo mkdir -p /mnt/floppy sudo mount /dev/loop0 /mnt/floppy sudo cp $(BUILD_DIR)/kernel.bin /mnt/floppy/kernel.bin sudo umount /mnt/floppy sudo losetup -d /dev/loop0
注意:执行此操作需要sudo权限,可能需要输入用户密码。
3. 切换WSL内部文件系统存放镜像
如果你的BUILD_DIR位于Windows挂载目录(如/mnt/c/xxx),NTFS文件系统的特性可能干扰镜像文件的二进制读取。将BUILD_DIR改为WSL内部路径(如~/build),重新执行make。
4. 替换mtools为fatcopy工具
安装fatcopy替代mtools:
sudo apt install fatcopy
然后修改Makefile中的mcopy命令为:
fatcopy $(BUILD_DIR)/kernel.bin $(BUILD_DIR)/main_floppy.img::kernel.bin
内容的提问来源于stack exchange,提问作者xunleqitrazer
相关产品推荐
相关产品推荐

