?? 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 + -