2012-02-27 2 views
4

"나는 Fedora 14와 저는 PCI 스위치 용 드라이버를 만들고 있습니다. 해당 스위치에 대해 8MB의 DMA 메모리 (2 * 4MB를 처리 할 수 ​​있음)를 할당해야하지만 기본 주소의 처음 23 비트가 0이어야 8MB가되는 경우 예를 들어 메모리 크기에 맞춰야합니다.할당 방법 4-8 MB 정렬 DMA 리눅스

어떻게해야합니까?

+0

2mb 정렬 DMA를 할당하는 방법을 찾았습니다. 이렇게하려면 4MB를 할당하고 2MB 크기로 정렬해야합니다. 8mb에 할당 할 최대 dma를 늘릴 수있는 방법이 있다면 내 문제가 해결됩니다. –

답변

2

__get_free_pages은 할당 크기에 할당 된 최대 4MB를 할당 할 수 있습니다.
두 개의 4MB 블록을 할당 할 수 있습니다. 각 블록은 4MB에 정렬됩니다.

이렇게 정렬하면 8MB를 얻을 수 없습니다.
부팅하는 동안 3 * 4MB를 할당하면 블록이 연속적이어서 첫 번째와 두 번째 또는 두 번째와 세 번째 중 하나가 8MB로 정렬됩니다. 그러나 나는 그것에 의지하지 않을 것이다.

어떤 경우에도 부팅하는 동안이 작업을 조기에 수행해야합니다. 그렇지 않으면 메모리가 조각 나고 메모리를 확보하지 못할 가능성이 큽니다.

0

__get_free_pages은 최대 4MB를 제공했지만 페이지 크기 (4k)로 정렬되었습니다.

pci_alloc_consistent을 사용하여 16MB의 DMA를 할당했으며 최소 8MB가 8MB로 정렬되었습니다. 그게 내 문제를 해결해 줬어.