📄 00000003.htm
字号:
完整linux的/dev目录下有很多设备文件,不过仔细辨别一下就会发现很多其实 <BR>用不上。我列出在我的最小Linux下面用到的设备文件: <BR>[root@MiniLinux dev]# ls <BR>agpgart hda hda6 input loop3 psaux ptyp3 ram3 tty3 ttyp4 <BR>console hda1 hda7 kbd loop4 ptmx ptyp4 ram4 tty4 urandom <BR>fb hda2 hda8 kmem loop5 pts ram shm ttyp0 zero <BR>fb0 hda3 hda9 loop0 mem ptyp0 ram0 tty0 ttyp1 <BR>fd0 hda4 initctl loop1 null ptyp1 ram1 tty1 ttyp2 <BR>fd1 hda5 initrd loop2 openprom ptyp2 ram2 tty2 ttyp3 <BR> <BR>其中input、shm、pts是目录,似乎是系统自己生成的,fb连接到fb0,ram连接到ram0 <BR>关于硬盘的保留了hda?,loop[0-5]用于支持回环设备(loopback devices), <BR>tty[0-4]用于支持主机直接操作,ttyp[0-4] & ptyp[0-4]用于共同支持ssh登陆, <BR>ram?用于支持虚拟盘,urandom是sshd服务必须的设备。 <BR> <BR>所有的设备文件均可以用cp -dpR从原系统的/dev目录下复制过来。 <BR> <BR>裁减Linux(15) <BR>关于/linuxrc <BR> <BR>linuxrc是一个在initrd.img里面展开后直接自动执行的一个脚本。关于这个脚本 <BR>的用途,建议大家读一下/usr/src/linux-2.4/Documentation/initrd.txt, <BR>我也是直接把系统提供的initrd-2.4.18-3.img里面带的linuxrc拿来用而已: <BR>[root@MiniLinux /]# cat linuxrc <BR>#!/bin/nash <BR>echo Mounting /proc filesystem <BR>mount -t proc /proc /proc <BR>echo Creating root device <BR>mkrootdev /dev/root <BR>echo 0x0100 > /proc/sys/kernel/real-root-dev <BR>echo Mounting root filesystem <BR>mount --ro -t ext2 /dev/root /sysroot <BR>umount /proc <BR>pivot_root /sysroot /sysroot/initrd <BR> <BR>注意,它用的shell是/bin/nash,而不是通常用的/bin/sh,大家man nash可以 <BR> <BR>看到很多有意思的东西。 <BR> <BR>裁减Linux(16) <BR>最后的一些工作 <BR> <BR>当你把一个文件虚拟为一个磁盘并挂接在系统上,复制了需要的可执行文件、 <BR>库文件、配置文件并做了必要的修改之后,一个文件系统基本上已经成形了。 <BR>前面列出的最小系统的目录,如果没有特别提到都是留空的。这里要说的 <BR>最后的工作就是如何把kernel和文件系统结合起来。 <BR> <BR>我看到过很多讲一张或者两张软盘启动的linux,里面都提到用rdev定位文件系统, <BR>还要如何如何算。我是看明白了,不过觉得特别繁琐,就投机取巧了一番。 <BR> <BR>首先假定刚才我们挂载的根文件系统是挂载到现在的/mnt目录下,文件名是/root/newfs <BR> <BR>则首先umount <BR> <BR>#umount /root/newfs <BR> <BR>接着将newfs压缩 <BR> <BR>#gzip -v9 /root/newfs <BR> <BR>此时会生成newfs.gz,接着rename: <BR> <BR>#mv newfs.gz newfs.img <BR> <BR>把它和前面编译的内核bzImage放到/boot目录下去。 <BR> <BR>我用的Linux引导器是grub。为什么不用LILO?我基本上没有用过LILO,是出道 <BR>很晚很晚的Linux使用者,从grub的介绍上我发现它比LILO功能强很多,使用新 <BR>内核不需要像grub那样重新安装,而且内置支持一些常见的文件系统。 <BR> <BR>看看/boot/grub/grub.conf吧,在其中增加一段: <BR>title Test Combine <BR> root (hd0,4) <BR> kernel /bzImage ro ramdisk_size=8192 root=/dev/ram0 <BR> initrd /newfs.img <BR> <BR>当然,你不可照抄我的配置,需要按照你的系统更改root (hd?,?),如果 <BR>你建立的文件系统(未压缩前)容量是其他数值的,请用合适的值替代8192, <BR>单位是KB(还记得我前面说过的编译内核的时候不需要刻意更改缺省ramdisk容量 <BR>吗?就在这里指定即可) <BR> <BR> <BR>好了,可以试试裁减以后的系统了。大概有多大呢?我裁减出来的系统内核大约是 <BR><800k,文件系统8M,压缩成.img的是约3M,很小吧。 <BR> <BR>裁减Linux(17)(完) <BR> <BR>感想 & 说明 <BR> <BR>先说说这个最小Linux的启动过程。grub将内核载入以后,让内核将newfs.img载入内存 <BR>并展开(自动展开到/dev/ram0)为临时根文件系统,此时执行/linuxrc,在linuxrc <BR>中又指定了新的文件系统。接着内核按照grub带入的参数root=/dev/ram0作为根文件 <BR>系统正式init,此时/dev/ram0中的内容正是newfs.img的内容(如果你仔细观察的话, <BR>会发现完整linux启动过程中有Unmounting initrd....的字样,说明initrd.img是 <BR>在进入init脚本的过程中才被卸载的),按照/etc/inittab脚本执行,缺省为 <BR>runlevel 3,执行/etc/rc,最后由mingetty启动login完成引导。 <BR> <BR>我个人感觉,/linuxrc里面的脚本似乎对内核正式init时的根分区指定没有多少 <BR>影响,并不像/usr/src/linux-2.4/Documentation/initrd.txt里面linuxrc例子 <BR>那样要求严格。好像决定正式init根分区的是由grub带入内核的参数root=... <BR>来决定的更多。有经验的大侠请多指点。 <BR> <BR>经过这次实验,感受颇多。首先对linux引导过程以及/etc下面的很多配置文件 <BR>有了深入了解。Linux可改变的弹性很大,不过也需要大家沉得住气,慢慢去研究, <BR>man、HOWTO等等是少不了看的,第一手的资料还是man和英文HOWTO最权威,其次, <BR> <BR>缩减以后的大小让人非常振奋,裁减以后,系统加载重启登陆的速度都变得非常快, <BR>很多东西简直就是一眨眼就过去了。 <BR> <BR>文末,感谢各位耐心看完,不对之处请斧正。本人也是linux的新手,万望海涵。 <BR> <BR> <BR> <BR> <BR> <BR> <BR>-- <BR> / / / / / / / / / / / / / / / / / / / / / / / / / / <BR> / / / 这个秋季/ / / / / / / / / / / / / / / / / / <BR> / / / 雨又开始不停的下/ / / / / / / / / / / / / / <BR> / / / 我仍在期待与你碰面的那一刻/ / / / / / / / / <BR> / / / 那雨中的浪漫情怀..../ / / / / / / / / / / / <BR> / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / <BR>※ 修改:·withhope 於 01月16日14:27:02 修改本文·[FROM: 211.69.196.70] <BR>※ 来源:·武汉白云黄鹤站 bbs.whnet.edu.cn·[FROM: 211.69.196.70] <BR>-- <BR>※ 转载:·武汉白云黄鹤站 bbs.whnet.edu.cn·[FROM: 202.38.64.3] <BR><CENTER><H1>华中地区网络中心</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -