LINUX.ORG.RU

как создать виртуальный platform_device в ядре?

 , , ,


0

1

Пытаюсь заюзать старый код от 2012 года https://gist.github.com/maxlapshin/99c01ab4cf4e48d76819f4a96f6b8a90

dvb_dummy_adapter.c

Штука делает простую вещь: программа настраивает тестовый DVB тюнер и начинает сосать данные. Данные попадают те, которые заливаются в тюнер из юзерленда через /dev/dvb/adapter0/dvr0

Сейчас драйвер устроен как platform_driver

В нём есть старый код, который deprecated: в инициализации драйвера идет прямое создание устройства:

https://gist.github.com/maxlapshin/99c01ab4cf4e48d76819f4a96f6b8a90#file-dvb_...

platform_device_register_simple

Это мало того, что очень не рекомендуется, так ещё и не дает выгрузить драйвер: после rmmod в /sys/devices/platform/dvb_dummy_adapter.0 остаются данные

Вопрос: а как отказаться от platform_device_register_simple если такого устройства нет?

Как сообщить ядру, что я хочу что бы создалось устройство dvb_dummy_adapter@0, которое будет обслуживаться этим драйвером?

Если я правильно понимаю, то в нормальных условиях какой-то пробник шины найдет устройство и запустит ему функцию probe, а как это должно тут работать?

программа настраивает тестовый DVB тюнер

что за тюнер ?

Вопрос: а как отказаться от platform_device_register_simple если такого устройства нет?

на системах где нет PnP как на PC используют device tree, если это виртуальное устройство без реального устройства - странно искать какой-то правильный метод.

anonymous
()
Ответ на: комментарий от anonymous

так фейковый же.

Создаем псевдоустройство, которое потом будет кормиться инпутом:

cat /tmp/bigdump.ts > /dev/dvb/adapter0/dvr0

и с другой стороны принимаем результат

max_lapshin ★★★★★
() автор топика

так ещё и не дает выгрузить драйвер: после rmmod в /sys/devices/platform/dvb_dummy_adapter.0 остаются данные

Может ты всё-таки не дочищаешь за собой при выгрузке?

Если я правильно понимаю, то в нормальных условиях какой-то пробник шины найдет устройство и запустит ему функцию probe, а как это должно тут работать?

Я бы сделал по типу tap, когда у тебя модуль вытаскивает некоторое управляющее устройство в /dev, на нём применяешь ioctl который создаёт и удаляет устройства, по сути является тем самым probe caller

Dark_SavanT ★★★★★
()
Ответ на: комментарий от max_lapshin

Создаем псевдоустройство, которое потом будет кормиться инпутом:
cat /tmp/bigdump.ts > /dev/dvb/adapter0/dvr0

используй как раньше platform_device_register_simple - ничего страшнрнго в нём нет, а в примере помоему отсутствует platform_device_unregister() - поэтому и остается от него мусор

anonymous
()
Ответ на: комментарий от anonymous

platform_device_unregister отсутствует, это так.

Попробую воткнуть

max_lapshin ★★★★★
() автор топика
Ответ на: комментарий от max_lapshin

оно почему-то зависает, если в конец dvb_dummy_remove воткнуть platform_device_unregister

его надо втыкать в dvb_dummy_exit() перед platform_driver_unregister(), и хранить где-то указатель(и) на plat_dev

как тут например

#ifdef MODULE
static void __exit vfb_exit(void)
{
	platform_device_unregister(vfb_device);
	platform_driver_unregister(&vfb_driver);
}

module_exit(vfb_exit);

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.