网站大量收购闲置独家精品文档,联系QQ:2885784924

《ARM Linux嵌入式系统开发基础》课件第7章.ppt

《ARM Linux嵌入式系统开发基础》课件第7章.ppt

  1. 1、本文档共267页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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中,不做后续处理直接返回

文档评论(0)

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

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

1亿VIP精品文档

相关文档