歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 自己做個迷你型linux系統

自己做個迷你型linux系統

日期:2017/2/27 9:35:09   编辑:更多Linux

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,要不然會出錯的,不清楚原因。有誰知道的可以告訴我嗎?[email][email protected][/email],謝謝了。

制作文件系統

建立目錄:/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並編譯安裝。[url]http://www.busybox.net/downloads[/url]

下載最新版的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 就可以啟動了。很是奇怪。

請教高手指點。



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 就可以啟動了。很是奇怪。

請教高手指點。



Copyright © Linux教程網 All Rights Reserved