Информация об изменениях

Сообщение Re[2]: Разработка драйверов ядра Linux от 01.02.2024 16:46

Изменено 01.02.2024 16:49 AlexGin

Re[2]: Разработка драйверов ядра Linux
Здравствуйте, aik, Вы писали:

aik>Всяческие трейспоинты:

aik>https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/trace

Где-то можно об этом почитать подробнее?
Ну или загуглить по ключевым словам?

aik>Можно ещё попытаться грузиться под KVM+QEMU с включённым gdbstub в QEMU (-s), и при определённой удаче можно даже символы из vmlinux подгрузить в gdb.


То есть — некая эмуляция целевой OS на компьютере разработчика? Верно я это понимаю?

aik>Этих мало что ли? Можно ещё mmap на этих девайсах делать, или создавать внутри другие fd (file descriptor) и возвращать через ioctl. Ещё есть sysfs. Сетевые драйверы PCI устройств вообще ничего в /dev не создают, там свои syscalls.


Может и совсем даже не мало. Просто я полюбопытствовал.

AG> Я в курсе — что есть драйвера, которые можно динамически запускать (загружать) и удалять —

AG>
AG>insmod our_driver.ko
AG>rmmod our_driver
AG>


aik>insmod просто грузит один конкретный .ko файл, и кмк без зависимостей.

aik>modprobe ищет и грузит модуль по имени со всеми зависимостями для запущенного ядра.

Спасибо, буду в курсе!

AG>Но всё же — как принято запускать драйвера ядра? Например — при помощи systemd?

aik>хз. Наверное systemd делает и это теперь, парней уже не остановить — подменяют всё

Я совсем не уверен — делеет ли запуск драйверов подсистема systemd. Я здесь просто высказал предположение.
Как рекомендуется запускать драйвера в Linux, и как это принято классически делать?

aik>Загрузка драйвера и bind к устройствам — разные операции. Обычно драйвер сразу цепляется к девайсам, но какой нибудь vfio-pci — нет. У драйверов есть ноды bind/unbind в sysfs. Например, отцепить драйвер от девайса — "echo 0000:02:00.0 > /sys/bus/pci/drivers/xhci_hcd/unbind", прицепить назад — "echo 0000:02:00.0 > /sys/bus/pci/drivers/xhci_hcd/bind".


Спасиьо, уважаемый aik, благодарю за столь развёрнутый ответ!
Re[2]: Разработка драйверов ядра Linux
Здравствуйте, aik, Вы писали:

aik>Всяческие трейспоинты:

aik>https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/trace

Где-то можно об этом почитать подробнее?
Ну или загуглить по ключевым словам?
Возможно — это упростит и ускорит процесс отладки софта...

aik>Можно ещё попытаться грузиться под KVM+QEMU с включённым gdbstub в QEMU (-s), и при определённой удаче можно даже символы из vmlinux подгрузить в gdb.


То есть — некая эмуляция целевой OS на компьютере разработчика? Верно я это понимаю?

aik>Этих мало что ли? Можно ещё mmap на этих девайсах делать, или создавать внутри другие fd (file descriptor) и возвращать через ioctl. Ещё есть sysfs. Сетевые драйверы PCI устройств вообще ничего в /dev не создают, там свои syscalls.


Может и совсем даже не мало. Просто я полюбопытствовал. Не факт, что это для меня будет иметь практический счысл.

AG> Я в курсе — что есть драйвера, которые можно динамически запускать (загружать) и удалять —

AG>
AG>insmod our_driver.ko
AG>rmmod our_driver
AG>


aik>insmod просто грузит один конкретный .ko файл, и кмк без зависимостей.

aik>modprobe ищет и грузит модуль по имени со всеми зависимостями для запущенного ядра.

Спасибо, буду в курсе!

AG>Но всё же — как принято запускать драйвера ядра? Например — при помощи systemd?

aik>хз. Наверное systemd делает и это теперь, парней уже не остановить — подменяют всё

Я совсем не уверен — делеет ли запуск драйверов подсистема systemd. Я здесь просто высказал предположение.
Как рекомендуется запускать драйвера в Linux, и как это принято классически делать?

aik>Загрузка драйвера и bind к устройствам — разные операции. Обычно драйвер сразу цепляется к девайсам, но какой нибудь vfio-pci — нет. У драйверов есть ноды bind/unbind в sysfs. Например, отцепить драйвер от девайса — "echo 0000:02:00.0 > /sys/bus/pci/drivers/xhci_hcd/unbind", прицепить назад — "echo 0000:02:00.0 > /sys/bus/pci/drivers/xhci_hcd/bind".


Спасиьо, уважаемый aik, благодарю за столь развёрнутый ответ!