- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Initrd的加载过程
Initrd的加载过程(2.4.x) 什么是 Initrd 典型的系统启动顺序 函数调用关系与代码分析 什么是 Initrd initrd 的英文含义是 initialized RAM disk,就是由 bootloader 初始化的内存盘。在 linux内核启动前, bootloader 会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统。 优点 把更多的内核功能条目编译成模块,减小了内核大小; 面对各种不同的硬件架构,可以使用initrd中的linuxrc按需进行模块加载以驱动硬件,从而提高kernel的可移植性。 使用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示例 1 # grub.conf generated by anaconda 2 # 3 # Note that you do not have to rerun grub after making changes to this file 4 # NOTICE: You have a /boot partition. This means that 5 # all kernel and initrd paths are relative to /boot/, eg. 6 # root (hd0,6) 7 # kernel /vmlinuz-version ro root=/dev/hda8 8 # initrd /initrd-version.img 9 #boot=/dev/hda 10 default=0 11 timeout=10 12 splashimage=(hd0,6)/grub/splash.xpm.gz 13 title Red Hat Linux (2.4.20-8) 14 root (hd0,6) 15 kernel /vmlinuz-2.4.20-8 ro root=LABEL=/ vga=0x0317 16 initrd /initrd-2.4.20-8.img 17 title DOS 18 rootnoverify (hd0,0) 19 chainloader +1 initrd-2.4.20-8.img中的/linuxrc init目录 内核初始化的源代码在 init目录下,在这个目录下共有三个文件 main.c do_mounts.c version.c initrd相关调用 do_basic_setup():对系统初始化,系统硬件此时只有cpu子系统在运转,内存管理和进程管理也开始工作了; prepare_namespace(void):决定根设备的挂载以及切换根文件系统; initrd_load(): 创建 ramdisk 设备文件,将initrd文件系统释放到 ramdisk 中去; handle_initrd(): 挂载 ramdisk 为根目录,执行 /linuxrc 脚本; init()函数分析 static int init(void * unused) { lock_kernel(); do_basic_setup(); prepare_namespace(); /* * Ok, we have completed the initial bootup, and * were essentially up and running. Get rid of the
文档评论(0)