# ln -s init more
# ln -s init ps
# ln -s init sh
现在我们就有了所需的常用命令。
到这里我们的根文件系统就制作完成了,但是和内核一样,要把根文件系统部分放到一张1.44MB的软盘上去,也要进行压缩,下面我们就着手压缩它。
压缩根文件系统
一般我们会采取 RAM Disk 的方式实现。简单的来说就是将准备好的根文件系压缩成为Ramdisk的镜像文件,当用软盘启动时,再把镜像文件解压到内存中,形成一个虚拟盘(RAMDISK),通过RAMDISK控制系统启动。
我们现在制作Ramdisk的镜像文件
# dd if=/dev/zero of=/tmp/tmp_loop bs=1k count=2048
# losetup /dev/loop0 /tmp/tmp_loop
# mke2fs -m 0 /dev/loop0
# mount -t ext2 /dev/loop0 /mnt
# cp -a /floppy-Linux /mnt
# umount /mnt
# losetup -d /dev/loop0
# dd if=/tmp/tmp_loop | gzip -9 > /tmp/Image.gz
# rm -f /tmp/tmp_loop
# sync
这样我们就得到了压缩过的根文件系统也就是Ramdisk的镜像文件Image.gz。
目前为止我们已经有了内核和压缩过的根文件系统.现在剩下的就是把它们整合在一张软盘里面。
整合核心和根文件系统
根据引导的方式不同,有以下三种整合方案:
用grub引导
依次执行:
# mke2fs /dev/fd0
# mount /dev/fd0 /mnt/floppy
# mkdir /mnt/floppy/boot
# mkdir /mnt/floppy/boot/grub
# cp /boot/grub/stage1 /mnt/floppy/boot/grub
# cp /boot/grub/stage2 /mnt/floppy/boot/grub
#grub
在 grub> 提示符处,输入:
grub> root (fd0)
grub> setup (fd0)
grub> quit
#cp newkernel /mnt/floppy/boot
#cp Image.gz /mnt/floppy/boot
#cp /boot/grub/grub.conf /mnt/floppy/boot/grub
编辑grub.conf, 内容如下:
timeout 10
default 0
title My little Linux
root (fd0)
kernel /boot/newkernel ro root=/dev/ram0
initrd /boot/ Image.gz
然后制作grub.conf的link文件menu.lst
#ln -s /mnt/floppy/boot/grub/grub.conf /mnt/floppy/boot/grub/menu.lst
#umount /mnt/floppy
整合完成!
用sysLinux引导
依次执行:
# mkdosfs /dev/fd0
# sysLinux /dev/fd0
编辑 sysLinux 的组态档 sysLinux.cfg,内容如下
TIMEOUT 20
DEFAULT Linux
LABEL Linux
KERNEL newkernel
APPEND root=/dev/ram0 ro initrd=Image.gz
然后将 sysLinux.cfg、newkernel、Image.gz 拷贝到磁盘中
# mount /dev/fd0 /mnt/floppy
# cp newkernel /mnt/floppy
# cp Image.gz /mnt/floppy
# cp sysLinux.cfg /mnt/floppy
#umount /mnt/floppy
整合完成!
直接引导
依次执行:
# dd if=newkernel of=/dev/fd0 bs=1k
252+1 records in
252+1 records out
在这个例子中,dd 写入了 252 个完整记录(records) + 1个partial record ,所以内核占用了 253 个软盘的 blocks 。这个数字称为 KERNEL_BLOCKS ,请记得它,这个数字还要使用.
#rdev /dev/fd0 /dev/fd0
#rdev -R /dev/fd0 0
#rdev -r /dev/fd0 VALUE
在这里这个VALUE的值应为16384+ KERNEL_BLOCKS(上一步dd 命令所产生的数值)
所以本例应为:#rdev -r /dev/fd0 16637
#dd if= root system file of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS
在这里这个KERNEL_BLOCKS就是上一步dd 命令所产生的数值
所以本例应为:dd if= Image.gz of=/dev/fd0 bs=1k seek=253
整合完成!
现在我们就拥有了一张可以自激活到Linux环境的软盘。对于本例来讲,想要执行AMD官方测试软件Maxpower64,只要将Maxpower64这个可执行文件复制到 /bin目录就可以了。我们可以在“使用BusyBox制作常用命令“这个阶段来完成它.
# cp Maxpower64 /floppy-Linux/bin
这张软盘会自激活到linux环境下,并显示“#”命令提示符,我们只要执行Maxpower64就可以了。
#/bin/Maxpower64
如果希望系统一开机就直接执行Maxpower64,则需要在“编辑有关的 shell script”这个阶段编辑rc.sysinit文件为:
#!/bin/sh
mount –a
/bin/Maxpower64
这样软盘引导进入linux后会直接执行Maxpower64而不再显示“#”命令提示符。
小结
除了以上的方法,我们也可以通过引导器给内核传递参数来实现内核和根文件系统分别放置在不同的软盘上,这样内核就可以再大一些,支持的功能也就越多。总之制作一张包含小型linux的软盘并不困难,关键是要细心和耐心,此外最好能够了解BusyBox和RAMDISK的工作原理,这对于更好的完善系统是有很大帮助的。
作者简介
姓名:雷凯
E-mail: tigerleihm@yahoo.com.cn
参考资料:http://www.douzhe.com/docs/Linux/ <<Linux启动盘boot/root盘的制作>>
http://www.nsfocus.com/ <<亲手打造 Floppy Linux 环境>>
| 初学摄影 回复于:2005-03-23 10:56:42 |
| 老大还在升技?不是去上海了吗? :roll: |
| tigerlei 回复于:2005-03-23 10:58:01 |
| 呵呵,忘了改了。。。 |
| platinum 回复于:2005-03-23 11:24:00 |
| 哈哈,tigerlei的头像总是这么搞笑 :m01: |
| tigerlei 回复于:2005-03-23 11:25:08 |
| 呵呵,客气拉,不如你的奶嘴小弟有亲和力阿 |
| hezhiroy 回复于:2005-03-23 13:01:17 |
| 呵呵,不错 |
| jiyu2004 回复于:2005-03-23 18:23:25 |
| 不错 |
| 风戬 回复于:2005-03-24 07:49:59 |
| 如果用2。6的内核也放得下么? |
| tigerlei 回复于:2005-03-24 09:14:35 |
| 整个内核肯定不行,所以需要你根据需要适当裁减 |
| platinum 回复于:2005-03-24 09:37:14 |
| 其实最关键的部分就是“如何裁减内核”
至于怎么放到软盘里,或者放到光盘里、放到U盘里,网上都有很多介绍 但是,如何有效裁减内核到最小,而不影响系统的运行,至少能启动,这个谈到的寥寥无几,我目前也在研究中,看看到底什么是必须要的,必不可少的,否则就要出错的东西 |
| tigerlei 回复于:2005-03-24 10:12:08 |
| 嗯,没错,我做的时候基本上把一些类似于blue tooth,scsi等一些都去掉了,反复做了好几次才得到有小又可以用的内核,至于说到那些可以删哪些不能删,还没有研究过,还请老兄有结果了通知一下,我也好涨点见识。另外本文的目的就是抛砖引玉,就是想引出老兄的这块玉,还请指教 |
| platinum 回复于:2005-03-24 10:17:32 |
| 唉,我研究了好几天了,也是没有结果
因为,不同的硬件系统,要做不同的定制,很麻烦 我最后决定,还是自己做光盘启动的Linux比较好,呵呵 1、速度快 2、容量大,可以放自己的很多东西 3、找有光驱的机器简单,找有软驱的就难了 很多LiveCD都是这么做的,还有自己的X,比如koppix等 我感觉,做这个工作,对系统的启动机制会有更深层次的了解 |
| wingger 回复于:2005-03-24 10:21:27 |
| 玩玩gentoo吧,可以自己制作哦。嘿嘿 |
| 风戬 回复于:2005-03-24 13:51:26 |
| 好像同样的config,2.6的比2.4要大很多,能大200多k,晕,大了近一倍。。
选项上除floppy,Loopback,RAM,initrd,System V ipc,systrl,kernel support,processor family基本都不是必需的吧。大概是这样 |
| 风戬 回复于:2005-03-24 13:58:49 |
| platinum做好了也借我玩玩好不好,不过建议不要压缩,我内存才256,不然会很慢
呵呵,我从前用lfs做过,不过一做图形界面就乱了。。。。 期待中。。。。 |
| platinum 回复于:2005-03-24 14:15:24 |
| 我曾经给我们公司定制过一张跑路由的LINUX光盘
放到光驱里以后自动拨pppoe,自动起防火墙,自动做NAT,支持远程telnet管理,支持高级路由策略 才15M大小,可以放到3寸光盘里,负责NAT的机器只需要64M内存,不用有硬盘、鼠标、键盘、显示器,跑起来很爽 不过后来公司的网络拓扑改了,也专门用了个机器做,我就装了个CentOS-3.4跑很多业务,没再继续研究 其实做起来不难,就是麻烦,需要注意几个问题 1、不用精简内核,因为我们是刻到光盘上 2、建议用高版本内核,把所有支持的东西都编译进去,这样可以支持各种硬件 3、iptables该升级升级,netfilter该打补丁打补丁 4、需要了解、掌握syslinux,这个是做引导系统用的 5、学会使用ldd命令来移植系统,有的时候busybox不行,需要自己单独从现有系统移植东西 6、了解、掌握LINUX的启动过程,知道boot的过程,知道boot以后要调用什么shell 7、巧用VMWARE,做出来的ISO不要急于刻盘,先在VMWARE里跑跑看 |
| 风戬 回复于:2005-03-24 15:11:48 |
| 呵呵,谢谢platinum指导,不过对我来说,我只是个人使用,好多东西都不能少,就像我从前做的一个不到1m的系统,除了用它修复下系统,我真的没有找出其他用途。
尽管我已经能完全在命令行下上网,看电影,聊qq等一些基本的娱乐性操作,但我还是觉得不够,对个人使用者来说,命令行更适用于管理,图形界面是很重要的,还有不少带有娱乐性质的东西也都要用到,想什么ImageMagick之类的东西如果都加上就不小了 另外,刚才想了想,如果不要mount,我说的Loopback似乎也没必要一定编译进,这样,编译busybox时还可以把mount去掉,又少了些空间,或许能用来装点别的东东 |
| king1981 回复于:2005-04-14 22:54:44 |
| ding .............. |
| king1981 回复于:2005-04-14 23:11:30 |
| ding .............. |