系统盘
各位请问:用 make bzdisk 做的系统盘如何装载文件系统?? 一张盘还是两张盘? 就一张,可以启动,就是看不见文件,无法进入! 报什么样的错误? 我用mount 命令试过各种文件类型都不行,别的盘很多都用过,都无问题,而且我做过不止一张,都无法进入,不知什么原因?我想可能是磁盘引导扇区有内容故无法访问,你说是吗?? 哦,我知道了。你用这个命令做的boot盘,是没有文件格式的,内核是从磁盘的第一个扇区住后写的。你当然不能mount的。 那这张盘就不能干别的用了吗?(除了启动功能外) 对,什么都不能做了,如果想用别的,最好用lilo启动 谢谢! 因该是,因为从第一个扇区开始写入数据,这个时候所有原来关于文件系统格式的资料全部被洗。所以可以认为没有格式。我是这么认为的,。 其实我也没有做过,但我想了一个办法去测试:fd = open("/dev/fd0",O_RDWR);
pfd = mmap(...)(忘了参数表了) :oops:
然后在打开bzImage,把文件内容全部放入*pfd开始的内存中。
如果这样做了以后,盘仍旧能够启动,那就说明没有文件分配表和目录表。因为dd命令我了解一点点。好像也是这个原理 对,没有错,我也是先把内核文件读到内存a,然后用open打开设备fd0,并映射到内存b,然后把a的内容拷贝到b,这样内核就从软盘的第零个扇区开始往后放。
我看到过两篇文章,可惜现在找不到了,气死我了。 你看了内核的结构了吧?
内核不一定要用lilo或grub引导,它自己也可引导的。!
/usr/src/linux-2.4.19/arch/i386/boot下面的bootsect.s就是起和lilo一样的功能,bootsect.s运行完了以后,再把控制权交张setup.s。如果用lilo引导,那么就直接交给setup.s,而不经过bootsect.s。
内核编译以后,最前面就是bootsect.s的内容。或者用dd命令时,会把bootsect.s编译出来的内容拷贝到第一个扇区(这个我不是很清楚,因为我没有验证过)。但想来dd不是专门用来拷贝内核的。所以我想内核编译以后,最前面就是bootsect.s的内容。 如果用lilo,是用不到bootsect.s这个代码的。但内核中肯定还有botsect.s的内容。
如果用内核直接启动,那么bootsect.s肯定在硬盘的第一个扇区。
等我明天把程序写出来验证一下就清楚了。
页:
[1]