Rev C board - Missing usb0 ethernet

Hello all,

I purchased a Rev C board a few months ago and set it aside to look at a bit later. Started working with it more this week and I’m running into things that seem to be different now. I’m running the eMMC flashed version with 3.8.13-bone72 kernel. I believe pulled this image from the getting started wiki. Everything seemed to install ok and I have the basic Debian OS running on it. However, I noticed that I did not get the normal additional USB interface on my PC or Mac. Looking into it further I noticed that the device was no present on the BBB either. The USB serial adapter is present and useable but nothing else is. The configuration for usb0 is in the file /etc/network/interfaces and that looks correct.

modprobe g_ether results in: “ERROR: could not insert ‘g_ether’: No such device”. The same happens with g_multi. Are these enabled elsewhere? I don’t really miss it mounting the emmc as removable media since that makes it a pain on Mac but I do miss the ethernet connection over USB.

lsmod shows:

Module Size Used by

g_serial 13167 2

libcomposite 15028 1 g_serial

omap_rng 4062 0

mt7601Usta 458758 0

These are all present in the kernel/drivers/usb/gadget directory:

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_acm_ms.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_audio.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_cdc.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_dbgp.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_ether.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_ffs.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_hid.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_mass_storage.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_midi.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_multi.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_ncm.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_nokia.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_printer.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_serial.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_webcam.ko

/lib/modules/3.8.13-bone72/kernel/drivers/usb/gadget/g_zero.ko

Well... unload g_serial.. Otherwise g_multi/g_ether won't load..

Regards,

Ahhh ok, they are exclusive… didn’t realize that. How can I control what’s being loaded at boot? it’s not in /etc/modules and I can’t unload it presently as it’s ‘in use’. I’d rather load g_multi at boot if I can.

#In a single partition setup, dont load g_multi, as we could trash the linux file system…

if [ “x${root_drive}” = “x/dev/mmcblk0p1” ] || [ “x${root_drive}” = “x/dev/mmcblk1p1” ] ; then

if [ -f /usr/sbin/udhcpd ] || [ -f /usr/sbin/dnsmasq ] ; then

#Make sure (# CONFIG_USB_ETH_EEM is not set), otherwise this shows up as “usb0” instead of ethX on host pc…

modprobe g_ether ${g_network} || true

else

#serial:

modprobe g_serial || true

fi

else

boot_drive="${root_drive%?}1"

modprobe g_multi file=${boot_drive} cdrom=0 ro=0 stall=0 removable=1 nofua=1 ${g_network} || true

fi

Found the relevant section above. It appears that I did not have udhcpd installed so it falls through to g_serial. I added that via apt-get and the interface showed up but did not assign an IP on the PC side and I now lost the serial interface too. Got back in via the physical ethernet port. This is becoming a rabbit-hole I’m not interested in following. I removed udhcpd and rebooted and recovered the serial console. I can make do with the physical ethernet interface + usb serial.

I also discovered that I had to install acpid in order for the power button to become operational as well.

kyle,

The latest images use systemd as the default init daemon. So probably use systemd services to load gadget driver at boot. I honestly know very little about systemd so have never got this to work myself.

What I’ve always done, and do not necessarily recommend that you do the same - If you care to run systemd. Is disable systemd in uEnv.txt, and just place g_ether in /etc/modules. No need to install / use udhcpdin this case. Ofcourse the g_ether device would then have to be set statically in /etc/network/interfaces

The above is for Wheezy. For Jessie one would have to install the required sysv packages, and then either disable or uninstall systemd . . . plenty of instruction on the web about this. As it seems many people do not care for systemd . . .

Anyway, just a heads up, in case it proves useful for you. Also, I’ve never seen that script before . . .heh. No surprise though.

It's part of the board specific boot setup script..

https://github.com/RobertCNelson/boot-scripts/blob/master/boot/am335x_evm.sh#L143

/opt/scripts/

Regards,

I think I figured out the progression:

1.) I have a single partition install. That was how the flasher wrote it. So it seems it’s not safe to load g_multi.

2.) I don’t have the two files tested for loading g_ether so it does not load that module

3.) It falls through to load g_serial.

The only way to get them all appears to be g_multi as g_serial and g_ether are exclusive. Best of all worlds for me would be a g_combo that did serial/ethernet but not mass storage. The automatic mounting of the /boot partition on MACs as removable media was my least favorite part of it. Rarely useful but had to be manually ejected prior to a reboot or you got complained at by OS X.

I’m content I think with the serial. That’s a basis from which I can get other things working and it’s less susceptible to breakage than the usb_ethernet.

a "g_combo" using serial/ethernet would be something i'd make default
in a heartbeat.. but i don't think anyone as implemented that yet as a
gadget driver..

Regards,

a “g_combo” using serial/ethernet would be something i’d make default
in a heartbeat… but i don’t think anyone as implemented that yet as a
gadget driver…

I wonder how hard it would be to refactor out g_mass_storage from g_multi . . . but in the meantime couldn’t the g_mass_storage aspect be pointed to a file location such as /dev/null, or a file that is created solely for g_mass_storage ? No idea how this filesystem corruption works. . .