[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [UNIKRAFT PATCH 4/4] Change if-else-endif block and modify Config.uk to autoselect RamFS and ukcpio library
Signed-off-by: gabrielmocanu <gabi.mocanu98@xxxxxxxxx> --- lib/Makefile.uk | 2 +- lib/vfscore/Config.uk | 17 +++++++++------- lib/vfscore/rootfs.c | 45 ++++++++++++++++++++++--------------------- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/lib/Makefile.uk b/lib/Makefile.uk index 1503e73..28c3d78 100644 --- a/lib/Makefile.uk +++ b/lib/Makefile.uk @@ -20,7 +20,7 @@ $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/fdt)) $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/syscall_shim)) $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/vfscore)) $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/ramfs)) -$(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/cpio)) +$(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/ukcpio)) $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/devfs)) $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/9pfs)) $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/uklock)) diff --git a/lib/vfscore/Config.uk b/lib/vfscore/Config.uk index ef969bf..9938b12 100644 --- a/lib/vfscore/Config.uk +++ b/lib/vfscore/Config.uk @@ -9,9 +9,6 @@ config LIBVFSCORE if LIBVFSCORE menu "vfscore: Configuration" -config LIBCPIO - bool "cpio: general cpio archive extraction" - default n config LIBINITRAMFS bool "initramfs: extract the given cpio file to /" @@ -50,6 +47,11 @@ if LIBVFSCORE_AUTOMOUNT_ROOTFS select LIBUK9P select LIB9PFS + config LIBVFSCORE_ROOTFS_INITRD + bool "InitRD" + select LIBRAMFS + select LIBUKCPIO + config LIBVFSCORE_ROOTFS_CUSTOM bool "Custom argument" help @@ -73,13 +75,14 @@ if LIBVFSCORE_AUTOMOUNT_ROOTFS string default "ramfs" if LIBVFSCORE_ROOTFS_RAMFS default "9pfs" if LIBVFSCORE_ROOTFS_9PFS - default LIBVFSCORE_ROOTFS_CUSTOM_ARG if LIBVFSCORE_ROOTFS_CUSTOM + default "initrd" if LIBVFSCORE_ROOTFS_INITRD + default LIBVFSCORE_ROOTFS_CUSTOM_ARG if LIBVFSCORE_ROOTFS_CUSTOM default "" # The root device option is hidden for RamFS and 9PFS config LIBVFSCORE_ROOTDEV string "Default root device" - depends on !LIBVFSCORE_ROOTFS_RAMFS + depends on !LIBVFSCORE_ROOTFS_RAMFS && !LIBVFSCORE_ROOTFS_INITRD default "rootfs" if LIBVFSCORE_ROOTFS_9PFS default "" help @@ -90,7 +93,7 @@ if LIBVFSCORE_AUTOMOUNT_ROOTFS # The root flags is hidden for RamFS config LIBVFSCORE_ROOTFLAGS hex "Default root mount flags" - depends on !LIBVFSCORE_ROOTFS_RAMFS + depends on !LIBVFSCORE_ROOTFS_RAMFS && !LIBVFSCORE_ROOTFS_INITRD default 0x0 help Mount flags. @@ -98,7 +101,7 @@ if LIBVFSCORE_AUTOMOUNT_ROOTFS # The root options are hidden for RamFS config LIBVFSCORE_ROOTOPTS string "Default root mount options" - depends on !LIBVFSCORE_ROOTFS_RAMFS + depends on !LIBVFSCORE_ROOTFS_RAMFS && !LIBVFSCORE_ROOTFS_INITRD default "" help Usually a comma-separated list of additional mount diff --git a/lib/vfscore/rootfs.c b/lib/vfscore/rootfs.c index 78dbe3a..e83eec8 100644 --- a/lib/vfscore/rootfs.c +++ b/lib/vfscore/rootfs.c @@ -85,32 +85,33 @@ static int vfscore_rootfs(void) return -1; } -#ifdef CONFIG_LIBINITRAMFS - struct ukplat_memregion_desc memregion_desc; - int initrd; - enum cpio_error error; +#if CONFIG_LIBUKCPIO && CONFIG_LIBRAMFS + if (strncmp(rootfs, "initrd", 5) == 0) { + struct ukplat_memregion_desc initrd; + enum ukcpio_error error; - initrd = ukplat_memregion_find_initrd0(&memregion_desc); - if (initrd != -1) { - ukplat_memregion_get(initrd, &memregion_desc); - if (mount("", "/", "ramfs", 0, NULL) < 0) - return -CPIO_MOUNT_FAILED; + if (ukplat_memregion_find_initrd0(&initrd) < 0){ + uk_pr_crit("Could not find an initrd!\n"); + return -1; + } - error = - cpio_extract("/", memregion_desc.base, memregion_desc.len); - if (error < 0) - uk_pr_err("Failed to mount initrd\n"); - return error; - } - uk_pr_err("Failed to mount initrd\n"); - return -CPIO_NO_MEMREGION; -#else - uk_pr_info("Mount %s to /...\n", rootfs); - if (mount(rootdev, "/", rootfs, rootflags, rootopts) != 0) { - uk_pr_crit("Failed to mount /: %d\n", errno); - return -1; + if (mount("", "/", "ramfs", 0, NULL) != 0) { + uk_pr_crit("Failed to mount ramfs to /: %d\n", + errno); + return -1; + } + + error = ukcpio_extract("/", initrd.base, initrd.len); + if (error < 0) { + uk_pr_crit("Failed to extract cpio archive to /: %d\n", + error); + return -1; + } + + return 0; } #endif + return 0; } -- 2.17.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |