精华内容
下载资源
问答
  • 根文件系统

    千次阅读 2016-08-20 14:58:48
    kernel执行需要一个根文件系统 以下制作的根文件系统, 是由busybox制作而成 下载busybox wget https://busybox.net/downloads/busybox-1.25.0.tar.bz2 解压 tar jxvf busybox-1.25.0.tar.bz2 配置  make ...

    kernel执行需要一个根文件系统

    以下制作的根文件系统, 是由busybox制作而成


    下载busybox

    wget https://busybox.net/downloads/busybox-1.25.0.tar.bz2


    解压

    tar jxvf busybox-1.25.0.tar.bz2


    配置

     make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig

    做如下配置:
    Busybox Settings  --->
        Build Options  --->
            [*] Build BusyBox as a static binary (no shared libs)
            (arm-linux-gnueabi-) Cross Compiler prefix


    编译

     make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm



    参考:

    http://www.cnblogs.com/pengdonglin137/p/5023342.html

    安装

    make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm install


    使用如下脚本来制作根文件系统

    #!/bin/bash
    
    sudo rm -rf rootfs
    sudo rm -rf tmpfs
    sudo rm -f a9rootfs.ext3
    
    sudo mkdir rootfs
    sudo cp busybox-1.25.0/_install/*  rootfs/ -raf
    
    sudo mkdir -p rootfs/proc/
    sudo mkdir -p rootfs/sys/
    sudo mkdir -p rootfs/tmp/
    sudo mkdir -p rootfs/root/
    sudo mkdir -p rootfs/var/
    sudo mkdir -p rootfs/mnt/
    
    sudo cp etc rootfs/ -arf
    
    sudo cp -arf /usr/arm-linux-gnueabi/lib rootfs/
    
    sudo rm rootfs/lib/*.a
    sudo arm-linux-gnueabi-strip rootfs/lib/*
    
    sudo mkdir -p rootfs/dev/
    sudo mknod rootfs/dev/tty1 c 4 1
    sudo mknod rootfs/dev/tty2 c 4 2
    sudo mknod rootfs/dev/tty3 c 4 3
    sudo mknod rootfs/dev/tty4 c 4 4
    sudo mknod rootfs/dev/console c 5 1
    sudo mknod rootfs/dev/null c 1 3
    
    sudo dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32
    sudo mkfs.ext3 a9rootfs.ext3
    
    sudo mkdir -p tmpfs
    sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
    sudo cp -r rootfs/*  tmpfs/
    sudo umount tmpfs
    
    sudo chown fantasy a9rootfs.ext3
    sudo chgrp fantasy a9rootfs.ext3

    其中,etc下是启动配置文件,可以的到这里下载:

    http://files.cnblogs.com/files/pengdonglin137/etc.tar.gz


    qemu运行命令

    qemu-system-arm \
        -M vexpress-a9 \
        -m 512M \
        -kernel linux-3.16.36/out_vexpress_3_16/arch/arm/boot/zImage \
        -nographic \
        -append "root=/dev/mmcblk0 rw console=ttyAMA0" \
        -sd ./a9rootfs.ext3

    展开全文
  • 虚拟根文件系统与真实根文件系统

    千次阅读 2016-05-05 09:21:21
    引言:根文件系统的noinitramfs已经分析,继续上文未完的initramfs和Android根文件系统分析,这两者有什么关系?1.initramfs对于initramfs,kernel 2.5开始引入,其实质是在内核镜像中附加一个cpio包(cpio一个用于...

    引言:根文件系统的noinitramfs已经分析,继续上文未完的initramfs和Android根文件系统分析,这两者有什么关系?

    1.initramfs、initrd

    对于initramfs,kernel 2.5开始引入,其实质是在内核镜像中附加一个cpio包(cpio一个用于备份、还原的工具,主要用于cpio和tar文件,其实质是文件、目录、节点的描述语言包),在该cpio包中包含了一个小型的文件系统。当内核启动时,会尝试解开这人 cpio包,并且将其中包含的文件系统安装到rootfs中,内核中的一部分初始化代码会放到这个文件系统中,一般为用户空间的init进程。
    initamfs的引入可以精简内核的初始化代码,同时是为了更方便地定制内核的初始化过程。这种方式的rootfs是包含在kernel image(即bootimage或secbootimage)之中的。

    先看下initramfs的初始化代码:

    static int __init populate_rootfs(void)
    {
        char *err = unpack_to_rootfs(__initramfs_start,
                 __initramfs_end - __initramfs_start, 0);
    #ifdef CONFIG_BLK_DEV_RAM
        if (initrd_start) {
            err = unpack_to_rootfs((char *)initrd_start,
                initrd_end - initrd_start, 1);
            if (!err) {
                printk(" it is\n");
                unpack_to_rootfs((char *)initrd_start,
                    initrd_end - initrd_start, 0);
                free_initrd();
                return 0;
            }
            printk("it isn't (%s); looks like an initrd\n", err);
            fd = sys_open("/initrd.image", O_WRONLY|O_CREAT, 0700);
            if (fd >= 0) {
                sys_write(fd, (char *)initrd_start,
                        initrd_end - initrd_start);
                sys_close(fd);
                free_initrd();
            }
    #else
            printk(KERN_INFO "Unpacking initramfs...");
            err = unpack_to_rootfs((char *)initrd_start,
                initrd_end - initrd_start, 0);
            if (err)
                panic(err);
            printk(" done\n");
            free_initrd();
    #endif
        }
        return 0;
    }
    rootfs_initcall(populate_rootfs);

    根据前文分析,populate_rootfs将会在kernel_init中被调用,主要功能集中在static char * __init unpack_to_rootfs(char *buf, unsigned len, int check_only)函数中,该函数根据check_only这一参数来确定解压cpio包或者检查是否为cpio包。
    其具体实现过程为:

    static char * __init unpack_to_rootfs(char *buf, unsigned len, int check_only) {
        dry_run = check_only;
        state = Start;
        written = write_buffer(buf, len);
    }
    
    static int __init write_buffer(char *buf, unsigned len) {
        while (!actions[state]())
            ;
        return len - count;
    }
    
    static __initdata int (*actions[])(void) = {
        [Start]     = do_start,
        [GotHeader] = do_header,
    };
    static int __init do_start(void) {
        read_into(header_buf, 110, GotHeader);
        return 0;
    }
    static int __init do_header(void) {
        if (dry_run) {
            read_into(name_buf, N_ALIGN(name_len), GotName);
            return 0;
        }
    }

    以上函数可以看到如果dry_run为1,即check_only为1时,只做检查是否为cpio包。
    继续分析populate_rootfs流程,这里根据宏CONFIG_BLK_DEV_RAM涉及到两种文件包:initramfs和initrd,两者的特点如下:
    对于initramfs:

    • cpio-initramfs格式
    • ram filesystem支持
    • 编译时与内核链接成一个文件,链接地址为__initramfs_start
    • 由bootloader加载到内存中,解压后所占空间(__initramfs_end- __initramfs_start)会保留
    • 可以不依赖ram disk
    • 使用方便,不需要额外挂载文件系统,但体积稍大
    • 一般需要有/init可执行文件

    对于initrd:

    • 可以是cpio-initrd格式,也可以是image-initrd格式
    • ram filesystem支持
    • 单独编译生成一个文件
    • 由bootloader单独加载到内存中,不在内核镜像地址空间
    • 通过”initrd=initns”命令,可以找到 initrd
    • initrd处理后的空间内存可以被释放
    • initrd是ramdisk镜像文件,必须配置CONFIG_BLK_DEV_RAM支持ram disk
    • 需要配置ram disk分区大小,默认4MB
    • 需要ex2等文件系统驱动支持
    • 需要传入根文件系统地址、大小(与ramdisk大小一致)、ramdisk设备节点

    2.解压initramfs、initrd文件

    对于这几种格式的文件,populate_rootfs进行了不同处理,主要逻辑为:
    1)解压initramfs到根文件系统下,如果initramfs不存在,__initramfs_start和__initramfs_end的值相等,即参数 len=0,unpack_to_rootfs不会做任何处理。
    2)对于cpio-initrd,直接将其解压到根目录。
    3)对于image-initrd,将其解压成/initrd.image。

    处理完成后回到kernel_init中:

    static int __init kernel_init(void * unused)
    {
        do_basic_setup();
        /*
         * check if there is an early userspace init.  If yes, let it
         * do all the work
         */
    
        if (!ramdisk_execute_command)
            ramdisk_execute_command = "/init";
    
        if (sys_access((const char __user *) ramdisk_execute_command, 0) != 0) {
            ramdisk_execute_command = NULL;
            prepare_namespace();
        }
        init_post();

    对于initramfs和cpio-initrd的情况,如果虚拟文件系统中存在ramdisk_execute_command指定的文件:
    (该文件由cmdline传递,如cmdline=”initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M”)
    则直接转向init_post()来执行,否则执行函数prepare_namespace()。

    在init_post()中,会执行传入的ramdisk_execute_command,所以该文件必须是一个可执行文件,在Android系统中为用户空间的init进程,也可以为init.sh shell脚本。此后,会切换到实际根目录文件系统,后边分析Android的init进程时也加以说明。
    run_init_process(ramdisk_execute_command);

    如果为image-initrd的情况,会调用 prepare_namespace

    /*
     * Prepare the namespace - decide what/where to mount, load ramdisks, etc.
     */
    void __init prepare_namespace(void)
    {
        int is_floppy;
    
        if (root_delay) {
            printk(KERN_INFO "Waiting %dsec before mounting root device...\n",
                   root_delay);
            ssleep(root_delay);
        }
    
        /*
         * wait for the known devices to complete their probing
         *
         * Note: this is a potential source of long boot delays.
         * For example, it is not atypical to wait 5 seconds here
         * for the touchpad of a laptop to initialize.
         */
        wait_for_device_probe();
    
        md_run_setup();
    
        if (saved_root_name[0]) {
            root_device_name = saved_root_name;
            if (!strncmp(root_device_name, "mtd", 3) ||
                !strncmp(root_device_name, "ubi", 3)) {
                mount_block_root(root_device_name, root_mountflags);
                goto out;
            }
            ROOT_DEV = name_to_dev_t(root_device_name);
            if (strncmp(root_device_name, "/dev/", 5) == 0)
                root_device_name += 5;
        }
    
        if (initrd_load())
            goto out;
    
        /* wait for any asynchronous scanning to complete */
        if ((ROOT_DEV == 0) && root_wait) {
            printk(KERN_INFO "Waiting for root device %s...\n",
                saved_root_name);
            while (driver_probe_done() != 0 ||
                (ROOT_DEV = name_to_dev_t(saved_root_name)) == 0)
                msleep(100);
            async_synchronize_full();
        }
    
        is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR;
    
        if (is_floppy && rd_doload && rd_load_disk(0))
            ROOT_DEV = Root_RAM0;
    
        mount_root();
    out:
        sys_mount(".", "/", NULL, MS_MOVE, NULL);
        sys_chroot(".");
    }

    这段代码有不少注释供理解,总体思路为:
    等待/dev下的块设备驱动注册完毕,该设备由cmdline指定,然后提取image-initrd虚拟根文件系统VFS到根目录下,然后挂载根文件系统的设备到/root,并将真实根文件系统顶层目录移动到/目录下,最后将当前目录作为根目录,这样就从虚拟根文件系统切换到真实的根文件系统。
    疑问1:那虚拟的根文件系统还存在吗?
    疑问2:如何访问image-initrd这个文件内容?
    对于问题2,需要查看代码rd_load_image("/initrd.image"),这里会将initrd.image的内容写入”/dev/ram”,如果/真实根文件系统配置为/dev/ram的话,则直接使用initrd作为真实根文件系统。
    对于问题1,答案是存在,内核用/old和old_fd保存了虚拟根文件系统的切换环境。

    好了,关于VRFS和RRFS就梳理到这儿,当然还有许多细节值得推敲,这里提到了关于Android根文件系统,也开始慢慢切入正题。

    展开全文
  • Linux之文件系统和根文件系统

    千次阅读 2015-06-30 13:56:08
    在学习Linux的过程中,会遇到“文件系统”和“根文件系统”两个概念,这两个概念容易混淆,总觉得为什么Linux需要这么多的文件系统,这两种系统的各自作用是什么,有什么区别呢?  “尽管内核是Linux的核心,但...

        在学习Linux的过程中,会遇到“文件系统”和“根文件系统”两个概念,这两个概念容易混淆,总觉得为什么Linux需要这么多的文件系统,这两种系统的各自作用是什么,有什么区别呢?

        “尽管内核是Linux的核心,但文件却是用户与操作系统交互所采用的主要工具”,这就阐述了“文件系统”的作用,如果只有Linux,没有文件系统,那么整个系统是没有意义的。

         在Linux中,有“VFS”的概念,这个VFS是底层文件系统的通用接口,VFS会抽象到各个文件系统,虽然各种文件系统的差异很大,但是各种文件系统会抽象出同样的访问接口,然后抽象到VFS,普通的文件系统其实是对应存储设备的,通过这些普通文件系统,来实现对存储设备的管理和使用。

    根文件系统首先也是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,而且相对于普通文件系统,它的特殊之处在于,它是内核启动所“挂载mount”的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会再根文件系统挂载之后从中把一些初始化脚本(如rcs,inittab)和服务加载到内存中运行,在嵌入式系统中,只是将内核下载到开发板上,是无法真正的启动Linux系统的,会出现无法加载文件系统的错误。

    根文件系统中有一个“根”,说明它是加载其他文件系统的“根”,既然是根,如果没有这个根,其他的文件系统也就没有办法进行加载了,根文件系统引导和使其他文件系统得以mount所必须的文件,根文件系统包括Linux启动时所必须的目录和关键性文件,例如Linux启动时都需要的init目录下的相关文件,在Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了很多应用程序bin目录等,然和包括这些Linux系统启动所必须的文件都可以成文跟文件系统。

    Linux在启动时,第一个必须挂载的是根文件系统,弱系统不能从指定的设备上挂载根文件系统,则系统会出错而退出启动。成功后,可以自动或者手动挂载其他文件系统,因此,一个系统中可以同时存在不同的文件系统,这都是使用VFS机制实现的。

    在Linux中,将一个文件系统与一个存储设备关联起来的过程称为“挂载”,使用指令“mount”,使用mount指令将一个文件系统附着到当前文件系统的层次结构中(根),在执行挂装时,要提供文件系统类型、文件系统和一个挂载点,根文件系统被挂装到根目录“/”上后,在根目录下就有根文件系统的各个目录,文件:/bin/sbin/mnt等,再将其他分区挂装到/mnt目录上。

    展开全文
  • 浅谈linux中的根文件系统(rootfs的原理和介绍)

    万次阅读 多人点赞 2017-10-04 22:37:53
    linux中有一个让很多初学者都不是特别清楚的概念,叫做“根文件系统”。我接触linux前前后后也好几年了,但是对这个问题,至今也不是特别的清楚,至少没法向其他初学者们给出一个很全面很到位的解释。于是,今天我们...

    linux中有一个让很多初学者都不是特别清楚的概念,叫做“根文件系统”。我接触linux前前后后也好几年了,但是对这个问题,至今也不是特别的清楚,至少没法给出一个很全面很到位的解释。于是,今天我们就来理一理这个话题。

    一、先交代一下文件系统

    在开始讨论根文件系统这个话题之前,我们必首先交代一下文件系统这个概念。毕竟,根文件系统只是文件系统中的一种比较特殊的形式而已。根据伟大的百度百科:

    文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操作和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

    文件系统的重要性,我想大家都很清楚,不用多说了。这里有一句话,我觉得非常精辟而且到位的点出了文件系统在linux中的重要性:

    尽管内核是linux的核心,但文件却是用户与操作系统交互所采用的主要工具。这对linux来说尤其如此,这是因为在UNIX传统中,它使用文件I/O机制管理硬件设备和数据文件。

    二、什么是根文件系统

    然后来解释一下“根文件系统”这个名词的基本概念。同样引自百度百科的解释:

    根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。

    展开来细说就是,根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。我们要明白文件系统和内核是完全独立的两个部分。在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系统的错误。

    三、根文件系统为什么这么重要

    根文件系统之所以在前面加一个”根“,说明它是加载其它文件系统的”根“,那么如果没有这个根,其它的文件系统也就没有办法进行加载的。

    根文件系统包含系统启动时所必须的目录和关键性的文件,以及使其他文件系统得以挂载(mount)所必要的文件。例如:

    1. init进程的应用程序必须运行在根文件系统上;
    2. 根文件系统提供了根目录“/”;
    3. linux挂载分区时所依赖的信息存放于根文件系统/etc/fstab这个文件中;
    4. shell命令程序必须运行在根文件系统上,譬如ls、cd等命令;

    总之:一套linux体系,只有内核本身是不能工作的,必须要rootfs(上的etc目录下的配置文件、/bin /sbin等目录下的shell命令,还有/lib目录下的库文件等···)相配合才能工作。

    Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。成功之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。在 Linux 中将一个文件系统与一个存储设备关联起来的过程称为挂载(mount)。使用 mount 命令将一个文件系统附着到当前文件系统层次结构中(根)。在执行挂装时,要提供文件系统类型、文件系统和一个挂装点。根文件系统被挂载到根目录下“/”上后,在根目录下就有根文件系统的各个目录,文件:/bin /sbin /mnt等,再将其他分区挂接到/mnt目录上,/mnt目录下就有这个分区的各个目录和文件。

    四、如何在内核中挂载根文件系统

    init/main.c->

    start_kernel()->vfs_caches_init(totalram_pages)–>

    mnt_init()–>

    /* sysfs用来记录和展示linux驱动模型,sysfs先于rootfs挂载是为全面展示linux驱动模型做好准备 /
         /
    mnt_init()调用sysfs_init()注册并挂载sysfs文件系统,然后调用kobject_create_and_add()创建fs目录 */
         sysfs_init();

    /* init_rootfs()注册rootfs,然后调用init_mount_tree()挂载rootfs */
         init_rootfs();

    init_mount_tree();

    1、sysfs文件系统目前还没有挂载到rootfs的某个挂载点上,后续init程序会把sysfs挂载到rootfs的sys挂载点上;

    2、rootfs是基于内存的文件系统,所有操作都在内存中完成;也没有实际的存储设备,所以不需要设备驱动程序的参与。基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘文件系统。

    start_kernel
      vfs_caches_init
        mnt_init
          init_rootfs注册rootfs文件系统
          init_mount_tree 挂载rootfs文件系统
            vfs_kern_mount
              mount_fs
                type->mount其实是rootfs_mount
                  mount_nodev
                    fill_super 其实是ramfs_fill_super
                      inode = ramfs_get_inode(sb, NULL, S_IFDIR | fsi->mount_opts.mode, 0);
                      sb->s_root = d_make_root(inode);
                        static const struct qstr name = QSTR_INIT("/", 1);[1*]
                        __d_alloc(root_inode->i_sb, &name);
              …
              mnt->mnt.mnt_root = root;[2*]
              mnt->mnt.mnt_sb = root->d_sb;[3*]
              mnt->mnt_mountpoint = mnt->mnt.mnt_root;[4*]
              mnt->mnt_parent = mnt;[5*]
    root.mnt = mnt;
            root.dentry = mnt->mnt_root;
            mnt->mnt_flags |= MNT_LOCKED;
            set_fs_pwd(current->fs, &root);
            set_fs_root(current->fs, &root);
      …
      rest_init
      kernel_thread(kernel_init, NULL, CLONE_FS);

    在执行kernel_init之前,会建立roofs文件系统。

    [1*]处设置了根目录的名字为“/”;
    [2*]处设置了vfsmount中的root目录;
    [3*]处设置了vfsmount中的超级块;
    [4*]处设置了vfsmount中的文件挂载点,指向了自己;
    [5*]处设置了vfsmount中的父文件系统的vfsmount为自己;

    五、根文件系统各个常用目录简介

    正常来说,根文件系统至少包括以下目录:

    1. /etc/:存储重要的配置文件。
    2. /bin/:存储常用且开机时必须用到的执行文件。
    3. /sbin/:存储着开机过程中所需的系统执行文件。
    4. /lib/:存储/bin/及/sbin/的执行文件所需的链接库,以及Linux的内核模块。
    5. /dev/:存储设备文件。

    注:五大目录必须存储在根文件系统上,缺一不可。

    六、顺便说下linux文件系统的常用目录

    Linux文件系统中一般有如下几个目录:

    1. /bin目录
      该目录下存放所有用户都可以使用的、基本的命令,这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。
      /bin目录下常用的命令有:cat,chgrp,chmod,cp,ls,sh,kill,mount,umount,mkdir,mknod,test等,我们在利用Busybox制作根文件系统时,在生成的bin目录下,可以看到一些可执行的文件,也就是可用的一些命令。

    2. /sbin 目录
      该目录下存放系统命令,即只有管理员能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基本的系统命令,它们用于启动系统,修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。
      /sbin目录下常用的命令有:shutdown,reboot,fdisk,fsck等,本地用户自己安装的系统命令放在/usr/local/sbin目录下。

    3. /dev目录
      该目录下存放的是设备文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。比如通过"dev/ttySAC0"文件可以操作串口0,通过"/dev/mtdblock1"可以访问MTD设备的第2个分区。

    4. /etc目录
      该目录下存放着各种配置文件,对于PC上的Linux系统,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件。在嵌入式系统中,这些内容可以大为精减。

    5. /lib目录
      该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin /sbin 目录下的程序。

    6. /home目录
      用户目录,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。

    7. /root目录
      根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。

    8. /usr目录
      /usr目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr目录下。里面存放的是共享、只读的程序和数据,这表明/usr目录下的内容可以在多个主机间共享,这些主要也符合FHS标准的。/usr中的文件应该是只读的,其他主机相关的,可变的文件应该保存在其他目录下,比如/var。/usr目录在嵌入式中可以精减。

    9. /var目录
      与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。

    10. /proc目录
      这是一个空目录,常作为proc文件系统的挂接点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。

    11. /mnt目录
      用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一引起空的子目录,比如/mnt/cdram /mnt/hda1 。用来临时挂载光盘、硬盘。

    12. /tmp目录
      用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。

    展开全文
  • 根文件系统制作

    千次阅读 2018-10-02 23:05:55
    根文件系统是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行 。 Linux启动时,第一个...
  • 嵌入式根文件系统一般都是使用busybox 1.下载 https://busybox.net/ 我没安装git工具,我就直接下载源码了 我们就下载一个19.2的版本 放入linux系统中某个目录,解压 需改顶层Makefile nfs服务器搭建,...
  • 根文件系统理解

    千次阅读 2019-03-05 18:13:02
    根文件系统理解 文件系统概念 启动流程 根文件系统 ramdisk启动 flash启动 initramfs initrd 鸡生蛋蛋生鸡 参考链接 根文件系统理解 文件系统概念 文件系统是一些代码,是一套软件,这套软件的功能就是对...
  • 根文件系统安装操作的第二阶段是由内核在系统初始化即将结束时进行的。根据内核被编译时所选择的选项,和内核装入程序所传递的启动选项,可以有几种方法安装实际根文件系统。为了简单起见,我们只考虑磁盘文件系统的...
  • 本课程为根文件系统移植的第1课,主要讲解了根文件系统的工作原理。学习本课程的目的是掌握根文件系统和内核的关系,根文件系统本身工作原理、存放方式等,以和后续课程结合完成rootfs的制作和部署等移植工作。
  • 有道云笔记地址: 详情看这里链接,记录太多,就不一一排版了。 ...amp;sub=25EABCF0C60B4BCE89E8C1DFBE6B3072   一、Linux 文件系统简介 1.文件系统与根文件系统 根,可以理解为基础的意思...根文件系统是一种...
  • Buildroot根文件系统构建

    千次阅读 2019-12-27 11:06:11
    前面我们学习了如何使用 busybox 来构建根文件系统,但是 busybox 构建的根文件系统不其全,很多东西需要我们自行添加,比如 lib 库文件。在我们后面的驱动开发中很多第三方软件也需要我们自己去移植,这些第三方...
  • 本课程为根文件系统移植的第2课,本课程将带领大家从零开始一步步的构建一个可用的文件夹形式的根文件系统,实验中会使用nfs方式启动该根文件系统进行验证。后将该根文件系统做成镜像形式烧录启动。
  • 根文件系统与文件系统的区别

    千次阅读 2013-05-26 20:12:15
    文件系统,根文件系统区别 根目录,根文件系统,文件系统与文件系统类型:  首先目录是文件,文件系统是一个空间,访问这个文件系统 需要遵循一定的协议, 这就是文件系统的类型,如:ex2,等。 ...
  • 根文件系统制作详解

    千次阅读 2018-03-22 18:08:01
    什么是根文件系统 linux最顶层的目录"/"被称作根目录,与Windows上的目录结构有较大的不同。系统中只有一个根目录,路径是“/”,而其它的分区只是挂载在根目录中的一个文件夹。系统加载linux内核后,就会...
  • Linux根文件系统介绍

    千次阅读 2013-07-10 08:52:42
    系统 根文件系统首先是一种文件系统,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中...
  • 根文件系统首先是一种文件系统,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些...
  • 嵌入式根文件系统(基于arm)

    千次阅读 2017-10-02 15:46:24
    1 根文件系统嵌入式可以包含多个文件系统,根文件系统是第一个,当linux启动的时候,第一个必须挂载的是根文件系统,若系统不能从指定设备上挂载根文件系统,则系统出错就退出。本文主要分以下两个部分说明根文件系统...
  • linux启动根文件系统

    千次阅读 2015-12-28 10:11:35
    linux根文件系统启动方式linux目前我所知道有3种启动文件系统的方式 1、从ramdisk根文件系统启动 前面已经有说明,从ramdisk根文件系统启动Linux 这种方法需要 1) 制作ramdisk文件系统压缩包 2) 然后将这个文件...
  • Linux根文件系统(rootfs原理详解)

    千次阅读 2020-09-23 16:22:31
    linux中有一个让很多初学者都不是特别清楚的概念,叫做“根文件系统”。我接触linux前前后后也好几年了,但是对这个问题,至今也不是特别的清楚,至少没法给出一个很全面很到位的解释。于是,今天我们就来理一理这个...
  • 什么是根文件系统

    千次阅读 2018-07-30 08:47:58
    相信做过linux移植的朋友们一定对根文件系统这个名词十分熟悉,在移植的过程中,bootloader,kernel和根文件系统是必须要移植的,bootloader和kernel都比较直观好懂,而我自己花了很多时间才能理解什么是根文件系统...
  • Linux--根文件系统的解释

    千次阅读 2017-12-07 21:36:07
    linux中有一个“根文件系统”,这个系统概念容易混淆,其他的文件系统容易理解,就是管理存储空间的系统,那么根文件系统的作用,却不是特别容易理解。  一、根文件系统概念  首先根文件系统也是一种文件系统,...
  • Linux-文件系统-学习笔记(14):根文件系统原理与nfs搭建方法 一、根文件系统 1、根文件系统简介 为什么需要根文件系统? (1)init进程的应用程序在根文件系统上,因此向用户态切换时根文件系统必不可少。 (2)...
  • 制作ubuntu根文件系统

    千次阅读 2017-08-03 15:15:40
    参考文档: http://blog.csdn.net/mountzf/article/details/51707853 http://developer.t-firefly.com/thread-10963-1-1.html ... 折腾了几天,看了不少参考资料,终于把ubuntu根文件系统制作出来了,基本是
  • 根文件系统(rootfs)梳理

    千次阅读 2016-05-04 14:23:44
    引言:在linux系统中,一直对根文件系统理解得模棱两可,是时候彻底梳理一下了,包括根文件系统是什么 、如何初始化、如何应用及Android系统中的根文件系统等问题。首先要弄清楚根文件系统是什么?以下英文部分摘自 ...
  • Linux开发五_构建根文件系统

    千次阅读 2016-01-08 00:17:10
    文件系统是对一个存储设备上的数据和元数据进行组织的机制,根文件系统是linux内核启动时所挂载的第一个文件系统。对于一个可启动的linux系统,根文件系统是其不可或缺的一部分。笔者此处就根文件系统的构建作一个...
  • 嵌入式Linux系统由linux内核与根文件系统两部分构成,两者缺一不可(无根文件系统的内核无法启动) 使用busybox构建嵌入式根文件系统目录结构,配置内核,并且使用Initramfs制作成根文件系统根文件系统与内核都...
  • 嵌入式Linux根文件系统制作和挂载

    万次阅读 多人点赞 2016-05-02 20:33:53
    嵌入式Linux系统由三部分组成: uboot、kernel、根文件系统, 还是这张老图 这里的根文件系统可以说是包含两个部分: 一个是根,一个是文件系统 那么什么是根呢?哈哈 其实根表示的就是第一个的意思 下面贴...
  • android根文件系统目录结构

    千次阅读 2016-06-03 10:30:16
    2.根文件系统目录结构 cache :是缓存临时文件夹, etc :指向 /system/etc ,众所周知的配置文件存放目录 system :是Android根文件系统中一个很重要的目录,系统中的大部分东西都在这里了 sys:用于挂载 ...
  • 详解制作根文件系统

    千次阅读 2016-07-12 11:06:04
    当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。 该标准规定了根目录下各个子目录的名称及其存放的...
  • 解析linux根文件系统的挂载过程

    热门讨论 2010-07-16 00:57:07
    根据Linux Kernel代码,详细解析kernel启动过程中,根文件系统的挂载过程。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 739,076
精华内容 295,630
关键字:

根文件系统