免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1389 | 回复: 3
打印 上一主题 下一主题

[内核模块] 根文件系统挂接问题 [复制链接]

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-10 11:15 |只看该作者 |倒序浏览
下面根文件系统挂处理的代码我以为看得比较明白,但经不住推敲。 问题在里面
int __init initrd_load(void)
109{
110        if (mount_initrd) {
111                create_dev("/dev/ram", Root_RAM0);
             创建”/dev/ram0”设备
112                /*
113                 * Load the initrd data into /dev/ram0. Execute it as initrd
114                 * unless /dev/ram0 is supposed to be our actual root device,
115                 * in that case the ram disk is just set up here, and gets
116                 * mounted in the normal path.
117                 */
118                if (rd_load_image("/initrd.image") && ROOT_DEV != Root_RAM0) {
119                        sys_unlink("/initrd.image");
120                        handle_initrd();
121                        return 1;
122                }
123        }
124        sys_unlink("/initrd.image");
125        return 0;
126}

下面是 handle_initrd:
static void __init handle_initrd(void)
  39{
  40        int error;
  41        int pid;
  42
  43        real_root_dev = new_encode_dev(ROOT_DEV);
  44        create_dev("/dev/root.old", Root_RAM0);
     这里创建”/dev/root.old0”设备.这个设备与前一设备"/dev/ram0"应该是一回事;为什么要创建2次??
  45        /* mount initrd on rootfs' /root */
  46        mount_block_root("/dev/root.old", root_mountflags & ~MS_RDONLY);
  47        sys_mkdir("/old", 0700);
  48        root_fd = sys_open("/", 0, 0);
  49        old_fd = sys_open("/old", 0, 0);
  50        /* move initrd over / and chdir/chroot in initrd root */
  51        sys_chdir("/root");
  52        sys_mount(".", "/", NULL, MS_MOVE, NULL);
  53        sys_chroot(".");

论坛徽章:
0
2 [报告]
发表于 2012-05-10 11:50 |只看该作者

第一次建立的

                create_dev("/dev/ram", Root_RAM0);


if (rd_load_image("/initrd.image")...

调用后

int __init rd_load_image(char *from)
...
        sys_unlink((const char __user __force *) "/dev/ram");
...

被删除。

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
3 [报告]
发表于 2012-05-10 12:19 |只看该作者
回复 2# hk1980
多谢! 看得时候没这么仔细,把unlink漏掉了。

   

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2012-12-27 14:33 |只看该作者
create_dev("/dev/ram", Root_RAM0);
create_dev("/dev/root.old", Root_RAM0);


为什么要创建设备文件??
在 populate_rootfs()中已经将将这个文件放到虚拟根文件系统中来了啊,
/initrd.image
请高手指点,多谢!

  1. void __init populate_rootfs(void)
  2. {
  3.         char *err = unpack_to_rootfs(__initramfs_start,
  4.                          __initramfs_end - __initramfs_start, 0);
  5.         if (err)
  6.                 panic(err);
  7. #ifdef CONFIG_BLK_DEV_INITRD
  8.         if (initrd_start) {
  9.                 int fd;
  10.                 printk(KERN_INFO "checking if image is initramfs...");
  11.                 err = unpack_to_rootfs((char *)initrd_start,
  12.                         initrd_end - initrd_start, 1);
  13.                 if (!err) {
  14.                         printk(" it is\n");
  15.                         unpack_to_rootfs((char *)initrd_start,
  16.                                 initrd_end - initrd_start, 0);
  17.                         free_initrd_mem(initrd_start, initrd_end);
  18.                         return;
  19.                 }
  20.                 printk("it isn't (%s); looks like an initrd\n", err);
  21.                 fd = sys_open("/initrd.image", O_WRONLY|O_CREAT, 700);<--------------------这个文件
  22.                 if (fd >= 0) {
  23.                         sys_write(fd, (char *)initrd_start,
  24.                                         initrd_end - initrd_start);
  25.                         sys_close(fd);
  26.                         free_initrd_mem(initrd_start, initrd_end);
  27.                 }
  28.         }
  29. #endif
  30. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP