免费注册 查看新帖 |

Chinaunix

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

[其他] init进程之前的设备文件怎样建立的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-17 11:06 |只看该作者 |倒序浏览
比如kernel_init中,加载完所有驱动之后,如果要挂载跟文件系统的话,那么这个根文件系统的设备文件(/dev/sda2类似的)时谁创建的呢,这个时候用户态进程都还没有起,因为还没有起到用户态的init进程。

以前听说是加载驱动的时候device_add的devtmpfs_create_node创建的。但是发现以前老点的内核根本没有devtmpfs_create_node这个动作。还有现在我的内核配置CONFIG_DEVTMPFS是关闭的,devtmpfs_create_node是个空动作。
#ifdef CONFIG_DEVTMPFS
extern int devtmpfs_create_node(struct device *dev);
#else
static inline int devtmpfs_create_node(struct device *dev) { return 0; }
#

请高手看下。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
2 [报告]
发表于 2012-05-17 11:11 |只看该作者
设备号通过硬件编码或者命令行指定,设备文件现做现用,见mount_root。

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
3 [报告]
发表于 2012-05-17 11:27 |只看该作者
本帖最后由 linuxfellow 于 2012-05-17 11:34 编辑

最早是手工mknod, 有一段时间用devfs文件系统;现在用tmpdevfs文件系统

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
4 [报告]
发表于 2012-05-17 12:03 |只看该作者
回复 1# blake326
根文件设备驱动文件是用户空间代码,应该是事先建好,放在initramfs里。这就是所谓early_userspace_init.  这样做的目的就是把根设备驱动从内核转到用户。
在用户init程序创建根目录后,就用scripts把initramfs的dev挂载到根目录下。

   

论坛徽章:
0
5 [报告]
发表于 2012-05-17 13:04 |只看该作者
回复 4# linuxfellow


    差不多理解了,谢谢。
    首先不一定有initramfs,假设没有用initramfs的情况下:

根据命令行的参数将root设备名保存到  saved_root_name
static int __init root_dev_setup(char *line)
{
        strlcpy(saved_root_name, line, sizeof(saved_root_name));
        return 1;
}

__setup("root=", root_dev_setup);

假设没有initrd,则到prepare_namespace
void __init prepare_namespace(void) {
                ROOT_DEV = name_to_dev_t(root_device_name);

                mount_root();
}

通过name_to_dev_t到所有注册的block_device中查找,转换成相应的设备号。
然后mount_root挂载上来。

mount_root() {
        create_dev("/dev/root", ROOT_DEV);
        mount_block_root("/dev/root", root_mountflags);
}

如果用了initrd,实际不会走到mount_root。因为initrd指定的ramdisk镜像中已经存在init进程可执行文件,比如ubuntu来说,在这个用户态的init进程中切换到了/sbin/init最终的init进程,并且挂载了根文件系统。




论坛徽章:
0
6 [报告]
发表于 2012-05-17 13:10 |只看该作者
想必blake326是在arm上搞的,以前也一直捣鼓过,但是没有捣鼓清楚,今天看到了LZ的帖子,学习了。。。。。。
blake326 发表于 2012-05-17 13:04
回复 4# linuxfellow
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP