Понимание стека вызовов usb

Я нашел способ заставить его работать, но я не доволен своим решением, поэтому я все еще ищу лучший ответ.

Часть 1. Я предотвратил попытку ntpdсбросить привилегии суперпользователя.

В /usr/lib/systemd/system/ntpd.serviceпо умолчанию:

[Service]
EnvironmentFile=-/etc/sysconfig/ntpd
ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS

поэтому я «удаляю» -u ntp:ntp, помещая/etc/systemd/system/ntpd.service.d/local.conf

[Service]
ExecStart=
ExecStart=/usr/sbin/ntpd $OPTIONS

Что позволяет ntpdпродолжать работу от имени пользователя root. Это работает, но я не доволен таким подходом.

Часть 2. Необновляемая часть местного времени

Добавление в /etc/ntp.confстроки disable kernelприводит к тому, что ntpdпри запуске службы регистрирует ошибку ntp_adjtime() failed: Operation not permittedтолько один раз, а не 3 раза без настройки. Поскольку он не может изменить часы, это приемлемо. В идеале даже не пытаться переводить часы.

1
29.12.2020, 12:45
1 ответ

Частичный ответ :Драйверы USB, как правило, представляют собой модули ядра, которые загружаются для конкретных USB-устройств, просматривая идентификатор производителя/устройства и другие шаблоны, встроенные в модуль. Вы можете найти эту информацию для существующих драйверов с modinfo, например.

$ sudo modinfo usbhid
filename:       /lib/modules/4.12.13/kernel/drivers/hid/usbhid/usbhid.ko
license:        GPL
description:    USB HID core driver
author:         Jiri Kosina
author:         Vojtech Pavlik
author:         Andreas Gal
alias:          usb:v*p*d*dc*dsc*dp*ic03isc*ip*in*
depends:        hid,usbcore
intree:         Y
vermagic:       4.12.13 SMP preempt mod_unload modversions 686 
parm:           mousepoll:Polling interval of mice (uint)
parm:           jspoll:Polling interval of joysticks (uint)
parm:           ignoreled:Autosuspend with active leds (uint)
parm:           quirks:Add/modify USB HID quirks by specifying  
quirks=vendorID:productID:quirks where vendorID, productID, and quirks are all in 0x-prefixed hex (array of charp)

Существуют также различные инструменты, которые могут показать существующему устройству, какой драйвер используется. Я считаю, что все они в конечном итоге используют информацию из иерархии /sys.

Так что если вы хотите написать новый драйвер, вам нужно научиться писать модуль ядра (гугл, тут есть туториалы ). Выберите существующий драйвер и измените его.

Вы также можете писать «драйверы» (или, скорее, прикладные программы )в пространстве пользователя с библиотекой типа libusb .

Документация ядра также включает информацию о USB API и, соответственно, информацию о том, как работает стек USB.

1
18.03.2021, 22:40

Теги

Похожие вопросы