
FPGA 보드 위에 리눅스를 설치하고, 실제 웹캠을 구동하며 영상을 처리하는 시스템을 직접 구현할 수 있을까?
이번 프로젝트는 단순한 하드웨어 제어나 코드 실습이 아니라, FPGA와 임베디드 리눅스를 결합해 하나의 완성형 시스템을 구축하는 과정이다. 설계독학팀이 준비한 이 실습을 통해, 여러분은 ‘작동하는 시스템 설계’의 본질을 경험하게 된다.
※ 본 글은 해당 글을 기반으로 번역 및 재구성하여 작성되었습니다. (출처: hackster.io)
1. FPGA 보드, 왜 리눅스를 깔아야 할까?
■ Zynq 기반 SoC의 구조 이해
ZYBO Z7-20은 ARM Cortex-A9 프로세서와 Xilinx FPGA가 통합된 Zynq-7000 계열 SoC로 구성되어 있다. 이 보드는 하드웨어와 소프트웨어를 동시에 제어할 수 있는 강력한 플랫폼이다. 여기에 Petalinux를 설치하면, 단순한 펌웨어가 아닌 운영체제 레벨의 제어 환경을 구성할 수 있다.
■ 임베디드 비전 시스템의 시작
이 프로젝트의 핵심은 FPGA의 병렬 처리 능력과 리눅스의 유연성을 결합하여 실시간 영상 처리(Embedded Vision) 시스템을 구축하는 것이다. Petalinux는 AMD(구 Xilinx)에서 제공하는 임베디드 리눅스 툴로, 복잡한 환경 설정 없이도 Zynq 보드에 최적화된 리눅스 이미지를 만들 수 있다. 이 과정을 통해 하드웨어 제어의 원리와 리눅스 커널 구조를 동시에 이해하게 된다.
2. Petalinux 설치와 환경 설정
■ 설치 버전 및 준비 과정
프로젝트에서 사용하는 버전은 Petalinux v2022.1이다. ZYBO Z7-20의 ARMv7 기반 듀얼코어 프로세서에 맞게 아래 명령어로 설치한다.
$ petalinux-v2022.1-04191534-installer.run --platform "arm"
설치 중 라이선스 동의를 진행한 후, SDK가 지정한 디렉토리에 설치된다.
■ 환경 변수 설정
설치 후에는 환경 변수 설정이 필요하다.
$ source settings.sh
이 과정을 마치면 BSP 기반의 프로젝트 생성과 부팅 이미지 빌드가 가능해진다.

3. BSP 파일로 부팅 이미지 만들기
■ BSP의 역할
BSP(Board Support Package)는 특정 보드에서 리눅스를 구동하기 위한 드라이버, 하드웨어 정의, 부트 설정을 포함한다. 쉽게 말해, 보드별 맞춤 리눅스 템플릿이다.
■ 프로젝트 생성 및 빌드
$ petalinux-create -t project -s zybo_z7_20.bsp
이 명령어를 실행하면 BOOT.BIN, image.ub, system.dtb, uImage 등의 핵심 부팅 파일이 자동으로 생성된다. 이 파일들이 Zynq 보드의 부팅을 담당한다.
4. SD 카드에 리눅스 심기
■ 파티션 구성
리눅스 부팅용 SD 카드는 두 개의 파티션으로 구성한다.
| 파티션 | 역할 | 파일 시스템 | 크기 |
|---|---|---|---|
| p1 | 부트 파티션 | FAT32 (LBA) | 512 MiB |
| p2 | 루트 파티션 | Linux ext4 | 나머지 공간 |
포맷 명령어:
$ fdisk /dev/sdX
$ mkfs.vfat /dev/sdX1
$ mkfs.ext4 /dev/sdX2
■ 파일 복사 및 환경 설정
- FAT32 파티션에
BOOT.BIN,image.ub,system.dtb,uImage복사 - EXT4 파티션에
rootfs.tar.gz압축 해제 uEnv.txt파일에 커널 로드 주소 및 bootargs 설정
이렇게 하면 SD 카드 부팅 준비가 완료된다.
5. 보드 점퍼 설정과 부팅 확인
■ 점퍼 설정 방법
- JP6 (전원): 미니 USB 전원 공급으로 설정
- JP5 (부팅 모드): MicroSD 부팅 모드로 설정
이후 시리얼 콘솔(baud rate 115200)을 통해 부팅 로그를 확인한다. u-boot 실행 후 리눅스 커널이 로드되고, root 로그인 프롬프트(root/root)가 출력되면 성공이다.

6. 웹캠 이미지 캡처 구현
■ yavta + ffmpeg로 이미지 변환
리눅스 부팅 후, /dev/video0 장치로 인식된 Pcam 5C 웹캠을 통해 실시간 이미지를 캡처할 수 있다.
yavta /dev/video0 --capture=1 --size=1920x1080 --file=frame.yuv
ffmpeg -f rawvideo -pix_fmt yuyv422 -s 1920x1080 -i frame.yuv frame.png
이 과정에서 캡처된 이미지가 PNG로 변환되어, FPGA 위에서 영상이 처리되는 전 과정을 확인할 수 있다.

7. 웹 제어 기능 구현
■ Mongoose 기반 REST API
Mongoose 서버를 사용하여 /api/png 요청을 처리한다. 사용자가 웹페이지의 셔터 버튼을 누르면 서버가 png.sh 스크립트를 실행해 새로운 이미지를 생성하고, 이를 클라이언트로 반환한다.
■ 클라이언트 렌더링
webcam.js 스크립트가 이미지를 Blob으로 변환하고, 웹 페이지의 컨테이너에 표시한다. 사용자는 브라우저에서 FPGA 보드의 카메라를 직접 제어할 수 있다.
설계독학팀이 만드는 진짜 임베디드 실무의 세계
설계독학팀은 7,000명 이상의 유튜브 구독자와 4,000명 이상의 수강생을 보유한 반도체 교육 전문 그룹이다.
글로벌 Top5 팹리스 엔지니어 맛비와 에릭슨 임베디드 리눅스 엔지니어 이파란이 직접 커리큘럼을 설계했다.
이는 단순한 보드 실습이 아니라, 실제 산업 현장에서 요구되는 FPGA–Linux 통합 개발 역량을 쌓는 과정이다.
- 산업형 커리큘럼
Vivado–Petalinux–Driver–Network를 하나의 흐름으로 통합하며, 실무에 바로 적용되는 구조를 배운다. - 3단계 실습 프로젝트
LED 제어 → 카메라 제어 → 웹 원격 제어까지 직접 구현하며, 시스템이 동작하는 전 과정을 이해한다. - 하드웨어·소프트웨어 통합 역량
커널, 드라이버, 네트워크가 상호작용하는 구조를 실제 보드 위에서 검증한다. - 취업과 포트폴리오 경쟁력
수강 후 직접 만든 임베디드 리눅스 프로젝트를 포트폴리오로 제시할 수 있다.
대기업 회로설계 직무에서도 활용 가능한 실무 역량을 확보한다.
이 강의는 국내에서 유일하게 FPGA 상에서 Embedded Linux를 직접 구동하고 제어하는 강의이다.
Vivado–Petalinux–Application 흐름을 하나의 실무 프로젝트로 연결하며, 실제 기업의 채용 우대 스택(Verilog, VHDL, FPGA Logic 설계, Linux Driver 제어)을 완벽히 커버한다.
실습을 마친 수강생은 단순히 코드를 돌릴 수 있는 개발자가 아니라, “직접 만든 임베디드 리눅스 프로젝트”를 포트폴리오로 설명할 수 있는 엔지니어로 성장할 수 있을 것이다.
▶ Embedded Linux & FPGA 실전 강의 바로가기

▶ [BEST] 설계독학의 또 다른 강의, Verilog HDL 마스터 클래스 바로가기

