====== 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