文件是 android源码下:路径system\core\init\init.c
int main(int argc, char **argv)
{
    int fd_count = 0;
    struct pollfd ufds[4];
    char *tmpdev;
    char* debuggable;
    char tmp[32];
    int property_set_fd_init = 0;
    int signal_fd_init = 0;
    int keychord_fd_init = 0;    if (!strcmp(basename(argv[0]), "ueventd"))
        return ueventd_main(argc, argv);    /* clear the umask */
    umask(0);        /* Get the basic filesystem setup we need put
         * together in the initramdisk on / and then we'll
         * let the rc file figure out the rest.
         */
    mkdir("/dev", 0755);
    mkdir("/proc", 0755);
    mkdir("/sys", 0755);    mount("tmpfs", "/dev", "tmpfs", 0, "mode=0755");
    mkdir("/dev/pts", 0755);
    mkdir("/dev/socket", 0755);
    mount("devpts", "/dev/pts", "devpts", 0, NULL);
    mount("proc", "/proc", "proc", 0, NULL);
    mount("sysfs", "/sys", "sysfs", 0, NULL);这个就是ramdisk中的init进程。为什么在main开始后还要建立如 /dev /proc /sys
这些文件?
是不是应为ramfs里面没有这些目录吗?谢谢。
androidinit进程

解决方案 »

  1.   

    ramfs不是和tmpfs一样,是一种文件系统吗?跟目录有啥关系?
      

  2.   

    你可以参考该博客,获取可以解答你的疑问:
    http://goo.gl/sliY7
      

  3.   

    是这样:
    开启启动 然后挂某一个设备为根文件系统。这个文件系统(ramdisk)中执行目录下的init进程。这个init进程就是system\core\init\init.c中main函数的二进制文件?不知道这样理解对吗。
    prepare_namespace()之后执行:
             run_init_process("/sbin/init");
    run_init_process("/etc/init");
    run_init_process("/bin/init");
    run_init_process("/bin/sh");
    在这个init的进程中同样又去建立 sys dev proc 等目录。如果这个ramdisk中有了 dev sys proc等目录,是不是在这个init中就没有必要再去做一遍同样的事情。同样引申出 我的问题:1,通常boot传递参数的时候会制定文件系统 比如 root = mtdxx等。这时候系统启动的时候是先挂载ramdisk为根文件系统,还是直接挂在uboot参数传递过来的设备为根文件系统?
    2,查看板子起来以后的文件以及文件目录 发现一个system的目录。这个是后续挂在上去的?刚接触android不久,问题可能有点初级。谢谢
      

  4.   

    ramdisk是第一个挂载的文件系统。在你的编译目录里面有个 rootdir目录应该就是ramdisk目录,这部分包含在boot.img里面
    system是通过init。rc脚本mount上去的。你问的问题不是初级的,是有技术含量的。