====== Boot linux over NFS ======
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.
===== NFS server settings =====
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
===== Kernel configuration =====
To use Ethernet and NFS on initramfs you need to change module to built-in.
==== C1/C2 kernel configuration ====
The C1 Ethernet driver was already built-in.\\
Location:
-> File systems
-> Network File Systems
<*> NFS client support
<*> NFS client support for NFS version 3
==== U3 kernel configuration ====
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.\\
* [[en:c1_building_kernel | ODROID-C1 kernel update]]
* [[en:xu3_building_kernel | ODROID-XU3/4 kernel update]]
* [[en:u3_building_kernel | ODROID-U3 kernel update]]
* [[en:odroidwkernelcompilation | ODROID-W kernel update]]
===== NFS Client(ODROIDs) settings =====
Append following line to the boot argument.
boot=nfs root=/dev/nfs ip=dhcp nfsroot=${rfspath} rw
==== How to add the boot argument ====
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