Table of Contents
Raspberry Pi OS Installation and Optimization
이 문서의 목적은 FluidSynth 연주용으로 라즈베리파이 3B를 꾸미는 방법을 설명하는 것이다. 데스크톱 환경이 없는 32비트 Raspberry Pi OS Lite를 설치할 것을 추천한다. 왜냐하면 Pi 3B는 메모리가 1GB에 지나지 않아서 64비트 버전의 장점을 활용하기 곤란하며 괜히 커널만 무겁게 돌아간다. USB-serial로 연결된 아두이노 우노를 조작반으로 사용할 것이라서 GUI도 필요하지 않다.
https://www.raspberrypi.com/software/operating-systems/
GUI가 자동으로 시작되지 않도록 하고(desktop environment를 설치하였다면) Wi-Fi를 이용한 SSH 접속만 허용한다. USB 오디오 출력장치는 Roland SC-D70 또는 Behringer UCA200을 사용한다. user id는 'pi'로 하였다.
OS 설치 후에는 다음과 같은 패키지를 추가한다.
sudo apt update sudo apt upgrade sudo apt install fluidsynth alsa-utils sudo apt install vim # 나는 nano editor보다 vim이 좋다!
/home/pi/sf2에 적당한 SoundFont 파일을 복사한다. USB 드라이브에 복사해서 옮기는 것이 좋으나, 라즈베리파이 OS 데스크톱이 아니면 자동 마운트가 되지 않는 것 같다.
설치 후 설정 변경
sudo raspi-config
- Systems Option → Boot / Auto Login에서 Console 선택
- Systems Option → Interface Options → SSH Enable ('ssh ID@192.168.1.100')
sudo systemctl disable lightdm # GUI 서비스 끄기(복원 가능) sudo ls -l /etc/systemd/system/default.target sudo systemctl set-default multi-user.target # 부팅 목표를 콘솔로 설정
불필요한 서비스 끄기
sudo systemctl disable bluetooth sudo systemctl disable avahi-daemon sudo systemctl disable triggerhappy # service does not exist sudo systemctl disable hciuart # service does not exist
boot time 확인
systemd-analyze systemd-analyze blame
기타: gpu_mem=16, hmdi_force_hotplut=1
목표는 부팅 후 10초에 연주 가능 상태가 되는 것이다.
개발이 끝나면 네트워크를 완전히 끄는 것도 좋다(dhcocd, wpa_supplicant, networking 전부 disable).
SPI 방식 3.5인치 TFT 터치 LCD(480x320p) 설치
이것은 꼭 필요한 일은 아니지만 갖고 있는 부품을 최대한 활용하기 위한 마음에 욕심을 부리는 중이다.
중국산 SPI(Serial Peripheral Interface) 방식의 TFT LCD는 유난히 사용하기가 어렵다. HDMI와 같은 GPU 디스플레이가 아니라 프레임버퍼 방식이라 CPU가 SPI로 계속 픽셀을 밀어 넣어야 하고, 대역폭도 좁으며, 컨트롤러 칩도 제각각이다. 내가 보유한 것은 ILI9486칩을 쓰는 것으로 확인되었다. 그러나 중국산 디스플레이는 라즈베리파이 OS에서 제공하는 공식 드라이버가 없어서 LCD-Show와 같은 비공식 드라이버를 써야 하며, 게다가 터치 드라이버도 별도로 설치해야 한다. 마지막으로 LCD가 뜬 뒤에도 다음과 같이 디바이스가 생성되므로 cmdline.txt 등을 설정해야 콘솔이 LCD로 나오게 된다.
/dev/fb0 HDMI /dev/fb1 SPI LCD
콘솔의 의미를 되새긴다면, 부팅 메시지가 나온 뒤 맨 끝에 로그인 프롬프트가 나오는 화면을 말한다. 더욱 상황을 어렵게 하는 것은 2023년 이후 커널에서 fbtft 드라이버가 점점 사라지는 것도 문제이다. 즉 시간이 흐를수록 3.5inch RPi Display나 Setting Up a 3.5-inch LCD Touch Display with Raspberry Pi: A Step-by-Step Guide를 따라 하면서 성공할 가능성이 점차 줄어들 것이라는 뜻이다. 현재의 Raspberry Pi OS가 기반을 두고 있는 Bookworm(Debian 12)에서는 디스플레이 구조가 바뀌어 /dev/fdb0 중심에서 DRM/KMS 중심의 /dev/dri로 프레임버퍼가 바뀌었고 fbtft도 점차 퇴장하고 있으며 LCD-show도 안 맞게 되었다는 점도 어려움을 배가시킨다.
Fluid Ardule에서는 RB Pi에 연결한 SPI LCD를 터치 기능까지 살려서 GUI 조작반으로 쓰려는 것이 아니다. 아두이노 우노에 물린 1602 LCD에서 표시하기에 충분하지 않은 상태 메시지를 보이기 위한 보조적인 목적이다.
LCD-show보다 깔끔한 방식이 있다고 한다. Raspberry Pi OS의 dtoverlay + fbtft 드라이버만 사용하고 LCD-show 스크립트를 쓰지 않는 것이다. 다음 섹션에 정리하였다.
Raspberry Pi SPI 3.5″ TFT (ILI9486) 안정 설정 가이드 (LCD-show 없이)
이 문서는 중국산 SPI 3.5″ TFT LCD (ILI9486 계열)를 라즈베리파이에서 LCD-show 없이 안정적으로 사용하는 방법을 설명한다. 목표:
- OS 업데이트에도 깨지지 않음
- 최소 설정
- TFT를 보조 디스플레이로 사용
- 콘솔은 HDMI 유지
전제 조건
- Raspberry Pi 3 Model B
- Raspberry Pi OS (32-bit 권장)
- SPI 3.5″ TFT (ILI9486)
절차
# 1. OS 업데이트 sudo apt update && sudo apt full-upgrade -y # 2. SPI 활성화 sudo raspi-config → Interface Options → SPI → Enable # 3. config.txt 수정 sudo nano /boot/firmware/config.txt # ⚠️ 기존 piscreen 대신 아래 사용 (Bookworm 안정형) dtparam=spi=on # DRM/KMS 유지 (중요); 원래는 kms였음 dtoverlay=vc4-fkms-v3d max_framebuffers=2 # ILI9486 직접 지정 (핵심), 그러나 dtoverlay=ili9486이 실패하여 piscreen으로 바꾸었다. dtoverlay=piscreen,spi0-0,rotate=90,speed=32000000,fps=30 # (문제 시 대안 rotate 값: 0 / 180 / 270) # 4. 재부팅 sudo reboot # 5. SPI 확인 (중요) ls /dev/spidev* # → /dev/spidev0.0 있어야 정상 # 6. framebuffer 확인 ls /dev/fb* # 정상 예: # /dev/fb0 (HDMI) # /dev/fb1 (TFT) # 7. 실패 시 로그 확인 (Bookworm 필수 단계) dmesg | grep -Ei 'ili|spi|fb' # 8. LCD 테스트 sudo apt install fbi sudo fbi -T 1 -d /dev/fb1 --noverbose -a /usr/share/rpd-wallpaper/temple.jpg # q나 Esc로 종료 # --noverbose 상태줄 보이지 않기, -a 이미지 크기 자동 조정 # 화면 지우기(자동으로 지워지지 않는다) sudo dd if=/dev/zero of=/dev/fb1 # 9. 구조 (권장) HDMI → 콘솔 TFT → 보조 화면 (상태 표시용) # 10. 절대 금지 # - LCD-show 사용 ❌ # - cmdline.txt 수정 ❌ # - fbcon=map 사용 ❌
hdmi를 아예 무시하려면 /boot/firmware/config.txt에서 다음과 같이 설정한다.
hdmi_ignore_hotplug=1 disable_splash=1 boot_delay=0
금지 사항
LCD-show 사용 금지, cmdline.txt 수정 금지. 만약 어려움이 있으면 다음 두 파일을 ChatGPT에 밀어넣고 문제점을 찾아보라고 하면 된다.
cat /boot/firmware/config.txt cat /boot/firmware/cmdline.txt
성공 판단 기순
/dev/spidev0.0 ✔ /dev/fb1 ✔ dmesg에 ili9486 ✔
결론
dtoverlay 방식이 가장 안정적이며 유지보수가 쉽다.
고급 기능
TFT Boot Splash and Status Display Guide - 부팅 시 스플래시 이미지를 TFT LCD에 띄운 뒤 부팅이 완룐되면 상태를 화면에 표시하는 방법
사운드 테스트
예전에 작성한 문서인 Music on Linux가 추억처럼 떠오른다!
파일의 단순 재생
SoundFont 패키지를 풀면 데모용으로 ogg 파일이 포함된 경우가 있다. 이를 재생하려면 ogg123과 같은 플레이어가 편리하다.
sudo apt install vorbis-tools
USB 오디오 기기를 연결한 뒤 aplay -l을 실행하여 '카드 번호'를 확인한다. 0번은 내장 헤드폰이다.
aplay -l **** List of PLAYBACK Hardware Devices **** card 0: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones] Subdevices: 7/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 Subdevice #7: subdevice #7 card 1: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0] Subdevices: 1/1 Subdevice #0: subdevice #0 card 2: CODEC [USB Audio CODEC], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
USB 오디오 기기는 card 2번이다. 이를 통해서 ogg 파일을 재생해 보자.
ogg123 -d alsa -o dev:plughw:2,0 test.ogg
보다 간단하게는 다음과 같이 입력한다. 좌우 채널로 번갈아 핑크 노이즈가 재생될 것이다.
speaker-test -D plughw:2,0 -c2
MIDI test
먼저 .MID 파일을 재생해 보자.
fluidsynth -a alsa -o audio.alsa.device=plughw:2,0 ~/sf2/GeneralUser-GS.sf2 Dance.mid FluidSynth runtime version 2.4.4 Copyright (C) 2000-2025 Peter Hanappe and others. Distributed under the LGPL license. SoundFont(R) is a registered trademark of Creative Technology Ltd. Type 'help' for help topics. > fluidsynth: warning: Failed to set thread to high priority
경고문은 권한 부족과 관련한 것이라서 테스트 단계에서는 별로 중요하지 않다. 경고 때문에 FluidSynth interactive shell('>')에 들어간 것이다. 레이턴시를 감안하여 몇 가지 파라미터를 조정하고 interactive shell을 비활성화('-i')하는 조건으로 실행해 보자.
fluidsynth \ -i \ -g 0.7 \ # gain [0 < gain < 10, default = 0.2] -a alsa \ -o audio.alsa.device=plughw:2,0 \ -o audio.period-size=128 \ -o audio.periods=3 \ ~/sf2/GeneralUser-GS.sf2 Dance.mid
1. 건반 입력을 FluidSynth로 보내기
장치 연결 확인하기
aseqdump -l # or 'aconnect -i Port Client name Port name 0:0 System Timer 0:1 System Announce 14:0 Midi Through Midi Through Port-0 28:0 MPK Mini Mk II MPK Mini Mk II MIDI 1
건반 입력 신호 확인하기
aseqdump -p 28:0 # 건반을 눌러서 화면에 표시되는 MIDI 메시지 확인
FluidSynth를 백그라운드로 실행. '-s -i' 옵션을 꼭 넣어야 한다.
fluidsynth -a alsa -g 0.7 -i -s -m alsa_seq \ -o audio.alsa.device=plughw:2,0 \ -o synth.reverb.active=1 \ -o synth.reverb.room-size=0.48 \ -o synth.reverb.damp=0.22 \ -o synth.reverb.width=0.75 \ -o synth.reverb.level=0.30 \ SalC5Light2.sf2 &
MIDI 입력와 출력 연결
aconnect 28:0 128:0
2. 건반 입력을 USB MIDI interface에 연결된 외부 모듈로 보내기
(작성 예정)

