[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Minios-devel] [UNIKRAFT PATCH 2/5] lib/devfs, lib/ukboot: Move option to automatically mount root to libukboot



Hi Simon,

On 8/29/19 4:17 PM, Simon Kuenzer wrote:
> Moves the option of automatically mounting ramfs as a root filesystem
> to lib/ukboot. This feature is not only useful for initializing
> devfs. The idea is that we could later feed its initial content from a
> archive given through an initrd.
> 
> Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>
> ---
>  lib/devfs/Config.uk     |  8 +-------
>  lib/devfs/devfs_vnops.c | 25 -------------------------
>  lib/ukboot/Config.uk    |  5 +++++
>  lib/ukboot/boot.c       | 28 ++++++++++++++++++++++++++++
>  4 files changed, 34 insertions(+), 32 deletions(-)
> 
> diff --git a/lib/devfs/Config.uk b/lib/devfs/Config.uk
> index e38a616e..f6b16aee 100644
> --- a/lib/devfs/Config.uk
> +++ b/lib/devfs/Config.uk
> @@ -1,10 +1,4 @@
>  config LIBDEVFS
>       bool "devfs: devfs file system"
>       default n
> -     depends on LIBVFSCORE
> -if LIBDEVFS
> -        config LIBDEVFS_USE_RAMFS
> -        bool "Use ramfs as root"
> -        default n
> -        select LIBRAMFS
> -endif
> +     select LIBVFSCORE
> diff --git a/lib/devfs/devfs_vnops.c b/lib/devfs/devfs_vnops.c
> index 11a3ea05..3399b2bc 100644
> --- a/lib/devfs/devfs_vnops.c
> +++ b/lib/devfs/devfs_vnops.c
> @@ -309,28 +309,3 @@ static struct vfscore_fs_type fs_devfs = {
>  };
>  
>  UK_FS_REGISTER(fs_devfs);
> -
> -__constructor_prio(101) static void devfs_init(void)
> -{
> -#ifdef CONFIG_LIBDEVFS_USE_RAMFS
> -     int ret;
> -
> -     ret = mount("", "/", "ramfs", 0, NULL);
> -     if (ret != 0) {
> -             uk_pr_debug("Failed to mount / in %s\n", __func__);
> -             return;
> -     }
> -
> -     ret =  mkdir("/dev", S_IRWXU);
> -     if (ret != 0) {
> -             uk_pr_debug("Failed to mkdir /dev in %s\n", __func__);
> -             return;
> -     }
> -
> -     ret = mount("", "/dev", "devfs", 0, NULL);
> -     if (ret != 0) {
> -             uk_pr_debug("Failed to mount /dev as devfs in %s\n", __func__);
> -             return;
> -     }
> -#endif
> -}
> diff --git a/lib/ukboot/Config.uk b/lib/ukboot/Config.uk
> index 841a8767..6f86c7de 100644
> --- a/lib/ukboot/Config.uk
> +++ b/lib/ukboot/Config.uk
> @@ -21,4 +21,9 @@ if LIBUKBOOT
>       bool "Initialize ukallocbbuddy as allocator"
>       default y
>       select LIBUKALLOCBBUDDY
> +
> +     config LIBUKBOOT_VFSROOT
> +     bool "Mount ramfs to /"

I'd suggest LIBUKBOOT_RAMFSROOT or smth like that since ramfs != vfs.

> +     default n
> +     select LIBRAMFS
>  endif
> diff --git a/lib/ukboot/boot.c b/lib/ukboot/boot.c
> index b4b390ef..15954205 100644
> --- a/lib/ukboot/boot.c
> +++ b/lib/ukboot/boot.c
> @@ -64,6 +64,11 @@
>  #ifdef CONFIG_LIBUKLIBPARAM
>  #include <uk/libparam.h>
>  #endif /* CONFIG_LIBUKLIBPARAM */
> +#ifdef CONFIG_LIBUKBOOT_VFSROOT
> +#include <sys/stat.h>
> +#include <sys/mount.h>
> +#endif /* CONFIG_LIBUKBOOT_VFSROOT */
> +
>  
>  int main(int argc, char *argv[]) __weak;
>  #ifdef CONFIG_LIBLWIP
> @@ -90,6 +95,29 @@ static void main_thread_func(void *arg)
>       uk_bus_probe_all();
>  #endif /* CONFIG_LIBUKBUS */
>  
> +     /*
> +      * VFS initialization
> +      */
> +#ifdef CONFIG_LIBUKBOOT_VFSROOT
> +     /*
> +      * TODO: Provide a boot parameter option to specify a custom
> +      * root mount (e.g., ramfs, initrd, 9pfs).
> +      */
> +     uk_pr_info("Mount root...\n");
> +     ret = mount("", "/", "ramfs", 0, NULL);
> +     if (ret != 0)
> +             UK_CRASH("Failed to mount ramfs to /\n");

Why do we restrict ukboot to using ramfs? Why not keeping a constructor
in the ramfs lib instead?

> +
> +     /*
> +      * TODO: We could place here code that extracts an archive
> +      * found as initrd to '/'
> +      */
> +
> +#endif /* CONFIG_LIBUKBOOT_VFSROOT */
> +
> +     /*
> +      * Network initialization
> +      */
>  #ifdef CONFIG_LIBLWIP
>       /*
>        * TODO: This is an initial implementation where we call the
> 

_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.