[systemd-devel] how to bind to other drivers using systemd
Harald Hoyer
harald.hoyer at gmail.com
Tue Oct 13 05:24:02 PDT 2015
On 13.10.2015 14:08, Panu Matilainen wrote:
> On 09/30/2015 08:43 PM, Flavio Leitner wrote:
>> On Tue, Sep 29, 2015 at 12:30:54AM +0300, Mantas Mikulėnas wrote:
>>> I wonder if this could be handled with a generic Type=oneshot,
>>> ExecStart=driverctl bind foo...
>>
>> Could you elaborate more on that?
>>
>> If driverctl is an utility, we could use scripts, yeah. The issue
>> is how to identify the device. We probably would need some sort
>> matching mechanism like udev does.
>
> Since the silence is deafening, and since its usually easier to poke holes in
> something concrete no matter how incomplete and/or broken, here's a beginning
> of an approach to alternative driver assignment in the udev realm:
> http://laiskiainen.org/udev/driverctl/
>
> # <copy/patch the bits to their places>
> # echo vfio-pci > /etc/driverctl.d/0000:01:00.0
> # echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove
> # echo 1 > /sys/bus/pci/rescan
>
> ...and there you go, udev vfio-pci is forced for that device on the rescan, and
> a real hotplug is handled similarly.
>
> Since normally the device probing occurs early in the boot, these things also
> need to go to initramfs so a dracut module/patch is needed, and dracut needs to
> be run after adding devices here, ie
>
> # echo vfio-pci > /etc/driverctl.d/0000:01:00.0
> # dracut -f
> # reboot
>
> Having to mess with initramfs is a bit of a PITA but at least some of that
> could be hidden in the driverctl utility, and then overriding the default
> driver early in the boot means we get none of the side-effects with interfaces
> coming and going, possibly wrestling with NetworkManager over it etc.
>
> For a real-world implementation there are tons of TODOs like
> - support non-pci buses
> - support direct bind/unbind in driverctl
> - million errors situations to check
> - vfio & uio -bound devices disappear from systemd, we'd probably want them
> there in some form to be able to depend on them
> - etc...
>
> - Panu -
>
I don't know nothing about driver binding/unbinding, but what happens if the
initial driver binding (with the wrong driver) happens in-between these lines?
if [ -L /sys/$DEVPATH/driver ]; then
echo "$DEV" > /sys/$DEVPATH/driver/unbind
fi
[…]
--->> HERE the other driver binds to the device <<<----
[…]
echo "$DRV" > /sys/$DEVPATH/driver_override
More information about the systemd-devel
mailing list