RootFS over NFS

boot-log.txt

server side:

/etc/exports (duh)
/etc/dhcpd.conf (duh)

rsync -av freedom-u-sdk/work/buildroot_initramfs_sysroot/ /envy/dj/sifive/rootfs/

kernel:

root=/dev/nfs nfsroot=172.31.3.1:/envy/dj/sifive/rootfs,nfsvers=3,tcp ip=dhcp nfsrootdebug earlyprintk

freedom-u-sdk changes

diff --git a/Makefile b/Makefile
index 7f528cb..b38e207 100644
--- a/Makefile
+++ b/Makefile
@@ -123,11 +123,15 @@ endif
 
 $(vmlinux): $(linux_srcdir) $(linux_wrkdir)/.config $(buildroot_initramfs_sysroot_stamp)
 	$(MAKE) -C $< O=$(linux_wrkdir) \
-		CONFIG_INITRAMFS_SOURCE="$(confdir)/initramfs.txt $(buildroot_initramfs_sysroot)" \
-		CONFIG_INITRAMFS_ROOT_UID=$(shell id -u) \
-		CONFIG_INITRAMFS_ROOT_GID=$(shell id -g) \
 		ARCH=riscv \
 		vmlinux
+#$(vmlinux): $(linux_srcdir) $(linux_wrkdir)/.config $(buildroot_initramfs_sysroot_stamp)
+	#$(MAKE) -C $< O=$(linux_wrkdir) \
+		#CONFIG_INITRAMFS_SOURCE="$(confdir)/initramfs.txt $(buildroot_initramfs_sysroot)" \
+		#CONFIG_INITRAMFS_ROOT_UID=$(shell id -u) \
+		#CONFIG_INITRAMFS_ROOT_GID=$(shell id -g) \
+		#ARCH=riscv \
+		#vmlinux
 
 $(vmlinux_stripped): $(vmlinux)
 	$(target)-strip -o $@ $<
diff --git a/conf/linux_defconfig b/conf/linux_defconfig
index 7e703d5..99193bf 100644
--- a/conf/linux_defconfig
+++ b/conf/linux_defconfig
@@ -53,6 +53,8 @@ CONFIG_USB=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_STORAGE=y
+CONFIG_USB_USBNET=y
+CONFIG_USB_NET_AX8817X=y
 CONFIG_VIRTIO_MMIO=y
 # CONFIG_IOMMU_SUPPORT is not set
 CONFIG_EXT3_FS=y
@@ -61,9 +63,17 @@ CONFIG_TMPFS=y
 # CONFIG_MISC_FILESYSTEMS is not set
 # CONFIG_NETWORK_FILESYSTEMS is not set
 CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="earlyprintk"
+CONFIG_CMDLINE="root=/dev/nfs nfsroot=172.31.3.1:/envy/dj/sifive/rootfs,nfsvers=3,tcp ip=dhcp nfsrootdebug earlyprintk"
+CONFIG_CMDLINE_OVERRIDE=n
 CONFIG_PRINTK_TIME=y
 CONFIG_STRIP_ASM_SYMS=y
 CONFIG_DEBUG_SECTION_MISMATCH=y
 CONFIG_STACKTRACE=y
 # CONFIG_CRYPTO_HW is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V2=n
+CONFIG_NFS_V3=y
+CONFIG_IP_PNP=y
+CONFIG_ROOT_NFS=y
+CONFIG_IP_PNP_DHCP=y

kernel changes

diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c
index 53d06e08160d..8bb33074006d 100644
--- a/arch/riscv/kernel/setup.c
+++ b/arch/riscv/kernel/setup.c
@@ -214,6 +214,10 @@ static void __init setup_bootmem(void)
        }
 }
 
+#ifdef CONFIG_CMDLINE_BOOL
+static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE;
+#endif
+
 void __init setup_arch(char **cmdline_p)
 {
 #if defined(CONFIG_EARLY_PRINTK)
@@ -222,6 +226,10 @@ void __init setup_arch(char **cmdline_p)
                register_console(early_console);
        }
 #endif
+#ifdef CONFIG_CMDLINE_BOOL
+       strlcpy(boot_command_line, default_command_line, COMMAND_LINE_SIZE);
+#endif
+
        *cmdline_p = boot_command_line;
 
        parse_early_param();