为了项目的需要,最近在研究怎样在系统启动时读ext2文件系统。关于文件系统的代码都很大,看不懂,我懒得看。我只要能够读文件就行,而且对效率要求不高。努力奋斗了几天终于实现了在没有任何库支持的情况下读ext2文件系统了。
读文件首先是要读磁盘,在网上查,最后发现有两种解决方案:一种是用bios int 0x13读磁盘,另一种是用io端口。因为我的启动代码是通过grub拉起来的,因此代码启动之后就在保护模式下运行。我不太确定怎样保护模式下还能用bios int 0x13,但确实能用,并且grub就是这么用的。后来发现在grub中摘这段代码比较费事,我就选择利用io端口读磁盘了。利用io端口读磁盘还是比较容易的,只要知道相关协议就行。^_^,找资料可是一个费事的工作,这里是我找到的关于利用io端口读磁盘的资料:
http://forum.sysinternals.com/forum_posts.asp?TID=13113
http://www.cnblogs.com/huqingyu/archive/2005/03/22/123360.html
解决了读磁盘的问题,接下来就是如何解析ext2文件系统了。我不知道ext2文件系统是不是很久都没有人研究了,资料很难找,而且找到的资料描述的也不是很清楚,跟老师上课用的课件的差不多。没办法,只好硬着头皮一步一步的查。最后我还是没有读分区表,而是直接在磁盘文件中找到了第一个group的位置,在此基础之上实现了读ext2文件系统。下面是还比较好的一份资料,剩下的就看grub或者Linux的代码了:
这份代码最大的缺陷是没有通过分区表定位group0,否则就是一个相对完整的Demo了,希望以后有时间可以加上。我已经将代码上传,希望对在这方面做工作的朋友能有所帮助: