[systemd-devel] systemd inquiry

Kay Sievers kay at vrfy.org
Wed Apr 11 13:02:33 PDT 2012


On Wed, Apr 11, 2012 at 21:41, Mark Hounschell <markh at compro.net> wrote:
> On 04/10/2012 09:10 AM, Kay Sievers wrote:
>>
>> On Tue, Apr 10, 2012 at 14:36, Mark Hounschell<markh at compro.net>  wrote:
>>
>>> I am having another issue with an out of kernel "GPL" device driver not
>>> being available "on time" so to say. When the kernel discovers this pci
>>> card
>>> it loads it's kernel module and sets up the card for use. This takes
>>> around
>>> 15 seconds per card and there is usually 2-3 of them. When the card is
>>> up,
>>> running, and ready, the kernel module notifies udev who in turn executes
>>> a
>>> small script that creates 30 or so different device nodes for use with
>>> the
>>> card.
>>
>>
>> A bit unrelated to the described specific problem above, but:
>>
>> We do not support any kernel device driver which does not create the
>> device nodes on its own from inside the kernel. Such drivers cause
>> problems and will fail for various non-interesting reasons. You really
>> must hook up the kernel driver to register the devices with the kernel
>> driver-core; it's just a few lines to add.
>>
>> Doing mknod() in userspace is just too fragile and does not fit into
>> any synchronization logic of udev or systemd, it is not even expected
>> to work reliably with these tools.
>
>
> OK, I've changed the driver such that is creates it's own device nodes after
> the board is up and running. Like I said earlier, it takes a single board
> 10-15 seconds to come up once the driver starts it. There are now, no
> scripts required, no sysvinit, no systemd, no udev involved.

Sounds cool. :)

Udev and systemd are involved now, at least in a way that they see
uevents, which did not exist before.

> Still, when using systemd, when I get to my run-level, the application fails
> because the device nodes have yet to be created. The driver is still waiting
> for the boards to be ready. When I use sysvinit the device nodes are there
>  when I get to my run-level.

Try:
  systemctl enable udev-settle.service

Kay


More information about the systemd-devel mailing list