Need help to get udev/hotplug working for extra module in early 2.6

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

I'm maintaining a driver for Meinberg PCI cards (radio clocks, GPS
receivers, IRIG receivers), see "Standalone Computer Synchronisation":
http://www.meinberg.de/english/products/formfactor.htm#slot_card

The driver lets the ntpd daemon be able to use those PCI cards as
plugged-in reference time sources for accurate timing.

The driver package contains an extra module which is built outside the
kernel tree. The currently released version of the driver can be built
and used with kernels 2.2.x, 2.4.x, and 2.6.x.

However, that version of the driver implements a "misc" device in a way
which doesn't support 2.6's udev very well.

I've now improved the code of the kernel module (currently for 2.6.x
only) and the new module works fine under recent 2.6.x kernels, e.g.
2.6.11 (SuSE 9.1 on i386), 2.6.22 (Ubuntu on Sparc64), or 2.6.25
(openSUSE 11 on AMD x86_64).

The new driver implements a new class of character device, mbgclock,
which uses a dynamic major number. Additionally the driver supports our
new USB devices in a way they can be accessed by applications using the
same API calls as with PCI cards.

Under the newer 2.6.x kernels, if a PCI card is installed or when a new
USB radio clock is plugged in my kernel module is loaded automatically,
and the device nodes are created or deleted by udev as required, so
everything works fine.

Now I'd like to get some help to get it working on older 2.6.x kernels.

E.g. I have a SuSE 9.1 system with 2.6.4 kernel. After booting, my
kernel module is not loaded automatically even though a PCI card is
installed. If I load the module using modprobe then the PCI card is
recognized and works just fine.

If I plug in a USB device, or the USB device is already plugged in at
boot time, then the module is loaded automatically.

However, device nodes are never created automatically on that 2.6.4
system, so I have to create them the old way using mknod. So they are
even persistent over reboots, as they have been with older kernels.

Unfortunately, since the driver now uses a dynamic major number I would
normally have to load the module first, then look in /proc/devices which
major number has been assigned to my device class, and finally create
the device nodes using that major number.

So the best way to get it working would be as with recent kernels.

I'm assuming the udev actions are triggered by class_simple_device_add()
 (before 2.6.13) or class_device_create() (2.6.13 and newer). Is it
possible that I have to call some extra function in 2.6.4 to trigger a
udev or hotplug event in 2.6.4 so a device node gets created?

Unlike with newer systems where udev is configured using multiple rules
files in /etc/udev/rules.d the 2.6.4 system has only a single rules
file, namely /etc/udev/udev.rules.

Is there someone who is familiar with the history of udev/hotplug who
can point me in the right direction?


Thanks,

Martin
-- 
Martin Burnicki

Meinberg Funkuhren
Bad Pyrmont
Germany
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Linux DVB]     [Asterisk Internet PBX]     [DCCP]     [Netdev]     [X.org]     [Util Linux NG]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux