I've spent days trying to figure this out, and I can't find the answer. I want to use the internal 8MHz oscillator in the ATmega. I've managed to get the right fuses set and I've rebuilt the Caterina bootloader with F_CPU = 8MHz, but USB doesn't work, it just shows up as an unrecognized device under windows. Even the hardware ID is USB\UNKNOWN.
My understanding is that the bootloader is set to use high speed USB mode, which of course won't work with an 8MHz clock. I've tried to set UDCON = (1<<LSM) in USBCore.cpp to get low speed mode, but that didn't change anything. I got curious and watched USBCore.cpp while building the bootloader, and it didn't get accessed. I'm not sure what that means, if anything.
When I pull the reset pin low, the bootloader device shows up correctly, so I'm assuming that's set to use low speed mode, but I don't really know. I rather don't want to use a crystal in this application, as it's going to get abused-- lots of mechanical shocks, I'm concerned it'd damage the crystal.
Also, if I set the CKDIV8 fuse, it shows up correctly sometimes, but it's very unstable, it takes ten or twelve tries before AVRdude can sync up again to set the fuses back. This makes me think F_USB needs to be F_CPU/8, but putting that or 1000000 wouldn't build at all.
I've tried googling this issue every way I can think of, and all I've found is unresolved forum posts, or issues due to hardware design errors. Since USB works with an external 16MHz clock, and during reset with the 8MHz oscillator, I'm inclined to think it's not my hardware.