制作根文件系统

转自tb01412

在命令提示符下输入 
vi   my_image 
进入VI界面之后,输入以下的文本 

dd   if=/dev/zero   of=/tmp/tmp_loop   bs=1k   count=512 
mkfs -t   ext2   /dev/loop0   
mount   -t   ext2   /dev/loop0   /mnt 
mkdir   -P   /mnt/dev 
mkdir   -P   /mnt/bin 
mkdir   -P   /mnt/etc 
... 
umount   /mnt   
losetup   -d   /dev/loop0   
dd   if=/tmp/tmp_loop   |   gzip   -9   >   /tmp/Image.gz   
rm   -f   /tmp/tmp_loop   
sync   


当你输完上面的所有文本之后,按ESC键,再按住冒号,最后输入wq,最后就在当前目录下生成了一个my_image的脚本文件,然后输入./my_image,之后在/tmp目录下有一个Image.gz文件,就是你所想要的Image文件了 


总体实现思路: 
1.首先打开VI编辑器,相当于WINDOWS下的记事本之类的程序,当然比它强大很多,以便用它来写一个脚本文件,脚本文件类似下DOS下的批处理文件,免得你每次输入很多相同的命令 
2.用DD工具来做一个虚拟的磁盘文件,DD工具有点强大,可以克隆整个分区,某个文件,或者整个硬盘,类似于GHOST之类的软件 
3.将此虚拟的磁盘系统格式化成你指定的分区,比如EXT2,FAT等,这里所使用的工具就是mkfs 
4.将格式好的虚拟磁盘挂载到一个目录下,类似于你挂载一个WINDOWS的分区一样,挂载好了之后,你就可以在此目录下进行各种操作了 
5.此时你的虚拟磁盘下还没有任何文件,你需要在下面新建一些LINUX所需要的目录,比如dev,proc,bin,etc等,此时,为了方便,你可以将你PC机上的某些目录拷过去,由于你PC机上的目录下的文件太多也太大,所以推荐你照着PC机新建目录,然后再将你想要的某些文件从PC机拷贝到你的虚拟磁盘中去 
6.当你将所需要的文件全部拷上去了之后,就可以卸载了 
7.将你制做好的虚拟磁盘文件压缩(当然,你也可以不压缩,这取决于你的BOOTLOADER) 


对上面脚本的详细注解如下: 
第一句:dd   if=/dev/zero   of=/tmp/tmp_loop   bs=1k   count=512,做一个虚拟磁盘(相当于在WINDOWS上的ISO文件),其中每1024字节为一块,类似于硬盘的分块,一共有512K的大小,当然,你也可以做成不只512K大小,改相应的参数就行了 

第二句:mkfs -t   ext2   /dev/loop0   ,将你虚拟的磁盘进行格式化,这里格式化成EXT2文件系统,还记得WINDOWS下的ISO吧?不过ISO只能是固定的东东,这里的虚拟磁盘可以是任何LINUX支持的文件系统!!! 

第三句:mount   -t   ext2   /dev/loop0   /mnt,挂载分区,不用我多说了,需要注意的一点是,最好事先不要在MNT目录下挂载其它的分区,或者放其它的文件,也就是说要么它就是一个空目录,要么你就改一个目录来进行你的挂载操作,当然,如果你放了一些文件或者已经挂载了某个分区也没什么,只不过那个分区里的东西全不见了(只是暂时的,当你操作完成之后就恢复了) 

第四句之后: 
mkdir   -P   /mnt/dev 
mkdir   -P   /mnt/bin 
mkdir   -P   /mnt/etc 
... 
就是新建目录,参数P是指如果有该目录的话,就忽略,最后的省略号是指我省略了一些步骤,并不是要你在文本编辑器里输入省略号!!!!!而且后面还省略了从PC机拷贝文件的步骤,因为我并不知道你需要什么具体文件 


最后几句: 
umount   /mnt   
losetup   -d   /dev/loop0   
dd   if=/tmp/tmp_loop   |   gzip   -9   >   /tmp/Image.gz   
rm   -f   /tmp/tmp_loop   
sync   
卸载分区 
通知系统不再需要虚拟磁盘 
将生成的/tmp下的tmp_loop文件(就是那个虚拟磁盘文件),用GZIP压缩,并拷贝到/tmp/下,并改名为Image.gz 
删除磁盘虚拟文件 
文件写操作同步,在LINUX下的磁盘操作时,是有一个缓冲的过程,相当于你发过写磁盘的命令,但此时向磁盘的写操作还没发生,时已经向用户返回写成功了,为了确保写操作完成,就需要这个sync命令以确保你的镜像文件完整 


最后需要注意的是: 
至于你的文件系统里面要放什么东西,完全由你自己决定,比如你需要一个BusyBox之类的,也需你还要支持你自己的驱动,我在这里只是简单提两句,请参阅相关文档 
总体思路是一样的,你可以根据我说的整体思路,你完全可以举一反三,灵活运用

posted @ 2013-12-14 09:02  general001  阅读(183)  评论(0)    收藏  举报