个人有两点不足:1.用了FAT12的文件系统;2.将ELF目标文件格式的系统模块载入内存。 1. 使用FAT12的一个唯一的好处就是可以比较方便将软盘mount到本机,然后将文件拷贝进去,其实如果想把系统放入软盘,可以使用dd命令,命令提供了一个选项seek,第二次拷进软盘的时候计算出跳过的字节即可。使用dd的好处是,直接可以得到各个模块在软盘中的位置,可以直接在指定的地方使用int 13去取模块。而且最重要的是,在入门的时候不必使用很麻烦的FAT12的格式,增加了很多没有必要的代码。 格式如:dd seek=3 if=boot/kernel of=$(FD) conv=notrunc cbs=512 2. 将ELF文件格式就更没有必要了,ELF文件格式包含了很多冗余的信息,程序表头等,各个section,这是不能被cpu直接执行的,所以于渊同学又继续在代码中取出各个section的模块存入0x30400地址处。这样做第一浪费了内存空间(系统未进入保护模式,总的能使用的内存只有1M),第二也增加了系统模块在软盘中占用的体积。第三将代码复杂化了,增加了入门的难度。其实可以在将系统ELF文件放入软盘前就将其ELF的转化为BIN格式的文件(CPU可直接执行),这样只要将BIN文件加载到内存中,就可以直接执行了,无须对ELF进行重新的内存调整。这个使用objcopy即可实现。格式如: objcopy -O binary -R .note -R .comment boot/system boot/kernel |