|
свой драйвер АЦП, два пути |
|
|
|
 |
Ответов
(30 - 44)
|
Aug 30 2013, 16:21
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(psL @ Aug 30 2013, 19:33)  Драйвер АЦП, имхо, по простому - это символьное устройство: данные накапливаются в fifo, размер которого превышает максимальное время опроса. Метка времени отсчетам не нужна, потому что если частота дискретизации постоянная, время отсчета можно узнать по номеру отсчета в буфере, относительно последнего. Если АЦП является неотьемлемой частью системы, т.е. подключен в течение всего времени работы устройства, udev не нужен, потому что при этом драйвер включается на шину при старте ядра в MACHINE_START. udev нужен только при p&p. Регистрация устройства в /dev производится последовательностью вызовов register_chrdev, class_create, device_create при probe драйвера. После того как драйвер поднимется ядром при старте, ему доступны зарегистрированные в file_operations вызовы. Что касается sysfs, это просто интерфейс между драйвером и юзерспейсом, можно пользовать, а можно и нет. Как альтернатива, например, вызов ioctl драйвера. Кроме того, sysfs удобен с т.з. настройки устройства, выдачи статистики драйвера и т.п. поскольку позволяет работать c устройством через echo/cat из консоли. Что касается встраивания устройства в различные фреймфорки (v4l) это, имхо, имеет смысл в случае, когда необходимо типовое использование устройства в основном в сторонних программах, в случае специфической подсистемы видимо это избыточно. Нет желания спорить по всем пунктам, по которым не согласен. Лишь о главном. V4L это video for Linux. Я не вижу никакого смысла делать драйвер АЦП в видео системе. Кстати уже давно используется новая версия V4L2. То что вы называете fifo, используется не только в видео фор линукс, но и в сетевых драйверах, USB драйверах, фрейм буферах и т.д.. Это называется ПДП (DMA). Зачем надо усложнять драйвер ненужными наворотами из видео системы, когда можно написать простой с использованием ПДП? посмотите что такое udev и как он создает пайпы для всех устройств, а не только PnP http://www.iredale.net/p/by-title/introduc...tion-latest.pdf
|
|
|
|
|
Aug 30 2013, 20:09
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390

|
Цитата(Tarbal @ Aug 30 2013, 20:21)  V4L это video for Linux. Я не вижу никакого смысла делать драйвер АЦП в видео системе. Кстати уже давно используется новая версия V4L2. То что вы называете fifo, используется не только в видео фор линукс, но и в сетевых драйверах, USB драйверах, фрейм буферах и т.д.. Это называется ПДП (DMA). Зачем надо усложнять драйвер ненужными наворотами из видео системы, когда можно написать простой с использованием ПДП? посмотите что такое udev и как он создает пайпы для всех устройств, а не только PnP http://www.iredale.net/p/by-title/introduc...tion-latest.pdfНе нужно путать мягкое с мокрым. FIFO - это способ организации памяти по принципу первый вошел, первый вышел, а ПДП - механизм обмена периферии с памятью на прямую, без участия процессора. При том, что fifo можно заполнять хоть по полингу, а ПДП м.б. к одному адресу памяти  udev для встраиваемых систем вообще избыточен, поскольку состав подключаемого оборудования известен заранее и находится уже на борту. Обычно используют mdev из bb Хотя может вы про adc на usb или pci шине. V4L (про 2 в курсе  ) приведен как пример (было в предыдущих постах), по поводу АЦП в V4L - во-первых, видеосигналы и АЦП бывают разные, во-вторых, аудиопоток в видео никто не отменял
|
|
|
|
|
Aug 30 2013, 22:08
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(A. Fig Lee @ Aug 30 2013, 20:04)  Да проблемы там больше не линуксовые. Послать правильные данные хочется. Както оно все не то, что виндоус посылает. Пример я просто привел как показатель использования разных шин Это не противоречит тому, что я сказал. Там несколько драйверов и несколько устройств создаётся. В разных шинах. Каждому драйверу создается хотя бы одно устройство. На I2C один драйвер, на USB другой, на Video третий и не удивлюсь если это не предел.
|
|
|
|
|
Aug 31 2013, 17:11
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(psL @ Aug 31 2013, 00:09)  по поводу АЦП в V4L - во-первых, видеосигналы и АЦП бывают разные, во-вторых, аудиопоток в видео никто не отменял Вы о чем? Вопрос стоит как проще сделать драйвер для АЦП, а не о способах использования АЦП в муьтимедиа даже если для вас это наиболее удобный способ подключить АЦП. Цитата(psL @ Aug 31 2013, 00:09)  Не нужно путать мягкое с мокрым. FIFO - это способ организации памяти по принципу первый вошел, первый вышел, а ПДП - механизм обмена периферии с памятью на прямую, без участия процессора. При том, что fifo можно заполнять хоть по полингу, а ПДП м.б. к одному адресу памятиwink.gif ПДП может - скопировать блок памяти в другое место - пересылать значение из фиксированного адреса в инкрементируемый поинтер (назовем так для краткости изложения) - пересылать из инкрементируемого адреса в фиксированный. Я натянул второй метод на фифо, хотя он гораздо удобнее -- он сразу доставит данные. Но если вы настаиваете, то имея ПДП фифо не нужен как страшный сон. Цитата(psL @ Aug 31 2013, 00:09)  udev для встраиваемых систем вообще избыточен, поскольку состав подключаемого оборудования известен заранее и находится уже на борту. Обычно используют mdev из bb Это уже придирка. Я имел ввиду udev как концепцию в противовес методу делать пайпы вручную.
Сообщение отредактировал Tarbal - Aug 31 2013, 17:15
|
|
|
|
|
Aug 31 2013, 17:37
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата Но если вы настаиваете, то имея ПДП фифо не нужен как страшный сон. Скоростная периферия работает не с контроллером DMA а сама является bus master и фифо там нужен чтобы смягчить нагрузку на шину. Периферии попроще - тоже самое, только чтобы упростить жизнь контроллеру DMA у которого каналов до и более. Без фифо любит делать атмел - кривейшая периферия наверно из того с чем встречался. Хотя я вас возможно неправильно понял (тут вы сами виноваты) и имеется ввиду фифо в общей памяти а не локальная память периферийных устройств, так без буферов для DMA которые в очередь как фифо выстраиваются ни одна нормальная ОС не обходится.
Сообщение отредактировал sasamy - Aug 31 2013, 18:07
|
|
|
|
|
Aug 31 2013, 17:57
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(sasamy @ Aug 31 2013, 21:37)  Скоростная периферия работает не с контроллером DMA а сама является bus master и фифо там нужен чтобы смягчить нагрузку на шину. Периферии попроще - тоже самое, только чтобы упростить жизнь контроллеру DMA у которого каналов до и более. Без фифо любит делать атмел - кривейшая периферия наверно из того с чем встречался. Я с этим не спорю. Разве вопрос стоит о том как устроена скоростная периферия? Давайте не будем уходить в теорию в то время, когда человеку надо решить его конкретную проблему. Был вопрос как проще сделать драйвер для АЦП и каким способом сделать это правильно, чтобы /sys был заполнен необходимыми псевфо файлами. Я предложил как это сделать. Что имеется ввиду под фифо в контексте данной задачи я смутно себе представляю. Надо поставить какой-то дополнительный чип? Или как? Исполнить его программно в интеррапте? В то же время процессор имеет немерянное число каналов ПДП, один из которых прекрасно справится с работой. В то же время использование мультимедиа драйверов в качестве прототипа я считаю не лучшим подходом.
|
|
|
|
|
Aug 31 2013, 18:17
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(Tarbal @ Aug 31 2013, 21:57)  Был вопрос как проще сделать драйвер для АЦП и каким способом сделать это правильно Пример V4l2 - это как можно не напрягая мозг использовать фреймворк у которого есть готовые средства для управления памятью ( буфер DMA + метаинформация) буферы отображаются в памяти пользовательского процесса и позволяют избежать лишнего копирования за счет CPU которе неизбежно будет при использовании read/write (copy_to_user()/copy_from_user() ) Цитата Что имеется ввиду под фифо в контексте данной задачи Кольцевая очередь (циклический двусвязный список) из этих буферов (вернее их там две). Кто и по какому интерфейсу заполняет буферы - вообще не важно, хоть за счет ЦПУ. Цитата В то же время использование мультимедиа драйверов в качестве прототипа я считаю не лучшим подходом. Естественно, есть готовые фреймворки, но ТС непременно хочет _свой_, он так и написал.
Сообщение отредактировал sasamy - Aug 31 2013, 19:08
|
|
|
|
|
Aug 31 2013, 19:51
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(sasamy @ Aug 31 2013, 22:17)  Пример V4l2 - это как можно не напрягая мозг использовать фреймворк у которого есть готовые средства для управления памятью ( буфер DMA + метаинформация) буферы отображаются в памяти пользовательского процесса и позволяют избежать лишнего копирования за счет CPU которе неизбежно будет при использовании read/write (copy_to_user()/copy_from_user() ) Кому как. Мне так легче сделать как требуется. Я так привык. Цитата(sasamy @ Aug 31 2013, 22:17)  Кольцевая очередь (циклический двусвязный список) из этих буферов (вернее их там две). Кто и по какому интерфейсу заполняет буферы - вообще не важно, хоть за счет ЦПУ. Как закоренелый реалтаймщик я не принимаю решений за счет ЦПУ, когда есть хардвер, которуй не только для этой задачи предназначен, но и сделает работу эффективнее. Я не спорю насчет мультимедиа, потому как не делал таких драйверовm, а код ковырять просто для поиска доказательств лень, однако в драйвере фрейм буфера используется ПДП. Подозреваю, что если копнуть, то и в мултимедиа фифо буферами оперирует, которые на низком уровне заполнены при помощи ПДП. Цитата(sasamy @ Aug 31 2013, 22:17)  Естественно, есть готовые фреймворки, но ТС непременно хочет _свой_, он так и написал. На мой взгляд он абсолютно прав. Надо делать так как надо, а не так как получится.
Сообщение отредактировал Tarbal - Aug 31 2013, 19:57
|
|
|
|
|
Sep 2 2013, 14:07
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(Tarbal @ Aug 31 2013, 23:51)  я не принимаю решений за счет ЦПУ При чем тут ЦПУ ? вы похоже ни слова не поняли из того что я написал. Цитата На мой взгляд он абсолютно прав. Надо делать так как надо, а не так как получится. Рекомендую эти два поста прочитать и сходить по ссылкам которые там http://electronix.ru/forum/index.php?showt...t&p=1175040если делать правильно о таких вещах которые вы тут про ноды и шины описываете вообще не надо думать, за это отвечает общий код для класса соотвествующих устройств, вы пишете только код специфичный для вашего устройства - ага ООП стиль во все поля. Даже если приспичило велосипед изобрести - есть специальный класс misc device http://lxr.free-electrons.com/source/drivers/char/misc.c
Сообщение отредактировал sasamy - Sep 2 2013, 14:26
|
|
|
|
|
Sep 2 2013, 16:48
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390

|
Цитата(Tarbal @ Aug 31 2013, 21:11)  имея ПДП фифо не нужен как страшный сон. Fifo работает так: ПДП заполняет блок памяти, после чего вызывает прерывание или каким-то другим образом сигнализирует процессору, что блок заполнился, и начинает заполнять следующий блок памяти. Логично, чтобы эти блоки следовали непрерывно. С точки зрения процессора память, разбитая для ПДП на блоки, непрерывна и представляет собой FIFO или циклический буфер. Допустим данные добавляются в хвост. Процессор, получив прерывание или флаг, смещает указатель хвоста на размер блока, что соответствует push в fifo. При вызове read читаются n байт, и голова смещается на эти n байт. Что соответствует pop из fifo. Голова сравнялась с хвостом - данных нет, ждем нового прерывания в ядре, блокируем дескриптор устройства и т.д. Без fifo придется читать данные блоками только фиксированного размера, а после чтения как-то переключать указатель на следующий блок. Т.е. вообще говоря будет какой-то кольцевой буфер указателей опять же. Получается что используя ПДП в чистом виде, без fifo, можно читать только один блок, непосредственно принятый ПДП, а если не успели? У процессора может и не быть ПДП к АЦП. Тогда FIFO драйвера может заполняться по прерыванию или полингу. Т.е. это к тому, что FIFO все равно есть, а вот ПДП уже отсутствует. По поводу udev, задумался о своем), не учел, что это тема про линукс в общем, а не только про драйверы встроенной периферии.
|
|
|
|
|
Sep 3 2013, 13:29
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(sasamy @ Aug 31 2013, 18:07)  Кольцевая очередь (циклический двусвязный список) из этих буферов (вернее их там две). Кто и по какому интерфейсу заполняет буферы - вообще не важно, хоть за счет ЦПУ. Цитата(sasamy @ Sep 2 2013, 18:07)  При чем тут ЦПУ ? вы похоже ни слова не поняли из того что я написал. Я полагаю вы и сами не поняли что написали. Цитата(psL @ Sep 2 2013, 20:48)  Fifo работает так: ПДП заполняет блок памяти, после чего вызывает прерывание или каким-то другим образом сигнализирует процессору, что блок заполнился, и начинает заполнять следующий блок памяти. Логично, чтобы эти блоки следовали непрерывно. С точки зрения процессора память, разбитая для ПДП на блоки, непрерывна и представляет собой FIFO или циклический буфер. Допустим данные добавляются в хвост. Процессор, получив прерывание или флаг, смещает указатель хвоста на размер блока, что соответствует push в fifo. При вызове read читаются n байт, и голова смещается на эти n байт. Что соответствует pop из fifo. Голова сравнялась с хвостом - данных нет, ждем нового прерывания в ядре, блокируем дескриптор устройства и т.д. Без fifo придется читать данные блоками только фиксированного размера, а после чтения как-то переключать указатель на следующий блок. Т.е. вообще говоря будет какой-то кольцевой буфер указателей опять же. Получается что используя ПДП в чистом виде, без fifo, можно читать только один блок, непосредственно принятый ПДП, а если не успели? У процессора может и не быть ПДП к АЦП. Тогда FIFO драйвера может заполняться по прерыванию или полингу. Т.е. это к тому, что FIFO все равно есть, а вот ПДП уже отсутствует.
По поводу udev, задумался о своем), не учел, что это тема про линукс в общем, а не только про драйверы встроенной периферии. Можно сказать, мы с вами что пришли к консенсусу по поводу ПДП и фифо?  Делать на Линуксе устройство быстрого обмена без ПДП стремно, а зачастую и невозможно. Здесь меня поддержит A.Fig Lee. Мы с ним недавно обсуждали эту тему на другой площадке.
Сообщение отредактировал Tarbal - Sep 3 2013, 13:39
|
|
|
|
|
Sep 3 2013, 16:14
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(Tarbal @ Sep 3 2013, 17:29)  Я полагаю вы и сами не поняли что написали. Цитата фреймворк у которого есть готовые средства для управления памятью ( буфер DMA + метаинформация) буферы отображаются в памяти пользовательского процесса странно что после этого описания вы так и не поняли о чем речь и продолжаете капитанить Цитата Делать на Линуксе устройство быстрого обмена без ПДП стремно самое смешное что именно для этого весь пост и был - как при использовании DMA иметь одновременно быстрый доступ к данным из пользовательского процесса. Можно конечно списать на то что вы иностранец, но я больше склоняюсь что житель крайнего севера.
|
|
|
|
|
Sep 3 2013, 16:24
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата У процессора может и не быть ПДП к АЦП. Тогда FIFO драйвера может заполняться по прерыванию или полингу. Т.е. это к тому, что FIFO все равно есть, а вот ПДП уже отсутствует. Цитата(sasamy @ Sep 3 2013, 20:14)  самое смешное что именно для этого весь пост и был - как при использовании DMA иметь одновременно быстрый доступ к данным из пользовательского процесса. Можно конечно списать на то что вы иностранец, но я больше склоняюсь что житель крайнего севера. самое смешное, что вы постингов не читаете на которые были ответы. Кстати заодно перечитайте самый первый постинг для освежения памяти. Вам я больше отвечать не буду.
|
|
|
|
|
Sep 3 2013, 17:46
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(Tarbal @ Sep 3 2013, 20:24)  самое смешное, что вы постингов не читаете на которые были ответы. Почему же не читаю - читаю Цитата Кстати заодно перечитайте самый первый постинг для освежения памяти. Вот мой ответ на исходный пост http://lxr.free-electrons.com/ident?i=misc_registerгуглится в 3 сек. Я вообще не хотел в эту ветку влезать с таким изначально простым вопросом, но увидел ваши фееричные рассуждения про FIFO  не смог пройти мимо Цитата Вам я больше отвечать не буду. да сколько угодно
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|