Initrd加载过程.ppt

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Initrd加载过程

Initrd的加载过程(2.4.x);什么是 Initrd 典型的系统启动顺序 函数调用关系与代码分析 ;什么是 Initrd;优点;1. bootloader将内核和initrd根文件系统加载到内存中; 2. 内核初始化 ram disk 空间并把initrd根文件系统解压释放到 ram disk 中,同时释放原initrd使用的内存; 3. initrd以读写方式被挂载; 4. 执行/linuxrc(此文件可以是任何可执行文件,如脚本。此时以uid 0运行,可以做任何初始化工作); 5. 在linuxrc中挂载真正的根文件系统; 6. linuxrc使用pivot_root系统调用把根文件系统挂载在根目录; 7. 正常的启动顺序(调用/sbin/init)在根文件系统上执行; 8. initrd文件系统被移去。;grub.conf示例;initrd-2.4.20-8.img中的/linuxrc;init目录;init(void *unused);do_basic_setup():对系统初始化,系统硬件此时只有cpu子系统在运转,内存管理和进程管理也开始工作了; prepare_namespace(void):决定根设备的挂载以及切换根文件???统; initrd_load(): 创建 ramdisk 设备文件,将initrd文件系统释放到 ramdisk 中去; handle_initrd(): 挂载 ramdisk 为根目录,执行 /linuxrc 脚本;;init()函数分析;init()函数分析(续);void prepare_namespace(void) { ... if (mount_initrd) { if (initrd_load() ROOT_DEV != MKDEV(RAMDISK_MAJOR, 0)) { handle_initrd(); goto out; } } else if (is_floppy rd_doload rd_load_disk(0)) ROOT_DEV = MKDEV(RAMDISK_MAJOR, 0); mount_root(); out: sys_umount(/dev, 0); sys_mount(., /, NULL, MS_MOVE, NULL); sys_chroot(.); mount_devfs_fs (); };static int __init initrd_load(void) { #ifdef CONFIG_BLK_DEV_INITRD create_dev(/dev/ram, MKDEV(RAMDISK_MAJOR, 0), NULL); create_dev(/dev/initrd, MKDEV(RAMDISK_MAJOR, INITRD_MINOR), NULL); #endif return rd_load_image(/dev/initrd); };static void __init handle_initrd(void) { ... pid = kernel_thread(do_linuxrc, /linuxrc, SIGCHLD); if (pid 0) { while (pid != wait(i)) yield(); } ... }

文档评论(0)

wuyoujun92 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档