自己做個迷你型linux(轉)

ba發表於2007-08-13
自己做個迷你型linux(轉)[@more@]作者:cexoyq

hda1----新裝的RH9
hdc1----64M的硬碟,生成的小型linux就裝在這個盤上,還未分割槽格式化。
環境:ms的虛擬機器5.1版。

先重新編譯核心,把不需要的全部去掉,這樣模組也只有幾M了。編譯後生成了
核心:vmlinuz-2.4.20-8custom
initrd:initrd-2.4.20-8custom.img(這個沒用到,在GRUB中使用它反而不能啟動了,提示要加init核心引數。)
可載入模組:/lib/modules/2.4.20-8custom

fdisk /dev/hdc 分割槽,並啟用,儲存後退出。
mkext2fs /dev/hdc1
mkdir /mnt/hd2
mount /dev/hdc1 /mnt/hd2
mkdir /mnt/hd2/boot/grub -p
cp /boot/vmlinuz.2.4.20-8custom /mnt/hd2/boot/ -a
cp /boot/initrd.2.4.20-8custom /mnt/hd2/boot/ -a
cp /boot/grub/stage? /mnt/hd2/boot/grub/ -a
cp /boot/grub/grub.conf /mnt/hd2/boot/grub/ -a
cp /boot/grub/e2fs_stage1_5 /mnt/hd2/boot/grub/ -a
然後執行:grub
root (hdc1,0)
setup (hdc)
quit
這樣,小硬碟就能啟動了(不過進不了系統,核心啟動完後就死了)。但是記得要配置一下grub.conf,改成:
default=1
timeout=10
title linux
root (hd0,0)
kernel /boot/vmlinuz-2.4.20-8custom ro root=/dev/hda1
不能夠加入initrd,要不然會出錯的,不清楚原因。有誰知道的可以告訴我嗎?,謝謝了。

製作檔案系統
建立目錄:/home,/mnt,/proc,/lib,/sbin,/bin,/root,/etc,/dev
需要的檔案:/dev
/dev/console
系統控制檯裝置,非常重要。
/dev/fd0
第一個軟碟機
/dev/hda
/dev/hda[1-8]
IDE硬碟及分割槽
/dev/initctl
實際上是一個FIFO裝置,跟init有關(切換執行級別時用於新init與原init通訊)
/dev/initrd
Initial RAM disk
/dev/input
(目錄)Input core(包括遊戲杆、滑鼠等)
/dev/kmem
核心虛擬記憶體
/dev/loop[0-7]
Loopback裝置
/dev/mem
訪問實體記憶體
/dev/null
NULL裝置
/dev/psaux
PS/2滑鼠
/dev/ptmx
UNIX98 PTY master
/dev/pts
(目錄)UNIX98 PTY slaves
/dev/ptyp[0-7]
偽終端主裝置(遠端登入使用)
/dev/ram[0-7]
/dev/ramdisk
/dev/ram
RAM Disk裝置。至少/dev/ram0是應用initrd機制所必須的。
/dev/ramdisk連結到/dev/ram0,是為了相容老版本核心而保留的。
/dev/ram連結到/dev/ram1。
/dev/random
隨機數發生器
/dev/sda
/dev/sda[1-8]
SCSI磁碟及分割槽裝置
/dev/shm
共享記憶體裝置
/dev/systty
指向系統tty裝置的符號連結,一般是tty0。
/dev/tty
當前TTY裝置
/dev/tty[0-7]
虛控制檯(Virtual console)
/dev/ttyp[0-7]
偽終端從裝置
/dev/ttyS0
/dev/ttyS1
串列埠(COM1和COM2)
/dev/urandom
速度更快、安全性較差的隨機數發生器
/dev/zero
零裝置,只能讀0出來
需要的檔案:/etc
etc/default
(目錄)某個命令(比如useradd)的預設設定(man useradd(8))
/etc/ld.so.cache
由ldconfig命令根據/etc/ld.so.conf檔案產生
/etc/ld.so.conf
庫檔案路徑配置檔案,ldconfig命令根據該配置檔案生成/etc/ld.so.cache
/etc/localtime
本地時間、時區設定
/etc/login.defs
全域性預設設定
/etc/fstab
檔案系統列表(man fstab(5))
/etc/group
組檔案(man group(5))
/etc/hosts
列出主機名和IP地址(man hosts(5))
/etc/init.d
符號連結到/etc/rc.d/init.d
/etc/initlog.conf
Initlog日誌配置檔案(man initlog(8))
/etc/inittab
Init配置檔案(man inittab(5))
/etc/ioctl.save
該檔案包含了用於單使用者模式的串列埠和終端引數,因為這些引數是由getty設定的,
而在單使用者模式時沒有執行getty,所以用該檔案儲存引數。單使用者模式對系統安全
是個威脅,我們應該禁止使用單使用者模式,因此這個檔案實際上並沒有必要複製過
來。
/etc/issue
登入資訊和標識檔案(man issue(5))
/etc/modules.conf
模組的配置檔案(man modules.conf(5))
/etc/mtab
已經掛載的檔案系統列表(man mount(8))
/etc/nsswitch.conf
Name Service Switch的配置檔案(配置名稱服務資料來源和查詢的順序)(man nss
witch.conf(5))
/etc/pam.d
放置PAM配置檔案的目錄(有關PAM請參考5.5節)
/etc/passwd
使用者口令檔案(man passwd(5))
/etc/profile
系統環境變數和登入配置檔案
/etc/rc.d
放置啟動指令碼的目錄
/etc/services
列出可用的網路服務及其埠(man services(5))
/etc/termcap
終端(terminal)功能資料庫(man termcap(5))
另外,跟網路引數有關的檔案也要一一複製過來。要不然就得手動配置網路引數了。

需要的檔案:/lib
用“ldd 命令名稱” 來取得命令所需要的LIB庫,然後複製過來(要建立相應的目錄)。

/bin和/sbin:根據自己的需要複製相應的檔案。我把iptables,tc等複製過去。

需要的檔案:/lib/modules
整個複製重新編譯核心後的整個"2.4.20-8custom"目錄,因為經過了裁剪,所以我的只有5M,不大可以完全使用。這個很重要,網路的驅動,
iptables,tc等都靠它了。

下載busybox並編譯安裝。
下載最新版的busybox-1.1.2.tar.bz2到/root
解壓後進入busybox-1.1.2
make menuconfig -----選自己需要的命令,也可以從源RH9中複製,不過那樣就要拷LIB,麻煩。記得要選靜態編譯,還有init.
make
makeinstall
完成後在目錄下生成“_install”目錄,把所有目錄及檔案複製到小硬碟中。

重新配置/etc/inittab,/etc/fstab,/etc/rc.d/rc.sysinit
/etc/inittab
::sysinit:/etc/rc.d/rc.sysinit
::askfirst:-/bin/sh
tty2::askfirst:-/bin/sh
tty3::askfirst:-/bin/sh
tty4::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

/etc/fstab
proc /proc proc defaults 0 0

/etc/rc.d/rc.sysinit
#!/bin/sh
mount -a
新增自己的啟動指令碼。

然後關機,在虛擬機器中把小硬碟設定成第一個硬碟,也就是(hd0,0)
就可以看到你的mini-linux在跑了。

問題:
做出來的系統每次啟動後,網路卡驅動是載入了(因為我編譯在核心中),但是用"ifconfig eth0"卻看不到它的配置資訊,可能是未配置,
而所有的配置檔案/etc/都已經複製了。只能用"ifconfig eth0 10.0.0.103"配置一下才能使用網路。

在grub中不能使用initrd引數。出錯提示要加init核心引數,而加了init引數也不行。去掉initrd 就可以啟動了。很是奇怪。
請教高手指點.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-952713/,如需轉載,請註明出處,否則將追究法律責任。

相關文章