2010-02-23 3 views
3

DMA 전송에 사용할 메모리를 만들고 싶습니다. (리눅스 2.6.18-128.el5 # 1 SMP 사용)DMA 전송에 사용할 사용자 공간의 실제 메모리 만들기

나는 나를 위해이 일을 할 수있는 H/W API 스택 + 커널 드라이버를 가지고있다.

API를 사용하여 DMA 전송을 만드는 경우 시스템 RAM (예 : 0x7373a6f8 한 번 실행)에서 매우 높은 메모리를 할당합니다. (나는 장치의 ICD를 가지고 있으므로, mmap'd 이상의 메모리 맵을 가지고 있는데,이 주소를 찾는 방법이며, 결국 내 자신의 주소와/dev/mem에 SET하고 싶다. 아래의 맵에서)

아마도이 높은 주소 주위에 메모리를 mmap 할 수없는 것처럼 보입니다. 가상 메모리 공간이 부족하고 커널에 의해 차단되고있는 것 같습니다.

내가 할 수 있기를 원하는 것은이 주소를 사용 (지도)하여 읽기/쓰기가 가능하거나 읽거나 쓸 수있는 내 자신의 실제 메모리를 만들 수 있습니다. 내가 제대로 이해 해요 경우

# cat /proc/iomem 
00000000-0009fbff : System RAM 
    00000000-00000000 : Crash kernel 
000a0000-000bffff : Video RAM area 
000c0000-000c7fff : Video ROM 
000f0000-000fffff : System ROM 
00100000-7fd64fff : System RAM  # Is this all of /dev/mem? 
    00400000-00612916 : Kernel code 
    00612917-006ef9db : Kernel data 

# cat /proc/3450/maps 
08207000-08228000 rw-p 08207000 00:00 0   [heap] 
b7e7b000-b7f85000 rw-p b7e7b000 00:00 0 
b7f89000-b7f8a000 rw-p b7f89000 00:00 0 
b7f8a000-b7f8b000 rw-s 80114000 00:11 1541  /dev/mem 
b7f8b000-b7f8d000 rw-p b7f8b000 00:00 0 
bff70000-bff85000 rw-p bffea000 00:00 0   [stack] 
+0

, 당신이 가난하게 행동하는 것 장치 드라이버를 가지고 있고, 수동으로 사용자 공간에서 물리적 RAM을 할당하는 것을 해결할려고? 대신에 드라이버를 고치는 데 관심이없는 이유가 있습니까? 이것은 매우 이상한 요청처럼 들리지만, 대부분의 사람들이 적절한 고침으로 간주하는 것이 아닙니다. 기본 드라이버 문제를 해결하고 있다면 더 많은 도움을받을 것으로 생각됩니다. –

+1

오른쪽, 사용자 공간 API/라이브러리는 sllooow입니다. 나는 경험 많은 C/C++ 개발자이지만 이전에는 장치 드라이어를 사용하지 않았으며 이제는 내 회사 도메인입니다. 나는 작업을 마친 후 빠른 (읽기에 더러운) 해킹을 원했지만, 실제로는 더 나은 드라이버를 제공하기 위해 API/커널 드라이버 공급 업체에 이르기까지되었습니다. 귀하의 회신에 감사드립니다! –

+0

@ 에릭이 단어들을 답으로 쓰고 싶다면 받아 들일 것입니다. 지금은 DMA를 사용하고 있지는 않지만 우리 자신의 장치 드라이버 (http://stackoverflow.com/q/5185397/119790) –

답변

0

, 당신은 가난하게 행동하는 것 장치 드라이버를 가지고, 당신은 수동으로 사용자 공간에서 물리적 RAM을 할당하여 그 해결하려는? 대신에 드라이버를 고치는 데 관심이없는 이유가 있습니까?

이것은 매우 이상한 요청처럼 들리지만, 대부분의 사람들이 올바른 수정으로 생각하는 것이 아닙니다. 기본 드라이버 문제를 해결하고 있다면 더 많은 도움을받을 것으로 생각됩니다.

(위의 코멘트에서 복사.) 내가 제대로 이해 해요 경우

+1

을 구현하고 있습니다. 내가 이전에 만든 코멘트를 받아 들일 것이라고 언급 했으므로 (위 참조) 이제 내가했던 것처럼! 그러나 나는 정확한 관점에도 불구하고 표현 된 관점에 대해 약간의 신음 소리를 내야 만한다. 실제로는 도움이되지 않는 답을 찾지 못한다. 항상 모든/anyones 입력에 많은 감사하지만 ... –

+0

공정한 비판; 어쩌면 내가 대답 대신에 주석을 작성 했어야했다. :) –