2017-09-06 1 views
0

나는() 및 ioremap() request_mem_region를 호출 드라이버 (D1) 및 ioremap() 같은 주소로를 호출 드라이버 (D2)를 쓰고 있어요에 호출합니다.
이 경우 어떻게됩니까?
분할지도는 두 개의 리눅스 디바이스 드라이버

+2

* "이 경우 어떻게됩니까?"* - 커널 규칙을 준수하지 않는 의도적으로 작성된 드라이버를 갖게됩니다. 그렇지 않으면 시스템이 예상대로 작동합니다. 코드 구조가 좋지 않습니다. 코드는 작동하지만 그것을 유지해야하는 사람들은 고통을 겪습니다. – sawdust

답변

0

두 드라이버가 예상대로 작동하지만 ioremap() 전에 request_mem_region()을 사용하여 다른 드라이버가 해당 실제 메모리 영역에 쓰기를하지 않도록하는 것이 좋습니다.

request_mem_region은 드라이버가 request_mem_region을 통해 같은 지역에 겹치는 전화를 다른 드라이버를 방지 할 I/O 주소의 범위를 사용하려고 커널을 알려줍니다.

이 메커니즘은 모든 종류의 매핑을 수행하지 않으며, 모든 커널 장치 드라이버가 훌륭해야한다는 사실에 의존하는 순수 예약 메커니즘이며 request_mem_region을 호출하고 반환 값을 확인해야하며 오류가 발생했습니다.

따라서 코드가 request_mem_region()없이 작동한다는 것은 완전히 논리적입니다.

+0

답장을 보내 주셔서 감사합니다. 내 의심이 d1에 있습니다. d2에서 request_mem_region 및 ioremap을 호출합니다. d1이 이미 범위를 도약 했으므로 ioremap 만 호출합니다. d2에서 ioremap을 사용하여 이미 잠겨있는 동일한 실제 주소에 대한 가상 주소를 가져올 수 있습니까? d1 – anikhan

+0

@anikhan 제 경우에도 동일한 상황이었습니다. 두 번째 드라이버의 ioremap()이 정상적으로 작동하고 해당 가상 주소를 읽고 쓸 수 있으며, 드라이버에 문제가 있습니까? – Ash

관련 문제