unable to boot Beaglebone Black from NFS

I’ve seen many posts about how to boot a Beaglebone black via an NFS mounted root partition, but none seem to work with the latest version.
I started by creating an NFS mount on my Ubuntu PC and successfully mounting it from the Beaglebone when booted from an SD image of the latest version dated 2013.06.20 from the Beaglebone site. All the commands below were done as root.;

uname -a
Linux beaglebone 3.8.13-bone50 …

Then test the mount with;
mount -o nfsvers=3 192.168.10.118:/home/bone /mnt/nfs
Next I copied the entire filesystem to the nfs mount with
cp -axv /. /mnt/nfs/.

I’ve edited the fstab on the nfs (/home/bone/etc/fstab) to add
/dev/nfs / nfs defaults 0 0
and correctly edited /home/bone/etc/network/interface to reflect the correct IP address etc.
Next I edited the uEnv.txt on the SD card to add
serverip=192.168.10.118

ipaddr=192.168.10.47
hostname=MH_bbb
netmask=255.255.255.0
gateway=192.168.10.1
nfsdevice=eth0:off
nfsopts=vers=3
rootpath=/home/bone

and changed the mmcargs line to;
mcargs=setenv bootargs console=tty0 console=${console} ${optargs} ${cape_disable} ${cape_enable} ${kms_force_mode} ip=${ipaddr}:${serverip}:${gateway}:${netmask}:${hostname}:${nfsdevice} root=/dev/nfs rw nfsroot=${serverip}:${rootpath},${nfsopts} ${systemd}

The Bone starts to boot and I can ping it on the correct IP address, but the display never shows anything and it doesn’t let me ssh to it.
Can anyone let me know what I’ve missed?
Thanks

Please "pastebin.com" your full serial boot log.

Regards,

Thanks for the quick reply, the serial port log reveals that it does not like vers=3, nor nfsvers=3 in the nfsopts variable, after removing them it gets a little further, but still does not boot. The full serial log has been posted here

Giles

Giles, what your your fstab look like on the beaglebone black ? Also I’m not 100% sure about this but for consistancy you should not use mmcargs, but instead use netargs

This is what my own netargs line looks like:

netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},vers=3 rw ip=${ipaddr}

NFS version 3 works fine on Debian, perhaps Ubuntu is different ? I know you’ve read other guides but perhaps reading my guild to double check what you’ve done is complete. My guide: http://www.embeddedhobbyist.com/debian-tips/beaglebone-black/beaglebone-black-nfs-root/

scroll down to Configuring the NFS server and read down to see if you perhaps missed something. Also keep in mind that Although Ubuntu is based on Debian, package names can be different, and not everything is done the same way.

BTW, I’m using a slightly older kernel. But I’ve yet to see a problem all the way from 3.8.13-bone26 all the way to this version.

Ah ok I see you gave us your fstab, sorry I missed that but I didnt miss this:

mcargs=setenv <---- copy paste error hopfully ?

I’ve seen many posts about how to boot a Beaglebone black via an NFS mounted root partition, but none seem to work with the latest version.
I started by creating an NFS mount on my Ubuntu PC and successfully mounting it from the Beaglebone when booted from an SD image of the latest version dated 2013.06.20 from the Beaglebone site. All the commands below were done as root.;

uname -a
Linux beaglebone 3.8.13-bone50 …

Then test the mount with;
mount -o nfsvers=3 192.168.10.118:/home/bone /mnt/nfs
Next I copied the entire filesystem to the nfs mount with
cp -axv /. /mnt/nfs/.

I’m not sure this is going to work because you are attempting to copy dynamic files and folders. Rather insert the SDCard into your host and do the following:
sudo rsync -avz /mnt/rootfs/ /home//targetNFS/

I’ve edited the fstab on the nfs (/home/bone/etc/fstab) to add
/dev/nfs / nfs defaults 0 0
and correctly edited /home/bone/etc/network/interface to reflect the correct IP address etc.
Next I edited the uEnv.txt on the SD card to add
serverip=192.168.10.118

ipaddr=192.168.10.47
hostname=MH_bbb
netmask=255.255.255.0
gateway=192.168.10.1
nfsdevice=eth0:off
nfsopts=vers=3
rootpath=/home/bone

and changed the mmcargs line to;
mcargs=setenv bootargs console=tty0 console=${console} ${optargs} ${cape_disable} ${cape_enable} ${kms_force_mode} ip=${ipaddr}:${serverip}:${gateway}:${netmask}:${hostname}:${nfsdevice} root=/dev/nfs rw nfsroot=${serverip}:${rootpath},${nfsopts} ${systemd}

The Bone starts to boot and I can ping it on the correct IP address, but the display never shows anything and it doesn’t let me ssh to it.
Can anyone let me know what I’ve missed?
Thanks

This is my complete uEnv.txt:

Would be much easier to just use:

cd ~/rootfs/
sudo tar -zcvf ~/rootfs.tar.gz .

To compress and then.
sudo tar xzvf ~/rootfs.tar.gz -C /media/rootfs/

To target a rootfs.

Thanks for your help, but sadly, on this version a uEnv.txt just containing;

console=ttyO0,115200n8
client_ip=192.168.10.47
server_ip=192.168.10.118
gw_ip=192.168.10.1
root_dir=/home/bone/bbb_nfs_root

does not work, it doesn’t even fire up the ethernet port (no activity lights), I’m guessing because there is no eth0 defined and its perhaps trying to fire up the USB network or something.

I’ll try the rsync method once I can ping the beaglebone

G

Thanks for the sugestion William, I’ll try that once I can get it successfully mounting the file system using the suggestions below/above

Giles

William
Yes I did start with your guide, but could not make it work, then I noticed that the addresses in the uEnv.txt that come with the standard distro did not match the ones in your guide and I’m using the standard kernel, uBoot etc. so I got suspicious and I started looking elsewhere and hacking around.
I’ve now changed mmcargs to netargs and still no joy. I’m going to mess with the ipaddr bit when I get home from work tonight since currently I’m doing a bit more than you with ${ipaddr}:${serverip}:${gateway}:${netmask}:${hostname}:${nfsdevice} instead of just ${ipaddr}.
I also noticed in the standard distro it has ${cape_disable} ${cape_enable} ${kms_force_mode} in the mmcargs line, I’m not sure if you also need them when using netargs with this version.

Giles

Giles,

If you tested the mount externally and it works this probably wouldnt be a NFS issue. Just on a guess form experience and what you’ve posted. the kernel is loading, but the rootfs isnt. Your debug messages seems to nearly confirm this. So if you can add the line mentioned on my blog post to inittab ( which is copied from Roberts guide ), perhaps you’ll get more information as to what is exactly happening.

Good luck, ill be on later today. Bed time for me.

Giles,

If you tested the mount externally and it works this probably wouldnt be a NFS issue. Just on a guess form experience and what you’ve posted. the kernel is loading, but the rootfs isnt. Your debug messages seems to nearly confirm this. So if you can add the line mentioned on my blog post to inittab ( which is copied from Roberts guide ), perhaps you’ll get more information as to what is exactly happening.

Good luck, ill be on later today. Bed time for me.

By the way I was contacted by another party last year who told me that my blog guide for NFS rootfs wont work with Ubuntu, and fedora. But will work for Debian ARCH, and BusyBox.

So I have to assume the init daemon for these other distro’s are the culprit. However, if you can find a known working guide from anywhere on the web ( i386 guide ) and adapt it . . . you should be golden.

Now, if you were willing to switch to Debian on both host and BBB I know it would work if you followed my guide to the “T”. But perhaps that is too much of a leap for you.

Thanks for your help, but sadly, on this version a uEnv.txt just containing;

console=ttyO0,115200n8
client_ip=192.168.10.47
server_ip=192.168.10.118
gw_ip=192.168.10.1
root_dir=/home/bone/bbb_nfs_root

does not work, it doesn’t even fire up the ethernet port (no activity lights), I’m guessing because there is no eth0 defined and its perhaps trying to fire up the USB network or something.

Make sure you are using the latest version of u-boot. I’m using

U-Boot 2014.07-00014-gdc7e38e

This is the v2014.07 with Robert Nelsons u-boot patch

https://github.com/RobertCNelson/Bootloader-Builder/blob/master/patches/v2014.07/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch

Or follow the instructions here:

http://eewiki.net/display/linuxonarm/BeagleBone+Black#BeagleBoneBlack-Bootloader:U-Boot

Regards,
John

HURRAH it now works, thanks to all your help and no need to make a new kernel or uboot!

Here is how its done at a high level, I will be writing it up in more detail on the Misterhouse on Beglebone instructions.

  1. Flash an SD card with the standard (non eMMC flashing) Debian image from here
  2. Set up an NFS share on your NAS/PC/whatever
  3. Boot your Bone with the SD Card
  4. Set the Bone to have a static IP address by editing /etc/netwotk/interfaces reboot and check it works
  5. NFS mount the shared drive from the Bone ( e.g. mount -o nfsvers=3 192.168.10.118:/home/bone /mnt/nfs)
  6. sudo to root on the Bone and do all the rest of the Bone stuff as root
  7. copy everything to the NFS drive. The second step seems unnecessary, but its quick compared with the first
    cp -axv /. /mnt/nfs/.
    cp -axv /dev/. /mnt/nfs/dev/.
  8. edit the /mnt/nfs/etc/fstab to add
    /dev/nfs / nfs defaults 0 0

and comment out the other root partition,
8) Edit your /boot/uboot/uEnv.txt add the following lines - changed to match your configuration

serverip=192.168.10.118
ipaddr=192.168.10.47
hostname=MH_bbb
netmask=255.255.255.0
gateway=192.168.10.1
nfsdevice=eth0:off
nfsopts=vers=3
rootpath=/home/bone/rootfs

comment out the line that starts mmcargs as follows;
#mmcargs=setenv bootargs

add a new netargs line - note all on one line, not broken as here

netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath} ip=${ipaddr}:${serverip}:${gateway}:${netmask}:${hostname}:${nfsdevice}

and finally replace the uenvcmd with this;
uenvcmd=run loadfiles; run netargs; bootz ${loadaddr} ${initrd_addr}:${initrd_size} ${fdtaddr}

Reboot and you should be able to ssh into your Bone, hear your disk drive whizzing and see your extra disk space with a df.
For completeness I’ve attached my uEnv.txt

Thanks again
Giles

uEnv.txt (1.36 KB)

I’m ‘golden’ with the standard debian build on the bone
Thanks
G

HURRAH it now works, thanks to all your help and no need to make a new kernel or uboot!

Here is how its done at a high level, I will be writing it up in more detail on the Misterhouse on Beglebone instructions.

  1. Flash an SD card with the standard (non eMMC flashing) Debian image from here
  2. Set up an NFS share on your NAS/PC/whatever
  3. Boot your Bone with the SD Card
  4. Set the Bone to have a static IP address by editing /etc/netwotk/interfaces reboot and check it works
  5. NFS mount the shared drive from the Bone ( e.g. mount -o nfsvers=3 192.168.10.118:/home/bone /mnt/nfs)
  6. sudo to root on the Bone and do all the rest of the Bone stuff as root
  7. copy everything to the NFS drive. The second step seems unnecessary, but its quick compared with the first
    cp -axv /. /mnt/nfs/.
    cp -axv /dev/. /mnt/nfs/dev/.
  8. edit the /mnt/nfs/etc/fstab to add
    /dev/nfs / nfs defaults 0 0

and comment out the other root partition,
8) Edit your /boot/uboot/uEnv.txt add the following lines - changed to match your configuration

serverip=192.168.10.118
ipaddr=192.168.10.47
hostname=MH_bbb
netmask=255.255.255.0
gateway=192.168.10.1
nfsdevice=eth0:off
nfsopts=vers=3
rootpath=/home/bone/rootfs

comment out the line that starts mmcargs as follows;
#mmcargs=setenv bootargs

add a new netargs line - note all on one line, not broken as here

netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath} ip=${ipaddr}:${serverip}:${gateway}:${netmask}:${hostname}:${nfsdevice}

and finally replace the uenvcmd with this;
uenvcmd=run loadfiles; run netargs; bootz ${loadaddr} ${initrd_addr}:${initrd_size} ${fdtaddr}

Reboot and you should be able to ssh into your Bone, hear your disk drive whizzing and see your extra disk space with a df.
For completeness I’ve attached my uEnv.txt

As I said in my previous e-mail, all this above is unnecessary if you are using the latest u-boot. All you need is the 5 lines I showed below. As long as you define client_ip, the default u-boot env will use NFS. No need for uenvcmd, etc. Robert made NFS booting really simple:

http://elinux.org/Beagleboard:U-boot_partitioning_layout_2.0#nfs_support

Regards,
John

Who wrote that wiki John ? It’s kind of a mess. I have a hard time following that, and I have experience with this sort of thing.

Yeah, a few more beers and i'll have it cleaned up... :wink:

Right now it's still more of a spec page.

As it's a radical partition layout change. While maintaining some
backward compatibility and giving upstream distros (debian) options
they need to work out of the box.

Regards,