There does not seem to be proper udev support on my Ubuntu 10.04 system. The kernel can see the AVR programmer when hot-plugged, but takes no action at all. If I manually install the module with ‘modprobe cdc_acm’ it creates the /dev/ttyACM0 and ACM1 devices and all is well.
Does anyone know the correct recipe for a udev rule? The documentation for udev is, to put it mildly, a bit disorganized. Google searches bring up a number of hits related to cell phone interface and all of them deal with situations where the kernel is already executing a rule but is not creating the correct device name and/or permissions. In my case it is simply not taking any action to load the driver or create the device file.
I am not sure why your system is behaving that way. I just tested the programmer on Ubuntu 12.04. The cdc_acm module does not show up in lsmod initially. When a programmer is plugged in, the module automatically gets loaded the virtual COM ports are created.
I am not sure if udev is the right place to solve this problem. What if you added “cdc_acm” to the list in /etc/modules? That should load the module at boot time, which is not quite as good as the behavior I saw in Ubuntu 12.04 but will probably work for you.
Turns out to be my own cranial density… I had a modprobe blacklist rule against cdc_acm! I use a USB connected product called Kryoflux to read floppy disks. The kernel thinks it’s supposed to be supported by cdc_acm, but that module causes a kernel panic when it tries to initialize. The blacklist rule prevents that. I’ll just have to remember to modprobe manually when I use the AVR programmer.