国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

內(nèi)核掛載文件系統(tǒng)的幾種方式

2022-08-24 20:27 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

一、內(nèi)核掛載文件系統(tǒng)的幾種方式

1、initramfs : (內(nèi)核+cpio包編譯在一起然后一起進(jìn)行內(nèi)核壓縮)

內(nèi)核文件包含了的一個cpio歸檔文件,該歸檔文件可能被外部的一個cpio包替換由initramfs里的/init 掛真實(shí)的根文件并啟動init進(jìn)程/sbin/init initramfs和cpio-initrd的區(qū)別, initramfs是將cpio rootfs編譯進(jìn)內(nèi)核一起壓縮,而 cpio-initrd中cpio rootfs是不編譯入內(nèi)核,是外部的

2、initrd : 分cpio-initrd和 image-initrd cpio initrd (cpio包的gzip壓縮文件) 內(nèi)核將cpio initrd(由bootloader 將cpio initrd加載到內(nèi)存) 釋放到rootfs(/),結(jié)束內(nèi)核對cpio initrd的操作 cpio initrd : bios->grub-kernel>cpio initrd(加載訪問real rootfs的必備驅(qū)動等)->/init 腳本(加載real rootfs,并啟動了init進(jìn)程(/sbin/init))

image initrd (塊設(shè)備 gzip壓縮文件) 內(nèi)核將image initrd 保存在rootfs(/) 下的initrd.image中, 并將其讀入/dev/ram0中,根據(jù)root是否等于/dev/ram0做不同的處理 root != /dev/ram0 bios->grub->kernel->image initrd(加載訪問real rootfs的必備驅(qū)動) -> /linuxrc 腳本(加載real rootfs),內(nèi)核卸載/dev/ram0,釋放initrd內(nèi)存,最后內(nèi)核啟動init進(jìn)程(/sbin/init) root = /dev/ram0 bios->grub->kernel->image initrd 直接將/dev/ram0作為根文件系統(tǒng), 內(nèi)核啟動init進(jìn)程/sbin/init

3、普通塊設(shè)備掛載方式 root = /dev/mtdxxx noinitrd方式,mtd,ubi etc..直接在內(nèi)核中(根據(jù)root=xxx)掛根,并有內(nèi)核啟動init進(jìn)程/sbin/init


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實(shí)戰(zhàn)項目及代碼)? ??

?


二、initramfs文件系統(tǒng)掛載分析

1、制作cpio包,不做gzip壓縮 2、將rootfs.cpio和內(nèi)核打在一起壓縮,做成initramfs方式 相關(guān)內(nèi)核選項 CONFIG_BLK_DEV_INITRD: CONFIG_INITRAMFS_SOURCE rootfs.cpio

3、uboot下環(huán)境參數(shù),不需要特別的參數(shù)

4、分析initramfs掛載( 內(nèi)核+cpio包編譯在一起然后一起進(jìn)行內(nèi)核壓縮的方式) 一、boot loader 把內(nèi)核(包含rootfs.cpio) 加載到內(nèi)存中,并解壓內(nèi)核

二、建立rootfs文件系統(tǒng)

start_kernel ->-vfs_caches_init --->mnt_init ---->init_rootfs ---->init_mount_tree

三、將initrd-cpio釋放到rootfs中

kernel_init->kernel_init_freeable()--->do_basic_setup(); /執(zhí)行驅(qū)動模塊、 rootfs_initcall(populate_rootfs); init/initramfs.c /* 將initrd釋放到rootfs中 */

initramfs直接解壓到rootfs中

char err = unpack_to_rootfs(__initramfs_start,__initramfs_end - __initramfs_start); / initramfs, 直接將cpio包編譯進(jìn)內(nèi)核,一起做壓縮 */

__initramfs_start/__initramfs_end 在內(nèi)核編譯的過程中生成,定義在vmlinux.lds.S SECTIONS { #ifdef CONFIG_BLK_DEV_INITRD . = ALIGN(32); __initramfs_start = .; usr/built-in.o(.init.ramfs) __initramfs_end = .; #endif } cat System.map | grep _initramfsc0025b00 T __initramfs_start c0442f00 T __initramfs_end

S3C2440內(nèi)核啟動時打印出來的值如下 __initramfs_end : 0xc0442f00 __initramfs_start :0xc0025b00 0x41D400 = 4314112

-rwxrwxrwx 1 smb smb 4314112 2月 27 10:58 rootfs.cpio

三、直接執(zhí)行/init

注:initramfs以及cpio-initrd都不會走kernel_init --> prepare_namespace() --> initrd_load() /* image-initrd和普通塊設(shè)備會走prepare_namespace */

未確認(rèn)的問題

1、initramfs 中cpio包是否有大小限制

2、系統(tǒng)起來后往rootfs下拷入數(shù)據(jù),rootfs內(nèi)存的增長方式




內(nèi)核掛載文件系統(tǒng)的幾種方式的評論 (共 條)

分享到微博請遵守國家法律
嵊泗县| 娱乐| 新民市| 诏安县| 旺苍县| 青田县| 冀州市| 特克斯县| 新乡市| 搜索| 永年县| 新密市| 新巴尔虎左旗| 建始县| 漳平市| 新巴尔虎左旗| 漳浦县| 泸定县| 汶上县| 上杭县| 鱼台县| 绿春县| 年辖:市辖区| 宜兰市| 宜兰县| 祁门县| 隆昌县| 通化市| 安化县| 花莲县| 响水县| 西和县| 舒城县| 巴东县| 余干县| 延津县| 天全县| 岐山县| 贡觉县| 雷州市| 光山县|