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

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>
            欧美涩涩网站| 亚洲国产欧美日韩| 欧美精品v国产精品v日韩精品| 亚洲综合色视频| 国产午夜亚洲精品羞羞网站| 牛夜精品久久久久久久99黑人 | 欧美黄色小视频| 黄色亚洲精品| 亚洲欧洲精品一区二区精品久久久| 欧美精品二区| 久久久99国产精品免费| 欧美久久成人| 亚洲视频香蕉人妖| 欧美一区日本一区韩国一区| 亚洲欧美另类国产| 亚洲免费在线观看视频| 狠狠噜噜久久| 亚洲精品一区二区三区福利| 国产精品国产三级国产普通话99| 欧美伊久线香蕉线新在线| 久久婷婷人人澡人人喊人人爽| 99热这里只有成人精品国产| 亚洲午夜一区| 亚洲欧洲一区二区在线播放 | 国产一区二区中文字幕免费看| 麻豆免费精品视频| 欧美三级网址| 免费成人性网站| 国产精品久久久久久久久免费 | 日韩视频二区| 亚洲盗摄视频| 欧美一区二区三区免费大片| 中日韩高清电影网| 久久久久天天天天| 性做久久久久久免费观看欧美| 国产一区二区高清不卡| 亚洲精品免费在线| 久久aⅴ国产欧美74aaa| 亚洲自拍高清| 欧美激情综合色综合啪啪| 久久久另类综合| 国产精品视频导航| 亚洲人成网站999久久久综合| 国内精品久久久久久| 亚洲视频欧美视频| 亚洲视频精选| 欧美激情一二三区| 欧美国产一区在线| 狠狠色狠狠色综合系列| 午夜精品视频在线观看| 午夜精品免费| 国产精品成人一区二区三区夜夜夜| 久久久噜噜噜久久中文字幕色伊伊| 亚洲日韩欧美视频一区| 国产日韩亚洲欧美精品| 宅男噜噜噜66一区二区66| 亚洲伦理一区| 嫩草影视亚洲| 亚洲国产成人91精品| 亚洲国产三级网| 美女精品在线| 91久久国产综合久久| 亚洲精品日韩综合观看成人91| 久久一二三四| 亚洲国产日韩欧美在线动漫| 91久久国产自产拍夜夜嗨| 老司机67194精品线观看| 久久精品一区中文字幕| 国产在线高清精品| 久久久久久久性| 欧美国产精品中文字幕| 亚洲人成网站777色婷婷| 欧美激情一区二区三级高清视频| 亚洲国产天堂久久国产91| 久久久亚洲综合| 性色一区二区| 久久久中精品2020中文| 黄色日韩网站| 欧美激情性爽国产精品17p| 一区二区免费在线视频| 欧美一区影院| 在线精品视频免费观看| 嫩草影视亚洲| 亚洲午夜激情| 蜜臀va亚洲va欧美va天堂| 亚洲精品之草原avav久久| 国产精品mm| 久久免费视频一区| 日韩小视频在线观看专区| 午夜在线电影亚洲一区| 黄色亚洲在线| 欧美日韩精品免费观看视一区二区 | 欧美亚洲系列| 亚洲国产高清高潮精品美女| 亚洲一级一区| 伊人影院久久| 欧美性一二三区| 久久久精品五月天| 99国内精品| 久久手机精品视频| 亚洲视频一区二区免费在线观看| 久热精品视频在线观看| av成人动漫| 欧美视频在线一区| 久久国内精品视频| 一区二区三区回区在观看免费视频| 久久激情视频免费观看| 一区二区高清在线| 精品91在线| 国产精品一区二区三区乱码| 欧美成人黑人xx视频免费观看| 亚洲女人av| 亚洲日本无吗高清不卡| 欧美1级日本1级| 欧美在线日韩| 亚洲在线视频| 亚洲免费精彩视频| 91久久午夜| 一色屋精品视频免费看| 国产美女精品在线| 欧美视频精品在线观看| 欧美高清在线一区二区| 久久精品国产清高在天天线| 亚洲永久免费av| 亚洲视频一区二区在线观看| 91久久精品国产91久久| 欧美 日韩 国产一区二区在线视频| 欧美在线一区二区| 欧美亚洲视频| 欧美一区二区在线免费观看| 亚洲与欧洲av电影| 亚洲一二三区精品| 亚洲图片激情小说| 宅男精品视频| 亚洲午夜一区二区| 亚洲视频在线观看| 中文亚洲视频在线| 亚洲一区二区三区免费观看| 99热这里只有精品8| 9色国产精品| 欧美一二三区精品| 欧美亚洲三区| 久久成人综合视频| 久久99伊人| 久久野战av| 欧美国产成人在线| 欧美日韩999| 欧美亚洲成人免费| 国产精品一区毛片| 狠狠色综合一区二区| 伊人久久噜噜噜躁狠狠躁| 国产精品大片wwwwww| 亚洲欧美欧美一区二区三区| 激情五月综合色婷婷一区二区| 国产亚洲va综合人人澡精品| 国产色产综合产在线视频| 国语精品中文字幕| 在线免费高清一区二区三区| 亚洲国产精彩中文乱码av在线播放| 揄拍成人国产精品视频| 亚洲国产成人av好男人在线观看| 亚洲国产精品一区二区第一页| 亚洲日本电影| 亚洲一区日韩| 久久久久久综合网天天| 欧美成人免费网站| 99国内精品久久| 欧美在线3区| 欧美电影免费观看| 国产精品午夜在线| 亚洲成色www久久网站| aa国产精品| 久久影院午夜论| 亚洲精品一区久久久久久| 欧美亚洲综合久久| 欧美精品 日韩| 国产三区精品| 亚洲精品在线一区二区| 久久激情综合| 亚洲欧洲日韩女同| 午夜久久99| 欧美精品激情在线| 国产欧美一区二区在线观看| 在线视频免费在线观看一区二区| 亚洲欧美日韩国产综合在线| 久久一日本道色综合久久| 欧美日韩中国免费专区在线看| 国产伦精品一区二区三区免费| 91久久精品网| 久久久一二三| 亚洲一区二区在线播放| 欧美激情在线免费观看| 狠狠色狠狠色综合人人| 亚洲欧美日韩一区在线观看| 亚洲福利在线看| 久久高清国产| 国产乱肥老妇国产一区二| 在线视频亚洲欧美| 亚洲国产黄色片| 久久亚洲精品视频|