時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
按啟動順序依次介紹相關(guān)的文件:
一、內(nèi)核啟動完之后,首先運行/linuxrc。
/linuxrc內(nèi)容:
--------------------------------------------------------------------------------
#!/bin/sh
echo "mount /etc as ramfs"
/bin/mount -n -t ramfs ramfs /etc
/bin/cp -a /mnt/yaffs/etc/* /etc //關(guān)機的時候我們會保存/etc的內(nèi)容到/mnt/yaffs/etc.
echo "re-create the /etc/mtab entries"
# re-create the /etc/mtab entries
/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/2 /
/bin/mount -f -t ramfs ramfs /etc
exec /sbin/init
--------------------------------------------------------------------------------
首先你要看懂這個linuxrc,
1. /bin/mount -n -t ramfs ramfs /etc
這句話的作用加載一個ramfs作為/etc目錄。這樣/etc就是一個可寫目錄。
看這個腳本,得出你的根文件系統(tǒng)是一個cramfs,是一個只讀文件系統(tǒng)中,而/etc作為系統(tǒng)運行配置文件的存放地點,可能會寫一些運行狀態(tài)在這里, linuxrc第一件事情就是將一個ramfs mount 到/etc只讀目錄中,使得/etc/目錄可寫,指定參數(shù) -n的目的是告訴mount不要寫/etc/mtab, 這個文件存放當前系統(tǒng)mount了的所有文件系統(tǒng)中。因為現(xiàn)在/etc/目錄還是只讀,所以這次mount不要寫這個文件,否則會失敗。
而你問到的 ramfs在哪里,這個在你的 /etc/fstab文件中應該有ramfs一項, mount 會去找這項,如果沒有,mount會失敗。后面就執(zhí)行不下去。
2. /bin/cp -a /mnt/yaffs/etc/* /etc
/etc成為可寫目錄后,將所有/mnt/yaffs/etc中的配置文件拷貝到/etc/中,這說明你的ramfs可能是一個空的ramfs,沒有配置文件,或者配置文件比較老。 同時也說明你這個系統(tǒng)是一個只讀系統(tǒng),每次系統(tǒng)運行中寫入的配置不會保留。
將以前mount的那些信息重新寫到/etc/mtab中,命令就是下面這些。
3. /bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/2 /
/bin/mount -f -t ramfs ramfs /etc
這些命令只是將這些mount信息寫到/etc/mtab中,不會實際去mount這些block device,說明你的根文件系統(tǒng)依然是以前的那個/dev/bon/2
4. exec /sbin/init
執(zhí)行根文件系統(tǒng)中的init執(zhí)行程序,使其成為1號進程。shell正式運行。
###################################################################################
/etc/mtab介紹:
mtab同/etc/fstab的格式一樣,它用于記錄已經(jīng)掛載的分區(qū)信息。
注意:
如果沒有/linuxrc這個文件,系統(tǒng)默認首先運行/sbin/init。
###################################################################################
二、從/linuxrc文件中我們看到它最后運行了/sbin/init,而init又會根據(jù)/etc/inittab來運行。
inittab 文件條目格式:
id:runlevels:action:process
id:
inittab 文件中條目的唯一標識, 限于 1-4 個字符 (如果是用版本號小于 5.2.18 或 a.out 的庫編譯生成的 sysvinit 程序, 則僅限于 2 個字符).
注意: 對于 getty 或其它的注冊進程, id 必須是響應的終端線路的 tty 后綴, 如 1 響應 tty1, 否則, 注冊過程不能正常的工作.
runlevels:
#?? 0 - halt (Do NOT set initdefault to this)
#?? 1 - Single user mode
#?? 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#?? 3 - Full multiuser mode
#?? 4 - unused
#?? 5 - X11
#?? 6 - reboot (Do NOT set initdefault to this)
action
描述要發(fā)生的動作.
process
要執(zhí)行的進程. 如果 process 域以一個 `+' 開頭, init 不會在 utmp 和 wtmp 文件中為此進程記帳. 這是由于 getty 自己主持 utmp/wtmp 記帳的需要, 同時這也是一個歷史遺留的漏洞.
runlevels 域可以包含表示不同運行級的多個字符, 例如 123 表示本進程在運行級為 1, 2 和 3 時都要啟動. 用于 ondemand 條目的 runlevels 域可以包含 A, B, 或 C. 用于 sysinit, boot, 和 bootwait 條目的 runlevels 域被忽略.
當改變運行級時, 在新運行級中沒有給出的那些正在運行的進程被殺死, 先使用 SIGTERM 信號, 然后是 SIGKILL.
action 域可以使用的動作有:
respawn:
該進程只要終止就立重新啟動 (如 getty).
wait
只要進入指定的運行級就啟動本進程, 并且 init 等待該進程的結(jié)束.
once
只要進入指定的運行級就啟動一次本進程.
boot
在系統(tǒng)引導期間執(zhí)行本進程. runlevels 域被忽略.
bootwait
在系統(tǒng)引導期間執(zhí)行本進程. 并且 init 等待該進程的結(jié)束 (如 /etc/rc). runlevels 域被忽略.
off
什么也不做.
ondemand
在進入 ondemand 運行級時才會執(zhí)行標記為 ondemand 的那些進程. 無論怎樣, 實際上沒有改變運行級 (ondemand 運行級就是 `a', `b', 和 `c').
#p#副標題#e#
initdefault
initdefault 條目給出系統(tǒng)引導完成后進入的運行級, 如果不存在這樣的條目, init 就會在控制臺詢問要進入的運行級. process 域被忽略.
sysinit
系統(tǒng)引導期間執(zhí)行此進程. 本進程會在 boot 或 bootwait 條目之前得到執(zhí)行. runlevels 域被忽略.
powerwait
本進程在電源不足時執(zhí)行. 通常在有進程把 UPS 和計算機相連時通知 init 進程, Init 在繼續(xù)其它工作之前要等待此進程結(jié)束.
powerfail
類似 powerwait, 但是init 不等待此進程完成.
powerokwait
在 init 收到電源已經(jīng)恢復的通知后立即執(zhí)行此進程.
powerfailnow
本進程在 init 被告知 UPS 電源快耗盡同時外部電源失敗 (無效) 時被執(zhí)行. (假設 UPS 和監(jiān)視進程能夠發(fā)現(xiàn)這樣的情況).
ctrlaltdel
在 init 收到 SIGINT 信號時執(zhí)行此進程. 這意味著有人在控制臺按下了 CTRL-ALT-DEL 組合鍵, 典型地, 可能是想執(zhí)行類似 shutdown 然后進入單用戶模式或重新引導機器.
kbrequest
本進程在 init 收到一個從控制臺鍵盤產(chǎn)生的特殊組合按鍵信號時執(zhí)行.
inittab實例:
--------------------------------------------------------------------------------
#/etc/inittab
::sysinit:/etc/init.d/rcS
tty0::respawn:/sbin/getty 38400 tty0
tty2::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/cp /etc /mnt/yaffs/etc -ra //因為我們的根文件系統(tǒng)只讀,需要保存/etc的內(nèi)容
::shutdown:/bin/umount ar
::shutdown:/bin/mount / o remount,ro //mount -o remount就是重新加載的意思
--------------------------------------------------------------------------------
三、從inittab中我們可以看到現(xiàn)在系統(tǒng)啟動/etc/init.d/rcS!
下面我們介紹一下rcS文件
//rcS的內(nèi)容
--------------------------------------------------------------------------------
#! /bin/sh
/bin/mount -a
/sbin/ifconfig 192.168.0.1
/bin/echo "I am xiaoshou! "
--------------------------------------------------------------------------------
首先我們看到 mount -a 這個命令。這個命令依據(jù)/etc/fstab來進行掛載的操作。
接著我們來看看/etc/fstab這個文件。
--------------------------------------------------------------------------------
#/etc/fstab
none? /proc? proc defaults 0 0
none? /dev/pts devpts mode=0622 0 0
tmpfs? /dev/shm tmpfs defaults 0 0
--------------------------------------------------------------------------------
現(xiàn)在介紹一下此文件的格式:
# fstab文件的作用
文件/etc/fstab存放的是系統(tǒng)中的文件系統(tǒng)信息。當正確的設置了該文件,則可以通過"mount /directoryname"命令來加載一個文件系統(tǒng),每種文件系統(tǒng)都對應一個獨立的行,每行中的字段都有空格或tab鍵分開。同時fsck、 mount、umount的等命令都利用該程序。
# fstab文件格式
下面是/etc/fatab文件的一個示例行:
fs_spec | fs_file| fs_type| fs_options| fs_dump| fs_pass
/dev/hda1| /???? | ext2?? | defaults? | 1????? | 1
fs_spec - 該字段定義希望加載的文件系統(tǒng)所在的設備或遠程文件系統(tǒng),對于一般的本地塊設備情況來說:IDE設備
關(guān)鍵詞標簽:LINUX根文件系統(tǒng)
相關(guān)閱讀
熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP
人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址 dmidecode命令查看內(nèi)存型號 linux tc實現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關(guān)機、重啟、注銷 命令 查看linux服務器硬盤IO讀寫負載