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

posts - 297,  comments - 15,  trackbacks - 0
Initrd啟動及功能分析 

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

進入主題:簡單說來,initrd 主要功能就一個:找到根分區,把權力交給主系統。 
要完成這個功能,涉及的功能主要有: 
1.有基本的程序運行環境 
2.檢測存儲設備,創建設備節點 
3.檢測文件系統,掛載根文件系統 
4.將權力交給主系統的init 

一.基本的程序運行環境 
initrd 主要有兩種格式: 
1. 傳統的 ramdisk 
這種格式的好處是還可以返回到 initrd,進行些后繼的處理。 
缺點是需要內核的文件系統支持,通常會用 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的系統后 
umount /path/to 
gzip initrd 

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

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

找到根文件系統的任務通常是用shell腳本來完成,主要原因是: 
1.體積所限,通常initrd不會做很大,因為它功能很明確單一 
2.方便修改,針對不同硬件/系統通常會做一定更改,編譯型語言更改起來較麻煩 

通常使用的shell有busybox的ash,klibc的sh等。 
busybox提供很多功能,可根據自己的需要編譯,因為要支持udev等,所以推薦編譯成動態鏈接的。 
klibc是專門設計為小巧的libc,它自帶了一些程序,體積很小巧,功能相對busybox提供的不會那么多。 
還有相關的程序。對于很單一的應用用它是合適的,如果想在initrd里實現較復雜功能,使用klibc會顯得有些捉襟見肘。
對于動態鏈接的程序,需要把相應的庫和 helper 放進系統中。可用ldd實現這個功能,如: 
$ 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) 
我們也提供了一個程序來自動完成這個工作,見文后參考。 
對于klibc的,一般會有個庫文件,例如 /usr/lib/klibc/lib/klibc-KC4v-FjcUUw8mDjRL-kY8PS8U3E.so 
將此文件放在相對initrd的根目錄的 /lib 目錄下即可。 

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

二.檢測存儲設備 
早先有 devfs hotplug等來檢測,或是靜態創建加載模塊以支持存儲設備如硬盤,光盤等。 
udev的出現使這個過程轉移到用戶空間,靈活性大大增強,使這個過程能自動完成。 
對于新版的 udev (大概是>098),完成這一過程只需寫好相應的規則,有相應的模塊,執行以下命令即可自動加載模塊并創建相應的設備節點: 
# 掛載所需文件系統 
mount -t proc none /proc 
mount -t sysfs none /sys 
mount -t tmpfs -o size=10M none /dev 
# 關閉內核消息打印 
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 
# 啟動 udev 
/sbin/udevd --daemon 
/sbin/udevtrigger 
/sbin/udevsettle 

三.檢測文件系統 
由于各系統和內核的不同,掛載文件系統有時不像我們平時使用的那樣,會自動探測,可以使用udev或blkid來識別: 
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的方式來掛載文件系統, 
mount -U 
mount -L 

四.交權給主系統的init 
實現方法主要有 pivot_root 和 switch_root與 run-init。 
在這之前需要對之前掛載的虛擬文件系統與dev轉移到主系統。 
mount --move /dev /root/dev 
mount --move /proc /root/proc 
mount --move /sys /root/sys 

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

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

至此,initrd的使命完成。 
轉自:
posted on 2009-11-19 16:54 chatler 閱讀(349) 評論(0)  編輯 收藏 引用 所屬分類: Linux_SysAdmin
<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

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

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲综合社区| 鲁大师成人一区二区三区| 国产自产在线视频一区| 欧美a级片网| 欧美人妖在线观看| 性做久久久久久| 麻豆精品视频| 午夜精品在线| 久久久久高清| 亚洲一区二区在线视频| 久久久91精品国产一区二区三区| 日韩网站在线看片你懂的| 亚洲视频福利| 最新亚洲激情| 久久精品国产99国产精品| 一区二区三区高清视频在线观看| 小黄鸭精品aⅴ导航网站入口| 亚洲国产成人在线| 亚洲综合二区| 夜夜嗨网站十八久久| 久久久人人人| 欧美一区二区日韩一区二区| 欧美日本精品一区二区三区| 欧美中文字幕在线播放| 欧美激情精品久久久久久| 久久综合五月| 国产欧美一区在线| 一区二区三区视频免费在线观看| 亚洲高清视频在线观看| 久久成人精品视频| 在线一区观看| 欧美电影在线| 欧美a级大片| 精品999日本| 午夜精品视频| 亚洲欧美视频在线| 欧美日韩一视频区二区| 91久久精品国产91性色| 伊人久久亚洲热| 欧美一区二区三区日韩视频| 香蕉av777xxx色综合一区| 欧美吻胸吃奶大尺度电影| 亚洲精品国产系列| 亚洲人在线视频| 欧美成人国产一区二区| 欧美成人午夜| 亚洲国产福利在线| 麻豆成人在线| 亚洲国产精品t66y| 亚洲黑丝在线| 久久久久天天天天| 欧美电影资源| 亚洲美女色禁图| 麻豆成人小视频| 亚洲福利视频专区| 一本久久a久久精品亚洲| 欧美交受高潮1| 欧美黄色免费| 99精品国产在热久久| 欧美视频一区二区三区在线观看| 亚洲免费成人av电影| 亚洲一区二区伦理| 国产精品一区免费观看| 午夜久久美女| 欧美jizz19性欧美| 亚洲精品免费看| 国产精品一二一区| 欧美福利在线观看| 欧美午夜视频一区二区| 国产精品久久久久久久9999| 国产精品视频网| 国产区精品在线观看| 亚洲国产精品久久| 欧美一区二区三区四区在线| 女人天堂亚洲aⅴ在线观看| 国产综合久久| 亚洲一区网站| 亚洲国产高清在线| 久久大综合网| 一本大道久久a久久精二百| 国产亚洲成人一区| 欧美午夜免费影院| 免费久久99精品国产| 午夜视频一区在线观看| 99re6这里只有精品| 欧美电影在线观看| 久久夜色精品国产噜噜av| 亚洲欧美亚洲| 亚洲少妇在线| 亚洲美女视频| 最新成人av网站| 精品av久久707| 国产午夜精品一区二区三区欧美 | 亚洲作爱视频| 在线欧美不卡| 国产一区再线| 国产精品影视天天线| 欧美精品福利在线| 欧美成人精品高清在线播放| 久久夜色精品一区| 久久激情视频久久| 亚洲欧美日韩视频一区| 亚洲图片欧美午夜| 一本久道久久综合狠狠爱| 亚洲三级免费| 欧美二区在线观看| 欧美韩日高清| 欧美黄色免费网站| 亚洲高清不卡在线| 亚洲高清不卡av| 亚洲欧洲日韩在线| 亚洲日本成人在线观看| 亚洲精品在线电影| 亚洲精品视频免费| 在线综合亚洲| 亚洲免费视频一区二区| 午夜一区二区三视频在线观看| 亚洲永久字幕| 欧美一区二区视频在线观看| 性做久久久久久久久| 久久精品观看| 免费看黄裸体一级大秀欧美| 欧美大片在线观看一区| 欧美日韩视频第一区| 国产精品每日更新| 韩日视频一区| 亚洲精品久久久久| 在线视频欧美日韩| 亚洲自拍偷拍网址| 欧美一级欧美一级在线播放| 久久久噜噜噜久久中文字幕色伊伊| 老司机久久99久久精品播放免费 | 中文亚洲免费| 亚洲综合色网站| 久久成人免费电影| 欧美成人高清视频| 99在线精品免费视频九九视| 亚洲免费一级电影| 美女主播视频一区| 欧美婷婷六月丁香综合色| 国产色综合久久| 最新国产成人在线观看| 亚洲免费婷婷| 欧美第十八页| 亚洲视频欧美视频| 久久综合网络一区二区| 国产精品国产三级国产专播精品人 | 欧美激情乱人伦| 国产精品红桃| 亚洲成人在线免费| 亚洲欧美激情视频在线观看一区二区三区 | 久久久久成人精品免费播放动漫| 欧美成人性生活| 一区二区高清在线| 久久婷婷综合激情| 国产精品久久久久久一区二区三区 | 久久精品中文字幕免费mv| 亚洲国产精品久久人人爱蜜臀| 亚洲午夜一级| 欧美精品成人一区二区在线观看 | 久久国产精品亚洲77777| 亚洲高清自拍| 久久成年人视频| 国产精品ⅴa在线观看h| 亚洲欧洲精品一区二区三区| 欧美一区日韩一区| 日韩视频免费大全中文字幕| 久久久久久九九九九| 国产精品一区亚洲| 一区二区三区日韩| 欧美激情亚洲另类| 久久久久久97三级| 国产欧美日韩精品一区| 亚洲一区二区视频在线| 欧美国产欧美亚洲国产日韩mv天天看完整 | 一区二区三区久久| 欧美成人激情在线| 韩日精品视频| 久久电影一区| 亚洲一区二区免费| 欧美猛交免费看| 亚洲精品在线观| 欧美国产在线电影| 麻豆视频一区二区| 一区二区三区在线视频观看| 久久精品视频网| 亚洲欧美日韩在线播放| 国产精品久久久久国产a级| 一区二区电影免费观看| 91久久夜色精品国产九色| 蘑菇福利视频一区播放| 亚洲国产高清一区| 免费成人黄色| 久久综合中文色婷婷| 在线看欧美日韩| 欧美成年人视频| 欧美高清免费| 一区二区三区四区五区精品视频| 亚洲精品美女| 国产精品爱啪在线线免费观看|