Copyright (C) 커널연구회 (www.kernel.bz)작성자: 정재준(rgbi3307 골뱅이 nate.com)문서위치 메인(출처): https://kernel.bz/blogPost/jh7110-hailo아래 내용은 누구나 사용할 수 있습니다. 저자정보는 지우지 말고 위의 출처를 기입해 주시기 바랍니다.커널 버전 [v6.6) 커널연구회는 최근에 출시된 구글의 NPU 모듈인 hailo을 RISC-V(JH7110)에 탑재하여 관련 산업에 종사는 엔지니어들에게 SDK을 제공 합니다. 좀더 효율적으로 CPU을 설계하여 저전력으로 동작하는 RISC-V (JH7110)에 hailo을 탑재 하려면, 리눅스 커널에서 hailo 디바이스 드라이버 소스를 riscv 명령셋으로 컴파일하여 포팅해야 합니다. 아울러 hailo 모듈을 동작시키기 위한 미들웨어 소프트웨어인 hailort 소스 또한 riscv으로 컴파일하여 설치해야 합니다. 커널연구회는 hailo 드라이버와 hailort가 riscv 아키텍쳐에서 좀더 빠르고 효율적으로 연결되도록 SDK를 제작 했습니다. 현장에서 프로젝트를 진행할때 커널과 디바이스 드라이버, 이와 관련된 SDK를 잘 제공하면 작업 효율과 생산성이 향상 됩니다. 커널연구회는 Hailo 모듈을 RISC-V 보드에 쉽게 연결하는 SDK를 제작하여 v1.0 정도로 최적화 및 안정화 했습니다. 이 블로그를 통하여 관련 기술을 소개하고 SDK를 제공 합니다. SDK는 아래 링크에서 구매 가능 합니다.구매 링크: https://www.kernel.bz/product/npu-sdk 커널연구회 SDK for Hailo 구성도 Hailo 모듈을 RISC-V에 쉽게 탑재RISC-V 64bits Soc(JH7110) 보드의 PCIe 슬롯에 Hailo-8L 모듈을 장착하여, 리눅스 커널 v6.6.x 버전에 Hailo PCIe 드라이버 소스를 riscv 명령셋으로 컴파일하여 포팅 했습니다. JH7110 보드에 대해서는 아래의 기술 문서를 통하여 자세히 확인할 수 있습니다.JH7110 기술문서 참조: https://doc-en.rvspace.org/Doc_Center/visionfive_2.html ELP 카메라를 RISC-V JH7110 보도의 USB 인터페이스에 연결하고 V4L에서 카메라 영상을 수집하여 Hailo PCIe 드라이버를 통하여 Hailo 모듈에 입력후, Hailo에서 처리한 결과를 인코딩하여 FrameBuffer 메모리에 직접 출력하여 HDMI 화면에 표시합니다. Python 이나 TAPPAS 와 같은 응용 프로그램을 사용하지 않고, 리눅스 커널의 PCIe 드라이버, V4L, HailoRT 모듈을 C언어로 직접 제어하여 속도를 향상 시켰습니다. 아울러 HDMI 영상 출력은 C언어로 FrameBuffer 메모리에 직접 접근하여 비디오 출력 속도를 개선 했습니다. 전체 시스템 구성 Hailo 연결 소스(SDK) 제작커널연구회에서 아래와 같이 SDK 소스(v4l.c, fbd.c, hailo.cpp)를 제작하여 HailoRT와 효율적으로 연결되도록 구현했습니다.실행 흐름 블럭도 1번: ( v4l.c) V4L에서 Video4Linux C언어 표준 함수를 사용하여 카메라 영상을 수집.2번: ( v4l.c) 수집한 카메라 영상을 비디오 메모리(Frame Buffer)에 저장.3번: ( fbd.c) 비디오 메모리(Frame Buffer) 버퍼를 HailoRT 입력 스트림에 전달.4번:HailoRT 에서 PCIe 드라이버를 통하여 Hailo 모듈에 전달하여 실행 결과를 출력 스트림으로 받음.5번: ( hailo.cpp) Hailo 실행 결과를 디코딩하여 HDMI 화면에 출력. Hailo Runtim 환경에서 Python 이나 TAPPAS 와 같은 응용 프로그램을 사용하지 않고, V4L에서 제공하는 C언어 표준 함수를 사용하여 비디오 메모리(Frame Buffer)에 직접 접근하여 속도를 개선 했습니다. 1번, 2번: (v4l.c, fbd.c) Video4Linux C언어 표준 함수를 사용하여 카메라 영상을 수집하여 Frame Buffer에 저장.3번: (hailo.cpp) 비디오 메모리(Frame Buffer) 버퍼를 HailoRT 입력 스트림에 전달.HailoRT 에서 PCIe 드라이버를 통하여 Hailo 모듈에 전달하여 처리한 결과를 출력 스트림으로 받음.4번: (fbd.c) Hailo 실행 결과를 디코딩하여 HDMI 화면에 출력. 커널연구회 SDK for Hailo 구성품SDK는 대부분 C언어로 코딩되어 Makefile에 의해서 소스가 빌드 됩니다. SDK는 아래 링크에서 구매 가능 합니다.구매 링크: https://www.kernel.bz/product/npu-sdk 기타 SDK 지원 요청은 아래 이메일 주소로 메일 보내 주시기 바랍니다.커널연구회 정재준: rgbi3307@nate.com 시연 동영상 (SDK for Hailo NPU AI on RISC-V) 참고: HailoRT 기술 문서참조문서: https://hailo.ai/developer-zone/documentation/ Hailo PCIe Driver 소스 다운로드 $ git clone https://github.com/hailo-ai/hailort-drivers.git 소스빌드 문서 참조: https://github.com/hailo-ai/hailort-drivers HailoRT 소스 다운로드 $ git clone https://github.com/hailo-ai/hailort.git 소스빌드 문서 참조: https://github.com/hailo-ai/hailort 감사합니다.