2014-11-02 1 views
1

지원되지 않는 ARM SoC 플랫폼에 대한 Linux 커널 포트에서 작업하고 있습니다. 안타깝게도이 SoC에서 여러 주변 장치가 동일한 메모리 영역에서 레지스터 또는 혼합 레지스터를 공유하기도합니다. 이것은 동일한 주소 공간에서 혼합 된 동일한 레지스터 또는 레지스터 세트를 공유하는 다른 장치의 개념을 지원하지 않는 것 같은 장치 트리 사양에 대해 슬픔을주고 있습니다. 장치 트리에서 읽은 다양한 문서는이 문제를 해결할 적절한 방법을 제안하지 않습니다.다른 Linux 장치 트리 드라이버는 공통 레지스터를 어떻게 공유해야합니까?

여러 드라이버에서 같은 레지스터 영역을 지정하는 간단한 접근 방식은 다른 드라이버와 동일한 레지스터 영역을 매핑하려고 시도하는 두 번째 장치에 대해 "리소스 용 영역을 요청할 수 없습니다"를 던졌습니다. 내 이해에서, 이것은 커널이 레지스터 영역에 관한 디바이스 트리 규칙을 적용한 결과입니다.

이 딜레마를 해결하기위한 가장 좋은 해결책은 무엇입니까? 공유 레지스터 영역에 대한 액세스를 마샬링하는 상위 수준의 드라이버가 있어야합니까? 이 특정 문제를 해결하는 기존 Linux 커널의 예가 있습니까 (찾을 수는 없지만 찾아야할지 모르겠 음)?

답변

0

나는 정확히 같은 문제에 직면하고 있습니다. 내 솔루션은 공통 리소스를 보호하기 위해 별도의 모듈을 만든 다음 공통 모듈에서 내 보낸 심볼을 사용하는 '클라이언트 모듈'을 작성하는 것입니다.

이 점은 안전 관점에서도 마찬가지입니다. 그렇지 않으면 적절한 메모리 잠금을 구현하고 여러 독립 모듈에 걸쳐 작업 일관성을 보장하려면 어떻게해야합니까?

관련 문제