- 1、本文档共267页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
handle_initrd()函数负责对Initrd具体处理,代码如下:
01 staticvoid__inithandle_initrd(void){
02 real_root_dev=new_encode_dev(ROOT_DEV);
create_dev(/dev/root.old,Root_RAM0,NULL);
mount_block_root(/dev/root.old,
03 root_mountflags~MS_RDONLY);
sys_mkdir(/old,0700);
root_fd=sys_open(/,0,0);
old_fd=sys_open(/old,0,0);
04 *moveinitrdover/andchdir/chrootininitrdroot*/
ys_chdir(/root);
sys_mount(.,/,NULL,MS_MOVE,NULL);
sys_chroot(.);
05 mount_devfs_fs();
pid=kernel_thread(do_linuxrc,/linuxrc,SIGCHLD);
if(pid0)
{
while(pid!=sys_wait4(-1,i,0,NULL))
yield();
}
/*moveinitrdtorootfs‘/old*/
sys_fchdir(old_fd);
sys_mount(“/”,“.”,NULL,MS_MOVE,NULL);
06 /*switchrootandcwdbackto/ofrootfs*/
sys_fchdir(root_fd);
sys_chroot(“.”);
sys_close(old_fd);
sys_close(root_fd); 07 umount_devfs(“/old/dev”);
if(new_decode_dev(real_root_dev)==Root_RAM0)
{sys_chdir(/old);
08 return; }
09 ROOT_DEV=new_decode_dev(real_root_dev);
10 mount_root();
printk(KERN_NOTICETryingtomoveoldrootto/initrd...);
error=sys_mount(/old,/root/initrd,NULL,MS_MOVE,NULL);
if(!error) printk(okay\n);else{intfd=sys_open(/dev/root.old,O_RDWR,0); printk(failed\n);
printk(KERN_NOTICEUnmountingoldroot\n);
sys_umount(/old,MNT_DETACH);
printk(KERN_NOTICETryingtofreeramdiskmemory...);
if(fd0){ error=fd; }
else{error=sys_ioctl(fd,BLKFLSBUF,0);
sys_close(fd); }
printk(!error?okay\n:failed\n); } andle_initrd函数的主要功能是执行Initrd的linuxrc文件,并且将realfs的根目录设置为当前目录。
代码01:real_root_dev是一个全局变量,保存的是realfs的设备号。
代码02:调用mount_block_root函数,将initrd文件系统挂载到VFS的/root目录下。
代码03:提取rootfs的根的文件描述符并将其保存到root_fd。作用为切换根文件系统到Initrd的文件系统,处理完Initrd之后,返回rootfs。。
代码04:chroot进入Initrd的文件系统。前面Initrd已挂载到rootfs的/root目录。
代码05:执行Initrd的Linuxrc文件,等待其结束。
代码06:Initrd处理完之后,重新切换根文件系统进入rootfs。
代码07:如果real_root_dev在linuxrc中重新设成Root_RAM0,则Initrd就是最终的realfs,改变当前目录到Initrd中,不做后续处理直接返回
您可能关注的文档
- 《单片机原理及应用》课件第7章 单片机并行扩展技术new.ppt
- 《单片机原理与应用》课件第7章.ppt
- 《OrCAD和PADS Layout电路设计与实践》课件第12章.ppt
- 《OrCAD和PADS Layout电路设计与实践》课件第11章.ppt
- 《SolidWorks机械设计基础教程》课件第4章.ppt
- 《OrCAD和PADS Layout电路设计与实践》课件第6章.ppt
- 《单片机实验与实训指导》课件第4章.ppt
- 《OrCAD和PADS Layout电路设计与实践》课件第14章.ppt
- 《OrCAD和PADS Layout电路设计与实践》课件第7章.ppt
- 《ARM Linux嵌入式系统开发基础》课件第2章.ppt
文档评论(0)