Initrd的加载过程

Initrd的加载过程

ID:45212335

大小:284.16 KB

页数:15页

时间:2019-11-10

Initrd的加载过程_第1页
Initrd的加载过程_第2页
Initrd的加载过程_第3页
Initrd的加载过程_第4页
Initrd的加载过程_第5页
资源描述:

《Initrd的加载过程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Initrd的加载过程(2.4.x)什么是Initrd典型的系统启动顺序函数调用关系与代码分析什么是Initrdinitrd的英文含义是initializedRAMdisk,就是由bootloader初始化的内存盘。在linux内核启动前,bootloader会将存储介质中的initrd文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的initrd文件系统。优点把更多的内核功能条目编译成模块,减小了内核大小;面对各种不同的硬件架构,可以使用initrd中的linuxrc按需进行模块加载以驱动硬件,从而提高

2、kernel的可移植性。1.bootloader将内核和initrd根文件系统加载到内存中;2.内核初始化ramdisk空间并把initrd根文件系统解压释放到ramdisk中,同时释放原initrd使用的内存;3.initrd以读写方式被挂载;4.执行/linuxrc(此文件可以是任何可执行文件,如脚本。此时以uid0运行,可以做任何初始化工作);5.在linuxrc中挂载真正的根文件系统;6.linuxrc使用pivot_root系统调用把根文件系统挂载在根目录;7.正常的启动顺序(调用/sbin/init)在根文件系

3、统上执行;8.initrd文件系统被移去。使用initrd时的系统启动顺序grub.conf示例1#grub.confgeneratedbyanaconda2#3#Notethatyoudonothavetorerungrubaftermakingchangestothisfile4#NOTICE:Youhavea/bootpartition.Thismeansthat5#allkernelandinitrdpathsarerelativeto/boot/,eg.6#root(hd0,6)7#kernel/vmlinuz-

4、versionroroot=/dev/hda88#initrd/initrd-version.img9#boot=/dev/hda10default=011timeout=1012splashimage=(hd0,6)/grub/splash.xpm.gz13titleRedHatLinux(2.4.20-8)14root(hd0,6)15kernel/vmlinuz-2.4.20-8roroot=LABEL=/vga=0x031716initrd/initrd-2.4.20-8.img17titleDOS18rootno

5、verify(hd0,0)19chainloader+1initrd-2.4.20-8.img中的/linuxrcinit目录内核初始化的源代码在init目录下,在这个目录下共有三个文件main.cdo_mounts.cversion.cinit(void*unused)do_basic_setup(void)prepare_namespace()free_initmem()initrd_load()handle_initrd()rd_load_image(char*from)do_linuxrc(char*shell)i

6、nitrd相关调用do_basic_setup():对系统初始化,系统硬件此时只有cpu子系统在运转,内存管理和进程管理也开始工作了;prepare_namespace(void):决定根设备的挂载以及切换根文件系统;initrd_load():创建ramdisk设备文件,将initrd文件系统释放到ramdisk中去;handle_initrd():挂载ramdisk为根目录,执行/linuxrc脚本;init()函数分析staticintinit(void*unused){lock_kernel();do_basic_

7、setup();prepare_namespace();/**Ok,wehavecompletedtheinitialbootup,and*we'reessentiallyupandrunning.Getridofthe*initmemsegmentsandstarttheuser-modestuff..*/free_initmem();unlock_kernel();if(open("/dev/console",O_RDWR,0)<0)printk("Warning:unabletoopenaninitialconsol

8、e.");init()函数分析(续)(void)dup(0);(void)dup(0);/**Wetryeachoftheseuntilonesucceeds.**TheBourneshellcanbeusedinsteadofinitifweare*tryingtorecoverareallybr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。