커널 모듈 메모리 액세스


9

두 개의 다른 커널 모듈이 ioremap_nocache () 호출에서 동일한 메모리 영역에 액세스 할 수 있습니까?

무선 드라이버와 별도의 모듈이 있는데 드라이버가 여전히 작동하는 동안 별도의 모듈에서 카드의 노이즈 값을 프로파일 링하고 싶습니다. 따라서 위의 질문입니다.

내가 조사한 방법 중 하나는 드라이버에서 커널 스레드를 시작하는 것이었고, 동일한 주소 공간에 대한 동시 읽기 / 쓰기로 인해 발생하는 경쟁 조건을 방지하기 위해 세마포어를 구현했습니다. 자식 스레드가 동일한 메모리 영역에 액세스 할 수 있기를 바랍니다.

불행히도 이것은 예상대로 작동하지 않았습니다. 나는 어떤 제안을 부탁드립니다.


노이즈 값을 프로파일 링하기 위해 왜 커널 모듈이 필요합니까?
gertvdijk

질문에 감사드립니다. 무선 드라이버는 매우 복잡하며,주기를 변경하면 의도하지 않은 결과가 발생할 수 있습니다. 내 요구에 비해 너무 긴 간격에 대해서만 교정을 수행하기 때문에이 작업을 수행해야합니다. 별도의 모듈에서 장치를 프로파일 링하는 방법을 정확히 알고 있기 때문에 드라이버가 사용하는 동일한 메모리 영역에 액세스 할 수 있는지 궁금합니다.
Radagasp

2
제발 편집 이전 시도에 대한 모든 세부 사항을 포함하는 질문을 / 접근한다. 이것이이 사이트의 작동 방식입니다. 토론 포럼이 아니라 Q & A 사이트입니다.
gertvdijk

토론에는 질문과 답변, 일부 권리와 다른 권리가 포함될 수 있습니다. 관리자 전체의 규칙 해석이 의미 론적 영역에있는 것 같습니다. 물론 내 질문을 업데이트했습니다.
Radagasp

답변:


7

커널 모듈간에 데이터를 공유하는 것이 더 쉽다고 생각하면서 다른 커널 모듈을 구현하려고한다고 가정합니다. 그러나 아마도 좋은 선택이 아닙니다. 사용자 공간에서 '노이즈 프로파일 링'이 가능하다면 사용자 공간에서 '프로파일 러'를 구현하는 것이 더 나은 해결책이라고 생각합니다.

이 솔루션에서 사용자 공간 프로파일 러는 데이터를 읽고 계산을 수행하며 결과를 제출합니다.

이 솔루션이 정상이면 구현은 다음과 같습니다.

커널 모듈에서는 '/ proc'에 char 장치를 등록하고 'read'및 'write'프리미티브를 구현하는 것입니다. 사용자 공간에서 프로파일 러를 구현하고 문자 장치를 읽고 쓰는 것입니다. 이 구현에 대한 자세한 내용과 정보는 여기에 있습니다 .


나는 당신의 대답을 확실히 얻지 못한다고 생각합니다 ... 알다시피, 여전히 모듈을 작성해야하며,이 모듈은 다른 모듈의 ioremap_nocache () 호출에서 동일한 메모리 영역에 액세스하려고 시도합니다. 모듈이 사용 중입니다. 아니면 당신은 내가 무선 모듈에 숯불 장치를 등록한다고 말하는거야
Radagasp

1
맞습니다. 소프트웨어는 구현해야하지만 모듈은 구현하지 않아야합니다. '/ dev / nameofdevice'에서 읽고 쓰는 일반 사용자 공간 프로그램을 모듈보다 단순하게 작성해야합니다. 'ioremap_nocache ()'를 사용할 필요없이 syscall을 'open', 'read', 'write', 'close'로 지정하면됩니다. 그리고 예, 무선 모듈은 데이터를 사용자 영역에 노출시키기 위해 내부에 char 장치 '/ dev / nameofdevice'를 등록해야합니다.
vitorafsr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.