У меня есть аппаратный клиент 1 , чья линия карт сбора данных, для которой я написал драйвер ядра Linux для Linux.
Карта может передавать только 1-4 байта ввремя, зависящее от того, как пользователь указывает использовать его, учитывая это, я использую ioctl
для некоторых функций, но также использую структуру file_operations
для обработкикарта как базовое символьное устройство, чтобы дать пользователю карты возможность просто использовать read
или write
, если они просто хотят простой однобайтовой связи с картой.
После обсуждения драйвера с клиентом один из их разработчиков понимает, что обработка карты как символьного устройства с использованием open/read/write
приведет к задержке на шине PCI ,По сравнению с использованием open/ioctl
.
Учитывая, что драйвер не делает различий в том, как он открывается, а функции ioctl
и read/write
вызывают один и тот же код, есть ли какое-либо обоснование для этой проблемы?
Если так, как быЯ проверяю задержку bus по коду моего драйвера?Существуют ли функции ядра, которые я могу вызвать для проверки этого?
Наконец, не будет ли мой тест шины действительным только для моих конкретных настроек (настройки ядра, платформа, синхронизация памяти, ЦП и т. Д.)?
1: у них есть только 2 других разработчика, ни один из которых никогда не использовал Linux