기본 콘텐츠로 건너뛰기

[zynq-wiki] Zynq Linux pl330 DMA

---------------------------------------------------------------------------------

징크 리눅스 pl330 DMA

---------------------------------------------------------------------------------

징크-7000 제품군 프로세서 블럭은 커스텀 하드웨어 주변 장치 및 외부 메모리 사이의 처리랼을 향상하는데 사용할 수 있는 PL330 DMA 컨트롤러 8개 채널을 포함한다. 자일링스는 자체적으로 PL330 DMA 컨트롤러를 사용하기 위해 리눅스 드라이버를 제공하지만 당신의 응용프로그램을 사용하기 위해서는 당신이 만드는 응용프로그램을 구성하기 위한 커스텀 소프트웨어 드라이버를 만들어야 한다. 이 페이지는 리눅스 사용자 영역과 자일링스 AXI Streaming FIFO와 비슷한 FIFO 기반의 AXI 인터페이스간의 DMA기반의 전송을 설명하는 드라이버 예제를 제공한다. 


PL330 DMA Driver의 사용

리눅스 PL330 DMA API는 ISA DMA API를 참조했으며, 디바이스와 메모리 간의 DMA 전송을 수행한다.  이때 메모리 영역은 고정된 주소를 갖는다. 소스와 destination bust size, bust length, 보호 제어등 과 같은 DMA transaction의 다양한 파라미터를 구성하는 것은 드라이버에 의해 제공되는 외부 기능을 통해 전달된다. 
드라이버는 PL330 DMA 프로그램을 구성하고, 프로그램을 실행하기 위한 PL330자체로 제어를 전달한다. 

당신은 target 디바이스와 DMA 전송의 목표 영역을 위해 AXI 버스 transaction 구성을 세울 필요가 있다.  당신은 pl330_client_data 구성과 set_pl330_client_data 함수를 통해 이러한 세팅을 통과한다. 이들은 arch/arm/mach-zynq/include/mach/pl330.h에  정의되어 있다.

드라이버는 DMA 완료 인터럽트와 DMA 오류 인터럽트 등을 위해 인터럽트 서비스 루틴을 갖는다. 당신은 set_pl330_done_callback과 set_pl330_fault_callback 함수를 사용하여 드라이버를 이 인터럽트들을 위해 자체 콜백을 전달한다. 

여기 DMA transaction을 시작하는 방법에 대한 예제가 있다.

PL330 DMA function을 사용하여 커스텀 드라이버 생성하기

물론, 위 함수 호출은 할당된 DMA buffer를 이용하여 커널 문맥으로 만들어져야 한다. 당신이 하드웨어를 위해 커스텀 드라이버를 만들 필요가 있는 경우에. 아래 예제는 우리가 일반적인 FIFO 기반의 시스템을 위한 드라이버를 사용한다. 이것은 매우 단순한 예제이다. AXI MM2S FIFO core ( 혹은 다른 일반 FIFO와 비슷한 ) 를 기반으로 하는 FIFO 인터페이스에 블럭킹을 써서 형성하는 예제임. 

빌드 환경을 셋업하기

이 과정은 당신의 host system에 인스톨된 자일링스 SDK의 일부분인 ARM GNU 유틸리티를 필요로 한다. CROSS_COMPILE 환경 변수를 설정하고 PATH에 cross compiler를 추가해서 ARM cross-compiler를 작성할 수 있다.

Makefile 생성하기

리눅스 드라이버는 커널의 빌드 시점에 커널내에 컴파일되거나 커널 모듈들로서 분리되어 컴파일 할 수 있다. 드바이스 드라이버를 개발할 때, 빌드 프로세스를 단축시기 위해 분리해서 컨파일하고 모듈을 유동적으로 로딩과 언로딩을 허용한다. 

당신이 리눅스 소스 트리의 외부에 커널 모듈을 빌드하고 싶다면, 커널 빌드 메커니즘에 링크된 makefile을 생성해야 할 것이다.





DTS file 업데이트하기
리눅스 커널 모듈을 빌드한 후에, 커널은 시스템에 있는 특별한 하드웨어 디바이스를 결합할 방법을 가져야만 한다. 만일 당신이 특별한 하드웨어 플랫폼 타겟을 위해 개발 중이라면, 디바이스와 같은 하드코딩은 드라이버 자체에 ,
그러나, 이것은 일반적으로 나쁜 실행을 고려하고 디바이스 드라이버 플랫폼으로서 당신의 모듈을 등록하는 것이 더 좋을 수도 있ㄷ다. 자일링스 디바이스를 위한 리눅스에서 디바이스 트리 파일 ( DTS)을 사용하여 Open Firmware를 통해 성취된다. 

이 파일에서 정보를 읽기 위한 당신의 드라이버를 위해 유사한 측정 함수를 가지고 디바이스 플렛폼으로서 드라이버를 등록해야 하고 당신의 DTS file에 하드웨어 인스턴스를 추가해야 한다. 



드라이버 빌드하기


드라이버 소승 파일을 make file과 같은 디렉토리에 놓아라. 그리고 드라이버를 컴파일하기 위한 make file을 실행해라. 빌드 동안에 에러가 없다면 당신은 로더블 커널 오브젝트인 fifo_dma.ko 파일을 확인할 수 있다.


타겟 플랫폼에 커널 모듈 전송하기

리눅스 커널 모듈 도구  insmod와 rmmod는 소스 모듈이 징크의 ramdisk8M.image.gz root file system에 존재하지 않는 특별한 위치에 배치될 것이다. 시스템이 부팅될 때, 당신의 커널 오브젝트를 유지하기 위해 모듈 디렉토리를 생성해야 한다.


요구하는 디렉토리 구조와 사용하기 수월하게 하는 심볼릭 링크를 생성한 후에, xfifo_dma.ko 커널 모듈을 /lib/modules/3.3 에 업로딩할 것. ( 파일 전송 시 FTP를 사용한다면, 바이너리 모드를 사용할 것. )

커널 모듈 로드

커널 모듈을 보드에 전송한 후에, 이것을 메모리에 로드해야 한다.


디바이스 노드 생성하기


마지막으로, 파일 작업을 사용하기 위해 /dev 폴더에 있는 디바이스 노드를 생성한 후에, 사용자 영역에서 드라이버에 접근할 수 있다.


드라이버는 major 번호 60를 요청하도록 코딩되었다.

드라이버 사용하기 

이제 커널 오브젝트가 로딩되었고,  당신은 파일 조작으로 장치에 접근할 수 있다. DMA transaction이 모두 그러하듯 , 프로세서 기반 전송 데이터의 작은 블럭보다 덜 효율적인 DMA을 설정하는데 필요한 추가 기간이 있다는데에 주목하자. 큰 블럭을 위해 - 메모리 밴드 위쓰 이용성, AXI 밴드 위쓰, 주변 하드웨어 밴드 위쓰와 같은 다른 시스템 고려 사항들은 더 많이 기여할 것이다. 


드라이버 통계

마지막 노트로서 이 드라이버는 /proc/dirver/xfifo_dma 에서 이용할 수 있는 통계를 유지한다.


FIFO DMA Test Driver Source

소스 코드는 생략.








댓글

  1. 이렇게 안해도 mmap 으로 운영 가능함. 대신에 PL에서 구성하여 xml에 정리된 메모리맵을 참조할 수도 있다. (주인장)

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

[QT] 5.15.2 버전 다운로드와 설치하기

1. 버전 5.15.2를 설치하기 위해 QT 다운로드 사이트 에 접속하였으나 실행파일이 존재하지 않는다. 가장 최신의 실행파일은 ver5.14.2 이므로 일단 이것을 다운받아서 설치한다. ( 참고 사이트 - https://sloth-code.tistory.com/6#comment16833678 ) 다운 사이트  - https://bio.nic.funet.fi/pub/mirrors/download.qt-project.org/archive/qt/5.14/5.14.2/  ------------- 버전이 맞지 않으니 재 설치한다. 2.  5.15.2 버전에는 실행파일 exe가 없고 zip과 tar.gz 파일만 존재한다. ( https://bio.nic.funet.fi/pub/mirrors/download.qt-project.org/archive/qt/5.15/5.15.2/ ) OFFLINE_README.txt를 읽어보면 5.15 버전부터는 오픈 소스 오프라인 설치를 이용할 수 없다고 한다. 오프라인 설치를 원할 경우 다음 사이트 참조하라고 한다.  ( 원본:  The Qt Company offering changes, open source offline installers are not available any more since Qt 5.15. Read more about offering changes in the https://www.qt.io/blog/qt-offering-changes-2020 blog. If you need offline installers, please consider our new Qt for Small Business offering: https://www.qt.io/blog/available-now-qt-for-small-businesses ) - https://www.qt.io/blog/available-now-qt-for-small-businesses ...

[ WorkSpace ] 라스트마일 딜리버리

'걸음마 단계' 배달로봇...2030년 50조원 규모로 커진다 기사 요약 ( 2021.6.30 ) 국토교통부는 '제1차 자율주행 교통물류 기본게획(2021 ~ 2025)'을 6월 29일 발표했으며 그 내용은 다음과 같다. 전국 고속도로와 시도별 주요 거점에서 자율주행 사용서비를 시작하기 위해 레벨4 수준의 자율 주행 대중 교통과 공유서비스를 개발, 경로/배차 최적화 등 운영 기술을 고도화할 방침임. 여객, 화물 분야에도 활성화, 화물차 군집주행 차량 및 운영시스템을 고도화 도심에서의 라스트마일 배송을 위한 소형택배차량, 로봇/드론 연계 기술 개발할 방침임. 자율 주행 로봇 개발 현황: 아래와 같은 특성은 있지만 원천 기술 개발 확보 해야 함. 우아한 형제들: 목표는 라스트마일시장 석권, 현대차/기아와 로봇개발 협업, 다양한 구조의 건물에서 층간 이동이 가능, 결제 수단 기능 탑재, 건대 및 광교에서 시범 운행중. 실외용. 배달로봇 딜리드라이브. KT: AI로봇 우편배송 서비스, 건물내에서 엘리베이터 탑승하여 우편물 배송 목적지로 이동. LG유프러스 + 만도: 자율주행 순찰 로봇 골리, LG 유플러스의 5G통신, MEC 인프라, 원격관제 솔루션 시스템 탑재, 실외용으로 순찰을 돌며 주야간 치안 사각지대를 탐지하여 분석하여 시흥시 통합 관제 플랫폼으로 실시간 전송.      ※ 라스트마일 - Last-mile delivery 시장: 물류/유통업계가 주목하는 것은 데이터. - 배송 효율화가 요구된다. 라스트 마일은 상품이 소비자에게 최종 배송되는 마지막 과정을 의미한다.  - 롯데마트는 릴레이 배송 서비스를 잠실점에서 시범 운행중이며, 릴레이 배송은 마지막 현관까지 구간 라스트마일 배송을 하는 플렉서를 별도로 배치했다. 플렉서는 본인 담당 공간에서 기다리다가 트럭이 오면 물건을 꺼내 최종 목적지까지 오토바이, 도보 등으로 배달한다. 배송기사와 플렉서의 역할을 분리하여 배달 건수를 늘릴수 있는 방식이다.  - 대형마트, 편의...

[NEW-JOB] 시작하기

 업종의 변환이란,, 하던 일과 사람과 환경이 달라지는 것, 가장 크게는 소속된 업황이 달라지는 것. 업의 변환이 시작된지 3주가 지났다. ( 게다가 이글을 완성하지 못하고 한달이 지났다. ) 생생한 지금까지의 느낌을 적어보려고 한다. 1. 빌드 환경의 변화 - 운영 OS는 윈도우와 리눅스를 사용하고 각 OS에 따라 빌드 환경은 정해져 있었다. 지금은? 오픈 소스를 이용하게 되는 현업의 빌드 환경은 멀티 플랫폼에서 개발가능하고 멀티 플랫폼에서 사용가능한 구조로 만들어져 있다. 오픈 소스를 사용하는 이상 이러한 환경은 그대로 유지해야 한다. 멀티 플랫폼이 가능한 소스 구성은 현재 소프트웨어 산업계의 흐름이기도 하다. 결국 언젠가는 가야 하는 것이다.  2. 업무 환경의 변화 - 5년 신건물에서 10년 구건물로 이전하였으니 화장실은 대만 화장실 냄새가 난다. 습한 기운이 엄습해있다. 사무실은 한달후 청소하여 자리를 잡았으나 여기 또한 습하고 공기 순환되지 않아 9월 28일 현재 선풍기를 돌리는 중이다. - 랩실은 없고, 컴퓨터만 있고. - 오픈 소스분석으로 인해 나의 영역 밖에 있던 기술들을 하나씩 학습하고 있으며 기회와 지루함이 공존한다.  3. 소속된 조직의 변화 - 10여명의 단촐한 인력을 탈피하고 타 회사 직원들과 3주째 같이 일하고 있는 더 단촐하게 일하고 있다. 협업하는 인력은 20킬로 이상의 다른 동네에 있고, 라인이 포함된 신규 건물에 한달내에 이사하게 된다. ( 타 회사 직원들은 이사를 갔고, 내 조직의 인원들로 대체되었다. )  - 회사를 운영하는데에 있어 필요한 인력이 있는데 그들은 지금 흩어져 있거나 모집중이다. 또한 여러 조직에 몸담고 있는 사람들도 있다.  4. 내가 속한 산업의 변화 - 반도체와 디바이스에서 자동차 센서와 자율 주행으로 업종이 변화되었다. 센서와 인지, 모터 제어 등은 전전 산업에서도 종종 사용하던 분야였지만 그때와는 많은 것이 변화되었고 전 산업의 기술과 접목되었다고 볼 수 있...