]> code.ossystems Code Review - openembedded-core.git/commitdiff
initramfs-framework: add nfsrootfs module
authorOleksii Konoplitskyi <okonopli@cisco.com>
Fri, 25 May 2018 13:56:48 +0000 (16:56 +0300)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Sat, 7 Jul 2018 10:02:57 +0000 (11:02 +0100)
nfsrootfs module mounts rootfs via nfs parsing "nfsroot" and "ip" cmdline options.

Signed-off-by: Oleksii Konoplitskyi <okonopli@cisco.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-core/initrdscripts/initramfs-framework/nfsrootfs [new file with mode: 0644]
meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb

diff --git a/meta/recipes-core/initrdscripts/initramfs-framework/nfsrootfs b/meta/recipes-core/initrdscripts/initramfs-framework/nfsrootfs
new file mode 100644 (file)
index 0000000..e67ee4c
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+nfsrootfs_enabled() {
+       if [ ${bootparam_root} != "/dev/nfs" ] || [ -z ${bootparam_nfsroot} ]; then
+               return 1
+       fi
+       return 0
+}
+
+nfsrootfs_run() {
+       local nfs_opts
+       local location
+       local flags
+       local server_ip
+
+       nfs_opts=""
+       if [ "${bootparam_nfsroot#*,}" != "${bootparam_nfsroot}" ]; then
+               nfs_opts="-o ${bootparam_nfsroot#*,}"
+       fi
+
+       location="${bootparam_nfsroot%%,*}"
+       if [ "${location#*:}" = "${location}" ]; then
+               # server-ip not given. Get server ip from ip option
+               server_ip=""
+               if [ "${bootparam_ip#*:}" != "${bootparam_ip}" ]; then
+                       server_ip=$(echo "$bootparam_ip" | cut -d: -f2)
+               fi
+
+               if [ -z "$server_ip" ]; then
+                       fatal "Server IP is not set. Update ip or nfsroot options."
+               fi
+               location=${server_ip}:${location}
+       fi
+
+       flags="-o nolock"
+       if [ -n "$bootparam_ro" ] && ! echo "$bootparam_rootflags" | grep -w -q "ro"; then
+               if [  -n "$bootparam_rootflags" ]; then
+                       bootparam_rootflags="$bootparam_rootflags,"
+               fi
+               bootparam_rootflags="${bootparam_rootflags}ro"
+       fi
+       if [ -n "$bootparam_rootflags" ]; then
+               flags="$flags -o $bootparam_rootflags"
+       fi
+
+       mount -t nfs ${flags} ${nfs_opts} ${location} ${ROOTFS_DIR}
+}
+
index 75d965f069129f2d90224276f52427d603393c32..6337b998acc349a3e0cc920e291d4eb8a0a1e751 100644 (file)
@@ -9,6 +9,7 @@ inherit allarch
 
 SRC_URI = "file://init \
            file://exec \
+           file://nfsrootfs \
            file://rootfs \
            file://finish \
            file://mdev \
@@ -24,6 +25,7 @@ do_install() {
 
     # base
     install -m 0755 ${WORKDIR}/init ${D}/init
+    install -m 0755 ${WORKDIR}/nfsrootfs ${D}/init.d/85-nfsrootfs
     install -m 0755 ${WORKDIR}/rootfs ${D}/init.d/90-rootfs
     install -m 0755 ${WORKDIR}/finish ${D}/init.d/99-finish
 
@@ -53,6 +55,7 @@ PACKAGES = "${PN}-base \
             initramfs-module-mdev \
             initramfs-module-udev \
             initramfs-module-e2fs \
+            initramfs-module-nfsrootfs \
             initramfs-module-rootfs \
             initramfs-module-debug \
            "
@@ -83,6 +86,10 @@ SUMMARY_initramfs-module-e2fs = "initramfs support for ext4/ext3/ext2 filesystem
 RDEPENDS_initramfs-module-e2fs = "${PN}-base"
 FILES_initramfs-module-e2fs = "/init.d/10-e2fs"
 
+SUMMARY_initramfs-module-nfsrootfs = "initramfs support for locating and mounting the root partition via nfs"
+RDEPENDS_initramfs-module-nfsrootfs = "${PN}-base"
+FILES_initramfs-module-nfsrootfs = "/init.d/85-nfsrootfs"
+
 SUMMARY_initramfs-module-rootfs = "initramfs support for locating and mounting the root partition"
 RDEPENDS_initramfs-module-rootfs = "${PN}-base"
 FILES_initramfs-module-rootfs = "/init.d/90-rootfs"