The following text describes on how to use NFS for the root filesystem. For the rest of this text 'client' means the diskless system, and 'server' means the NFS server.
Install nfs pakages.
sudo apt-get install nfs-kernel-server nfs-common
After insert your eMMC or SD card, copy the Root File System.
# The trusty folder is mounted your RFS by SD card. sudo cp -rp /media/$USER/trusty /home/$USER/
Add following line in “/etc/exports”
/home/$USER/trusty *(rw,sync,no_root_squash,no_subtree_check)
Restart NFS service.
sudo service nfs-kernel-server restart
Modify /home/$USER/trusty/etc/network/interfaces
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface, commented out for NFS root #auto eth0 #iface eth0 inet dhcp iface eth0 inet manual
To use Ethernet and NFS on initramfs you need to change module to built-in.
The C1 Ethernet driver was already built-in.
Location:
-> File systems -> Network File Systems <*> NFS client support <*> NFS client support for NFS version 3
Location:
-> Device Drivers -> Network device support -> USB Network Adapters <*> Multi-purpose USB Networking Framework <*> SMSC LAN95XX based USB 2.0 10/100 ethernet devices
-> File systems -> Network File Systems <*> NFS client support <*> NFS client support for NFS version 3
Then, Update your ODROID's kernel.
Refer to the following links How to kernel update.
Append following line to the boot argument.
boot=nfs root=/dev/nfs ip=dhcp nfsroot=${rfspath} rw
You should modify boot.ini file or compile to a u-boot script.
e.g. ODROID-C1.
Modify “/media/boot/boot.ini”
setenv rfspath 192.168.0.22:/home/john/trusty setenv bootargs "boot=nfs root=/dev/nfs ip=dhcp nfsroot=${rfspath} rw rootwait ro ${condev} no_console_suspend vdaccfg=0xa000 logo=osd1,loaded,0x7900000,720p,full dmfc=3 cvbsmode=576cvbs hdmimode=${m} m_bpp=${m_bpp} vout=${vout_mode} ${disableuhs}"
Reboot.
sudo reboot
e.g. ODROID-U3.
Copy the existing boot script
cd /media/boot cp boot.txt boot-nfs.txt
Modify boot-nfs.txt.
setenv initrd_high "0xffffffff" setenv fdt_high "0xffffffff" setenv rfspath 192.168.0.22:/home/john/trusty setenv bootcmd "fatload mmc 0:1 0x40008000 zImage; fatload mmc 0:1 0x42000000 uInitrd; bootm 0x40008000" setenv bootargs "boot=nfs root=/dev/nfs ip=dhcp nfsroot=${rfspath} console=tty1 console=ttySAC1,115200n8 rootwait mem=2047M" boot
Install uboot-mkimage package.
sudo apt-get install uboot-mkimage
Compile to a u-boot script.
mkimage -T script -A arm -C none -n 'ODROID-U3.Boot NFS-mounted RFS' -d boot-nfs.txt boot-nfs.scr
Copy.
mv boot.scr boot.scr.orig cp boot-nfs.scr boot.scr
Reboot.
sudo reboot.
Nice to have a lot of disk space:
root@odroid:~# df -h Filesystem Size Used Avail Use% Mounted on 192.168.0.22:/home/john/trusty 909G 177G 687G 21% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 420M 4.0K 420M 1% /dev tmpfs 425M 4.0K 425M 1% /tmp tmpfs 85M 2.6M 83M 3% /run none 5.0M 0 5.0M 0% /run/lock none 425M 76K 425M 1% /run/shm none 100M 24K 100M 1% /run/user /dev/mmcblk0p1 129M 7.4M 122M 6% /media/boot