2014-11-02 2 views
1

Я работаю над портом ядра Linux на неподдерживаемой платформе ARM SoC. К сожалению, на этом SoC разные периферийные устройства будут иногда совместно использовать регистры или объединенные регистры в одном и том же регионе памяти. Это дает мне печаль с помощью спецификации дерева устройств, которая, похоже, не поддерживает идею о том, что разные устройства используют один и тот же набор регистров или регистров, смешанных в одном и том же адресном пространстве. Различные документы, которые я прочитал в дереве устройств, не указывают на правильный способ справиться с этим.Как разные драйверы дерева устройств Linux имеют общие регистры?

Мой простой подход, чтобы указать один и тот же регион регистров в нескольких драйверах, «не может запрашивать область для ресурса» для второго устройства, которое пытается отобразить один и тот же регион регистров, как и другой драйвер. По моему мнению, это связано с тем, что ядро ​​применяет правила дерева устройств в отношении регистров.

Какое предпочтительное общее решение для решения этой дилеммы? Должен ли быть драйвер более высокого уровня, который обеспечивает доступ к региону с общим регистром? Есть ли примеры в существующем ядре Linux, которые затрагивают эту конкретную проблему (я не мог найти ее, но я не уверен, что искать)?

ответ

0

Я столкнулся с такой же проблемой. Мое решение состоит в том, чтобы создать отдельный модуль для защиты общих ресурсов, а затем написать «клиентские модули», которые используют символы, экспортированные из общего модуля.

Обратите внимание, что это имеет смысл и с точки зрения безопасности. Как бы вы могли реализовать надлежащую блокировку памяти и обеспечить согласованность операций в нескольких независимых модулях?