From d1737f2dabac5e338061863c78a91b4c115365c7 Mon Sep 17 00:00:00 2001 From: Oleksii Konoplitskyi Date: Fri, 25 May 2018 16:56:48 +0300 Subject: initramfs-framework: add nfsrootfs module nfsrootfs module mounts rootfs via nfs parsing "nfsroot" and "ip" cmdline options. Signed-off-by: Oleksii Konoplitskyi Signed-off-by: Richard Purdie --- .../initrdscripts/initramfs-framework/nfsrootfs | 48 ++++++++++++++++++++++ .../initrdscripts/initramfs-framework_1.0.bb | 7 ++++ 2 files changed, 55 insertions(+) create mode 100644 meta/recipes-core/initrdscripts/initramfs-framework/nfsrootfs (limited to 'meta') diff --git a/meta/recipes-core/initrdscripts/initramfs-framework/nfsrootfs b/meta/recipes-core/initrdscripts/initramfs-framework/nfsrootfs new file mode 100644 index 0000000000..e67ee4c25d --- /dev/null +++ b/meta/recipes-core/initrdscripts/initramfs-framework/nfsrootfs @@ -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} +} + diff --git a/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb index 75d965f069..6337b998ac 100644 --- a/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb +++ b/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb @@ -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" -- cgit 1.2.3-korg