DMA 관련 작업은 "리눅스 커널 심층 이해" 545페이지에 소개되어 있습니다. DMA에 관해 이야기할 때 캐시 문제를 언급해야 합니다. 이 책에서는 캐시 일관성 문제를 설명하기 위해 다음 예를 인용합니다.
장치 드라이버가 일부 데이터를 메모리 버퍼에 채운 다음 즉시 하드웨어 장치에 DMA 전송을 사용하여 데이터를 읽도록 명령한다고 가정합니다. DMA가 이러한 물리적 RAM 메모리 셀에 액세스하고 해당 하드웨어 캐시 라인의 내용이 아직 RAM에 기록되지 않은 경우 하드웨어 장치는 메모리 버퍼에서 이전 값만 읽습니다.
이제 DMA 버퍼를 처리하는 두 가지 방법이 있습니다.
일관적인 DMA 매핑:
이 책은 더 추상적입니다. 일반인의 용어로 말하면 DMA 버퍼를 다시 작성하면 메모리에 직접 업데이트됩니다. 동기화된 토지 또는 일관성이 있는 토지.
스트리밍 DMA 매핑:
개인적인 이해에 따르면 여기의 스트림은 입력 및 출력 스트림입니다. 버퍼를 읽을지, 쓸지 등 DMA 버퍼의 방향을 미리 지정해야 합니다. 비동기식 또는 비일관성이라고도 합니다. 자세한 내용은 아래를 참조하세요.
x86 아키텍처에서는 하드웨어 장치 드라이버 자체가 액세스된 하드웨어 캐시를 스누핑하므로 x86 아키텍처에서는 DMA 일관성 문제가 없습니다. MIPS, SPARC 및 POWERPC(ARM 포함)와 같은 다른 아키텍처의 경우 소프트웨어에서 DMA 일관성을 보장해야 합니다.
위 두 가지 중 하나를 선택하는 방법에 대해 책에 적절한 제안이 있습니다. CPU와 DMA 프로세서가 예측할 수 없는 방식으로 버퍼에 액세스하는 경우 일관된 DMA 매핑 방법을 사용해야 합니다(여기서는 제가 이야기하고 있습니다). 버퍼에 액세스하는 시기를 판단하는 것이 불가능하다는 점을 이해하세요.) 어떤 경우에는 스트리밍 DMA 매핑 방법이 더 좋습니다. 일부 아키텍처에서는 일관된 DMA 매핑을 처리하는 것이 번거롭고 시스템 성능이 저하될 수 있기 때문입니다.
스트리밍 DMA에 대한 자세한 소개는 다음과 같습니다.
액세스해야 하는 버퍼는 데이터 전송 전에 매핑되어야 합니다(여기서 매핑은 버퍼가 스트리밍된다는 것을 커널에 알리기 위해 일부 함수를 호출해야 함을 의미합니다). 전송 후 취소됩니다.
스트리밍 DMA 데이터 전송 시작은 다음 단계로 구분됩니다.
1. DMA 버퍼를 할당합니다.
DMA 장치가 S/G(분산/수집) 모드를 사용하지 않는 경우 버퍼가 물리적으로 연속적인지 확인해야 합니다. Linux 커널에는 연속 메모리를 할당하는 두 가지 기능인 kmalloc() 및 __get_free_pages( )가 있습니다. 두 함수 모두 연속 메모리 할당에 대한 최대값을 가지고 있습니다. kmalloc은 바이트를 단위로 할당하며, 최대값은 약 64KB이며, __get_free_pages()는 페이지를 단위로 할당하며 최대 2^order 수의 페이지를 할당할 수 있습니다. include/linux/Mmzone.h 파일의 MAX_ORDER 매크로에 의해 결정되는 순서 매개변수(기본 2.6.18 커널 버전에서 이 매크로는 10으로 정의됩니다. 즉, 이론적으로 __get_free_pages 함수는 최대
DMA 버퍼에 대한 액세스를 읽고 쓴 후 DMA 장치 전송을 시작하기 전에 dma_map_single() 함수를 활성화하여 스트리밍 DMA 매핑을 설정합니다.
3. 스트리밍 매핑을 해제합니다.
DMA 전송이 완료되면 dma_unmap_single() 함수를 해제해야 합니다.
(1) 일관성 문제를 피하기 위해 드라이버는 필요한 경우 DMA 버퍼에 해당하는 캐시 라인을 새로 고치기 위해 dma_sync_single_for_device()를 호출해야 합니다. 장치 드라이버는 이를 수행할 수 없습니다. DMA 데이터 전송이 완료되기 전에 메모리 버퍼에 액세스하지만 필요한 경우 드라이버는 버퍼를 읽기 전에 dma_sync_single_for_cpu() 함수를 호출하여 해당 하드웨어 캐시 라인을 무효화해야 합니다.
(3). 또한 __get_free_pages를 사용하여 구현되며 kmalloc에 해당하는 릴리스 버퍼 함수는 kfree이고 __get_free_pages에 해당하는 릴리스 버퍼 함수는 free_pages입니다. __get_free_pages와 관련된 구체적인 응용 프로그램 및 릴리스 함수는 다음과 같습니다.
응용 기능:
alloc_pages(gfp_mask) ,order)는 할당된 첫 번째 페이지 프레임 설명자의 주소를 반환하고, 할당이 실패하면 NULL을 반환합니다. __get_free_pages(gfp_mask,order)는 alloc_pages()와 유사하지만 할당된 페이지의 선형 주소를 반환합니다. 선형 주소에 해당하는 페이지 프레임 번호를 얻으려면 virt_to_page(addr) 매크로를 호출하여 선형 주소를 생성해야 합니다. 여기서 해제 함수: __free_pages(page, order)는 주로 페이지가 다음을 수행해야 한다는 점을 강조합니다. 버퍼를 해제합니다. 선형 첫 번째 주소가 있는 페이지 프레임 번호 free_pages(page, order) 이 함수는 __free_pages(page, order)와 유사하지만 받는 매개변수는 첫 번째 페이지 프레임의 선형 주소 addr입니다. 출시
위 내용은 DMA Windows 드라이버용 소스 코드가 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

시작 중에 "BIOS 백업 처리 중에 기다려주세요"메시지가 발생 하시겠습니까? 이 안내서는이 성가신 Lenovo 문제를 해결하기위한 솔루션을 제공하며, 종종 Windows 설치 또는 업데이트 후에 나타납니다. 진행하기 전에, 그것은 '

당신은 가능한 한 노트북이나 데스크탑 컴퓨터에서 많은 삶을 짜내고 싶습니다. 그렇게하면 시간이 지남에 따라 상당한 돈을 절약 할 수 있으며 전자 폐기물의 산에 기여하는 것을 막을 수 있습니다. 동시에, 오래되고 부진한 것을 다루고 있습니다

OneDrive에서 "이미 바로 가기를 폴더에 동기화하고"오류가 발생합니까? 이 안내서는이 실망스러운 문제를 해결하기위한 효과적인 솔루션을 제공합니다. 이 일반적인 OneDrive Sync 문제를 해결하는 방법을 살펴 보겠습니다. 문제 :이 erro

Snipping Tool의 Wasapi 독점 모드 오디오 오류는 비디오 녹화를 방지합니다. 이 Minitool 안내서는이 문제를 해결하기위한 솔루션을 제공합니다. 빠른 탐색 : Snipping Tool Wasapi 독점 모드 오디오 오류 - 오디오 녹음 없음 문제 해결 스니핑

향상된 파일 관리를 위해 OneDrive와 Windows 파일 탐색기 통합 클라우드 스토리지에 쉽게 액세스 할 수 있도록 Windows 파일 탐색기에 OneDrive를 추가해야합니까? 이 안내서는 단계별 연습을 제공합니다. 인기있는 클라우드 스토리지 인 OneDrive

PC에서 리마스터링 된 US Part II에서 말더듬 문제 해결 많은 플레이어들이 일반적으로 긍정적 인 리뷰에도 불구하고 PC에 Last of Us Part II와 함께 말더듬 문제를보고했습니다. 이 안내서는 이러한 성능을 수정하는 솔루션을 제공합니다

게임이 충돌과 같은 오류가 발생하면 스플릿 소설 저장 파일 누락과 같이 상황이 악화 될 수 있습니다. Minitool의 포괄적 인 게시물에서 잃어버린 게임 진행을 복구하고 Split Fiction을 수정하는 방법을 배울 수 있습니다.

Windows의 Xbox 앱은 게임 패스 타이틀, 소셜 경험 및 게임 설치를 제어하기위한 허브로 계속 향상됩니다. 그러나 모든 것이 아닙니다


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

Dreamweaver Mac版
시각적 웹 개발 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
