# Mounting Virtual Kernel File Systems

Various file systems exported by the kernel are used to communicate to and from the kernel itself. These file systems are virtual in that no disk space is used for them. The content of the file systems resides in memory.

Begin by creating directories onto which the file systems will be mounted:

    mkdir -pv ${CLFS}/{dev,proc,sys}

Now mount the file systems:

    mount -vt proc proc ${CLFS}/proc
    mount -vt sysfs sysfs ${CLFS}/sys

Remember that if for any reason you stop working on the CLFS system and start again later, it is important to check that these file systems are mounted again before entering the chroot environment.

Two device nodes, /dev/console and /dev/null, are required to be present on the filesystem. These are needed by the kernel even before starting Eudev early in the boot process, so we create them here:

    mknod -m 600 ${CLFS}/dev/console c 5 1
    mknod -m 666 ${CLFS}/dev/null c 1 3

Once the system is complete and booting, the rest of our device nodes are created by the Eudev package. Since this package is not available to us right now, we must take other steps to provide device nodes under on the CLFS filesystem. We will use the bind option in the mount command to make our host system's /dev structure appear in the new CLFS filesystem:

    mount -v -o bind /dev ${CLFS}/dev

Additional file systems will soon be mounted from within the chroot environment. To keep the host up to date, perform a fake mount for each of these now:

    if [ -h ${CLFS}/dev/shm ]; then
      link=$(readlink ${CLFS}/dev/shm)
      mkdir -p ${CLFS}/$link
      mount -f -vt tmpfs shm ${CLFS}/$link
      unset link
    else
      mount -f -vt tmpfs shm ${CLFS}/dev/shm
    fi
    mount -f -vt devpts -o gid=&gid-tty;,mode=620 devpts ${CLFS}/dev/pts