青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0
Initrd啟動(dòng)及功能分析 

Initrd這個(gè)設(shè)計(jì)的初衷是用來加載額外內(nèi)核模塊供啟動(dòng)的。可以參考 內(nèi)核文檔 Documentation/initrd.txt。 
在加載完內(nèi)核后,如果存在initrd,則會(huì)執(zhí)行 initrd 里的 /init。(文檔里說的是/linuxrc,在 init/do_mounts_initrd.c 里也是這個(gè),在 init/main.c 里是 /init,具體待考。) 

進(jìn)入主題:簡(jiǎn)單說來,initrd 主要功能就一個(gè):找到根分區(qū),把權(quán)力交給主系統(tǒng)。 
要完成這個(gè)功能,涉及的功能主要有: 
1.有基本的程序運(yùn)行環(huán)境 
2.檢測(cè)存儲(chǔ)設(shè)備,創(chuàng)建設(shè)備節(jié)點(diǎn) 
3.檢測(cè)文件系統(tǒng),掛載根文件系統(tǒng) 
4.將權(quán)力交給主系統(tǒng)的init 

一.基本的程序運(yùn)行環(huán)境 
initrd 主要有兩種格式: 
1. 傳統(tǒng)的 ramdisk 
這種格式的好處是還可以返回到 initrd,進(jìn)行些后繼的處理。 
缺點(diǎn)是需要內(nèi)核的文件系統(tǒng)支持,通常會(huì)用 ext2,且更改較為麻煩。 
制作方法: 
dd if=/dev/zero of=initrd bs=1M count=8 
mkfs.ext2 -f -m 0 initrd 
mount -o loop initrd /path/to/ 
在/path/to建立好initrd的系統(tǒng)后 
umount /path/to 
gzip initrd 

2. cpio 格式 
這種格式的好處是內(nèi)核原生不需要額外的文件系統(tǒng)支持,制作也比較容易。 
制作方法: 
cd /path/to 
find . |cpio -o -H newc |gzip -c > ../initrd.gz 

如果沒有特別的需要,通常使用cpio格式。 

找到根文件系統(tǒng)的任務(wù)通常是用shell腳本來完成,主要原因是: 
1.體積所限,通常initrd不會(huì)做很大,因?yàn)樗δ芎苊鞔_單一 
2.方便修改,針對(duì)不同硬件/系統(tǒng)通常會(huì)做一定更改,編譯型語言更改起來較麻煩 

通常使用的shell有busybox的ash,klibc的sh等。 
busybox提供很多功能,可根據(jù)自己的需要編譯,因?yàn)橐С謚dev等,所以推薦編譯成動(dòng)態(tài)鏈接的。 
klibc是專門設(shè)計(jì)為小巧的libc,它自帶了一些程序,體積很小巧,功能相對(duì)busybox提供的不會(huì)那么多。 
還有相關(guān)的程序。對(duì)于很單一的應(yīng)用用它是合適的,如果想在initrd里實(shí)現(xiàn)較復(fù)雜功能,使用klibc會(huì)顯得有些捉襟見肘。
對(duì)于動(dòng)態(tài)鏈接的程序,需要把相應(yīng)的庫(kù)和 helper 放進(jìn)系統(tǒng)中。可用ldd實(shí)現(xiàn)這個(gè)功能,如: 
$ ldd /bin/busybox 
linux-gate.so.1 => (0xffffe000) 
libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7f30000) 
libm.so.6 => /lib/libm.so.6 (0xb7f0b000) 
libc.so.6 => /lib/libc.so.6 (0xb7de1000) 
/lib/ld-linux.so.2 (0xb7f73000) 
我們也提供了一個(gè)程序來自動(dòng)完成這個(gè)工作,見文后參考。 
對(duì)于klibc的,一般會(huì)有個(gè)庫(kù)文件,例如 /usr/lib/klibc/lib/klibc-KC4v-FjcUUw8mDjRL-kY8PS8U3E.so 
將此文件放在相對(duì)initrd的根目錄的 /lib 目錄下即可。 

需要的設(shè)備有: 
mknod dev/console c 5 1 
mknod dev/null c 1 3 
# 如果為ramdisk,最好創(chuàng)建它 
mknod dev/ram0 c 1 0 

二.檢測(cè)存儲(chǔ)設(shè)備 
早先有 devfs hotplug等來檢測(cè),或是靜態(tài)創(chuàng)建加載模塊以支持存儲(chǔ)設(shè)備如硬盤,光盤等。 
udev的出現(xiàn)使這個(gè)過程轉(zhuǎn)移到用戶空間,靈活性大大增強(qiáng),使這個(gè)過程能自動(dòng)完成。 
對(duì)于新版的 udev (大概是>098),完成這一過程只需寫好相應(yīng)的規(guī)則,有相應(yīng)的模塊,執(zhí)行以下命令即可自動(dòng)加載模塊并創(chuàng)建相應(yīng)的設(shè)備節(jié)點(diǎn): 
# 掛載所需文件系統(tǒng) 
mount -t proc none /proc 
mount -t sysfs none /sys 
mount -t tmpfs -o size=10M none /dev 
# 關(guān)閉內(nèi)核消息打印 
echo '0' > /proc/sys/kernel/printk 
# 一些連接 
ln -sf /proc/self/fd /dev/fd 
ln -sf /proc/self/fd/0 /dev/stdin 
ln -sf /proc/self/fd/1 /dev/stdout 
ln -sf /proc/self/fd/2 /dev/stderr 
ln -sf /proc/kcore /dev/core 
# 啟動(dòng) udev 
/sbin/udevd --daemon 
/sbin/udevtrigger 
/sbin/udevsettle 

三.檢測(cè)文件系統(tǒng) 
由于各系統(tǒng)和內(nèi)核的不同,掛載文件系統(tǒng)有時(shí)不像我們平時(shí)使用的那樣,會(huì)自動(dòng)探測(cè),可以使用udev或blkid來識(shí)別: 
udev的方法: 
# /lib/udev/vol_id -t /dev/hda5 
xfs 
blkid的方法: 
# blkid 
/dev/hda1: TYPE="ntfs" 
/dev/hda5: LABEL="Gentoo" UUID="78460951-666e-4d29-9d9b-85e9a9b16b62" TYPE="xfs" 
/dev/hda6: TYPE="ntfs" 
/dev/hda8: UUID="c51d3bb4-caee-4150-ae22-7d5931db31f5" LABEL="ROOT" TYPE="reiserfs" 
/dev/hda9: LABEL="Home" UUID="89b31278-b2a3-4626-99c5-e6ca77fe60f0" TYPE="xfs" 
/dev/hda7: LABEL="swap" UUID="8686fb94-560c-4c87-97dd-c5f97bbb6c78" TYPE="swap" 

另外,我們也可以使用UUID或者LABEL的方式來掛載文件系統(tǒng), 
mount -U 
mount -L 

四.交權(quán)給主系統(tǒng)的init 
實(shí)現(xiàn)方法主要有 pivot_root 和 switch_root與 run-init。 
在這之前需要對(duì)之前掛載的虛擬文件系統(tǒng)與dev轉(zhuǎn)移到主系統(tǒng)。 
mount --move /dev /root/dev 
mount --move /proc /root/proc 
mount --move /sys /root/sys 

1.pivot_root 
傳統(tǒng)的做法是用 pivot_root,然而 pivot_root不會(huì)自動(dòng)處理很多工作,如釋放initrd所有的內(nèi)存,執(zhí)行主系統(tǒng)的init。 
使用方法如下: 
cd /root 
mkdir -p initrd 
pivot_root . initrd 
# 注意 /root 要是合法的設(shè)備掛載上的 如 /dev/sda1,如果不是這樣,將可能出現(xiàn)錯(cuò)誤。 
# 目標(biāo)目錄也需要存在,其它參閱man page 
exec chroot . sh -c 'umount /initrd; exec /sbin/init' dev/console 2>&1 
# 如果不需要清理,也可簡(jiǎn)單的運(yùn)行 
exec chroot . /sbin/init 

2.switch_root/run-init 
這兩者差別不大,前者是busybox提供的,后者是klibc的。有點(diǎn)區(qū)別的是后者可接受 - 開頭的參數(shù)。 
用法: 
cd /root 
exec switch_root . /sbin/init 
或 
exec run-init . /sbin/init --debug 

至此,initrd的使命完成。 
轉(zhuǎn)自:
posted on 2009-11-19 16:54 chatler 閱讀(345) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Linux_SysAdmin
<2010年4月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個(gè)博客還是不錯(cuò),雖然做的東西和我不大相關(guān),覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一级黄色av| 欧美欧美全黄| 亚洲成人在线免费| 亚洲精品视频在线播放| 亚洲电影自拍| 99精品国产99久久久久久福利| 亚洲精品影院| 在线中文字幕日韩| 午夜宅男久久久| 久热精品视频在线观看一区| 麻豆精品在线视频| 亚洲欧洲日本专区| 亚洲女人天堂av| 久久综合久久综合久久| 亚洲电影第1页| 亚洲日本成人| 欧美在线资源| 欧美激情精品久久久久久黑人 | 一区二区三区视频免费在线观看| 亚洲视频专区在线| 久久久噜噜噜久久人人看| 欧美国产1区2区| 国产日韩欧美精品综合| 亚洲日本中文| 久久精品99国产精品酒店日本| 欧美成人自拍| 亚洲欧美日韩综合| 欧美人在线视频| 黄色成人在线网站| 亚洲影院色无极综合| 欧美高清视频一区| 欧美中文在线视频| 国产精品视频在线观看| 亚洲美女毛片| 欧美国产精品人人做人人爱| 亚洲免费视频在线观看| 欧美片第一页| 亚洲激情在线激情| 久久亚洲欧美国产精品乐播| 亚洲综合导航| 国产精品视频99| 宅男精品导航| 亚洲黄一区二区三区| 久久在线91| 精品成人一区二区三区| 欧美在线免费播放| 亚洲免费网站| 国产精品欧美一区二区三区奶水 | 久久久久国产免费免费| 亚洲一区二区三区中文字幕| 欧美日韩三级视频| 日韩一级在线观看| 亚洲第一网站| 美女网站久久| 亚洲电影av| 欧美成人午夜视频| 看欧美日韩国产| 亚洲高清三级视频| 欧美激情亚洲激情| 免费成人高清在线视频| 亚洲国产精品999| 欧美国产日产韩国视频| 免费观看国产成人| 亚洲久色影视| 亚洲乱亚洲高清| 欧美日一区二区三区在线观看国产免| 亚洲麻豆一区| 99国产精品| 久久激情综合网| 国产主播精品| 欧美成人在线免费观看| 欧美激情久久久| 中文国产一区| 午夜精品视频在线观看一区二区| 国产日韩精品在线观看| 久久精品亚洲一区二区三区浴池| 久久国产精品高清| 亚洲高清影视| 亚洲精品乱码久久久久久蜜桃91| 欧美视频一区二区三区在线观看| 午夜视频久久久久久| 久久久av水蜜桃| 亚洲日本免费| 亚洲欧美在线x视频| 亚洲激情小视频| 亚洲午夜电影在线观看| 国内精品久久久| 亚洲七七久久综合桃花剧情介绍| 欧美体内谢she精2性欧美| 久久国内精品视频| 欧美成人免费一级人片100| 亚洲一区免费网站| 久久久最新网址| 亚洲欧美成人网| 久久裸体艺术| 亚洲欧美日韩国产一区二区三区| 久久精品亚洲精品国产欧美kt∨| aa国产精品| 久久国产夜色精品鲁鲁99| 亚洲精品在线观| 欧美尤物巨大精品爽| 99精品99| 久久亚洲国产精品一区二区| 亚洲网在线观看| 久久综合久久综合九色| 亚洲欧美日韩系列| 欧美电影在线观看| 久久女同互慰一区二区三区| 欧美日韩国产二区| 免费视频最近日韩| 国产欧美一区二区三区沐欲| 亚洲国产精品一区制服丝袜| 国产欧美日韩一区| 亚洲作爱视频| 亚洲久色影视| 另类亚洲自拍| 鲁大师成人一区二区三区| 国产乱码精品一区二区三| 99视频精品在线| 日韩视频免费观看高清在线视频| 久久精品国产一区二区三 | 亚洲国产精品女人久久久| 国产在线精品自拍| 亚洲一区二区精品在线观看| 日韩视频在线免费| 欧美成人综合| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品美女www爽爽爽| 亚洲老司机av| 亚洲无亚洲人成网站77777| 欧美激情亚洲自拍| 91久久久亚洲精品| 日韩视频一区二区三区| 亚洲丰满少妇videoshd| 黑人巨大精品欧美黑白配亚洲| 亚洲综合国产| 欧美一区二区三区日韩| 国产精品亚洲综合天堂夜夜| 亚洲深夜激情| 欧美一级片久久久久久久| 国产精品性做久久久久久| 中文日韩欧美| 久久成人av少妇免费| 国产日韩精品入口| 久久国产精品久久精品国产| 久久夜色精品| 亚洲毛片在线观看| 欧美三级电影网| 午夜国产精品视频| 久久人91精品久久久久久不卡| 国产真实久久| 你懂的国产精品永久在线| 亚洲日本免费| 亚洲欧美国产视频| 国产视频久久| 久久夜色精品国产亚洲aⅴ| 亚洲国产经典视频| 亚洲在线国产日韩欧美| 国产一区观看| 欧美大胆成人| 亚洲性xxxx| 你懂的成人av| 亚洲免费视频一区二区| 国产亚洲精品综合一区91| 久热精品视频在线| av成人免费在线| 久久久久九九视频| 亚洲精品自在在线观看| 国产精品视频第一区| 久久香蕉国产线看观看av| 夜夜夜精品看看| 美女国产精品| 午夜精品短视频| 亚洲电影免费在线观看| 欧美日韩一区在线观看视频| 欧美在线不卡| 亚洲精选视频在线| 免费成人av在线| 欧美一区二区三区视频免费播放| 在线观看91精品国产入口| 欧美午夜理伦三级在线观看| 久久久噜噜噜久久| 亚洲欧美日韩在线观看a三区| 欧美激情在线狂野欧美精品| 亚洲欧美日韩精品在线| 亚洲三级影院| 狠色狠色综合久久| 国产欧美视频一区二区三区| 欧美日本精品| 免费中文日韩| 久久久久久穴| 亚洲欧美日韩国产精品| 亚洲美女性视频| 亚洲电影在线播放| 久久综合狠狠| 久久www成人_看片免费不卡| 亚洲午夜视频在线| 亚洲天堂偷拍| av成人免费在线观看| 最新热久久免费视频|