TIP & TECH
라즈베리파이 에 SPI LCD 를 통해 macintosh 에뮬레이터 사용하기 |
onionmixer 2025-04-29 14:32:47 106 |
---|---|
![]() ![]()
* https://spotpear.com/index/product/detail/id/1216.html 사용한 라즈베리파이 기종은 3b 입니다. 적용하는데 단계는 3단계 정도로 생각하면 됩니다. 첫번째로 SPI LCD 를 연결하고 SPI 출력을 통해 LCD 출력 자체를 확인합니다. 두번째로 fbcp (framebuffer copy) 를 이용해서 xorg(x11) 의 HDMI 화면을 SPI LCD 로 출력합니다. 세번째로 해당되는 환경에 적합한 minivmac 에뮬레이터를 세팅하고 부팅하면 바로 보일 수 있도록 처리합니다. 사용하는 라즈베리파이OS 는 구형OS(32bit) 를 사용해야 합니다. 일반적인 SPI LCD 정도로만 사용할거라면 상관없지만 fbcp 를 사용하려면 DispmanX 를 사용할 수 있어야 하는데, 신형OS 에서는 제약이 있습니다. 구형OS 32bit 사용을 권장합니다. (특히 라즈베리5 부터는 DispmanX 를 사용할 수 없으니 fpcb 를 사용하기 위해서는 라즈베리4 기종정도가 한도임을 주의해야 합니다)
위의 링크에 기본적인 사용방법이 나와있습니다만, 긴단하게 순서를 정리해보자면... * "raspi-config" 에서 SPI 를 활성화합니다.
다음의 과정을 통해 설치합니다. wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
WiringPi 는 gpio 라는 프로그램을 제공합니다. 이는 라즈베리파이 에서 gpio pin 을 확인하는 기능을 제공합니다. 설치 방법은 다음과 같습니다. sudo apt install git # build the package # install it
lgpio 는 라즈베리파이에서 gpio 의 데이터제처/처리를 위한 라이브러리 입니다. 다음과 과정을 통해 설치를 진행합니다. #Open the Raspberry Pi terminal and run the following commands:
데모프로그램은 C 버전과 python 버전이 있습니다. 일단 소스코드를 다운로드 받고 압축을 해제합니다. sudo apt-get install unzip -y
cd c 파이선 버전을 실행하기위해 필요한 라이브러리를 설치합니다. 원본문서는 spidev 를 pip 로 설치하지만 apt 로 설치할 수있다는 차이를 기억해주세요. sudo apt-get install python3-pip 위처럼 기본 라이브러리를 설치했으면 python/example 디렉터리로 들어가서 demo 를 실행합니다. demo 는 spi 에 대한 권한문제로 sudo 를 통해 실행할 수 있다는걸 기억해야 합니다. 우리는 1.69 인치 LCD 를 사용하고, linux 는 python3 을 기준으로 사용하기 때문에 아래의 명령어대로 진행하면 됩니다. sudo python3 1inch69_LCD_test.py 파이선 테스트로 출력되는 화면은 C 버전의 테스트와는 출력되는 내용(이미지)에 차이가 있기 때문에 쉽게 두개 버전간에 차이를 알 수 있습니다.
FBCP 는 위에도 적었습니다만.. framebuffer 의 내용을 gpio 를 통해 spi LCD 로 복사해주는 프로그램입니다. daemon 처럼 백그라운드에 떠 있어야 하는 프로그램입니다. 이 문서에서 사용하고 있는 LCD 는 fbcp-ili9341 기반으로 되어있는듯 하며, 최대 60fps 까지 지원됩니다. 일단 전용으로 만들어진 fbcp 를 컴파일 하기 위해 지금은 제공되지 않는 userland 를 받아옵니다. sudo apt-get install cmake -y fbcp 에 필요한 라이브러리들을 설치하고 나면 fbcp 를 다운로드 받아와서 설치합니다. wget https://files.waveshare.com/upload/1/18/Waveshare_fbcp.zip 일단 이 문서의 대상은 1.69인치 LCD 이기 때문에 사용해야할 스크립트는 "shell/waveshare-1inch69" 입니다. 다만! 이 쉘스크립트는 그 자체로 스크립트 안쪽에 절대경로가 잡혀 있습니다. 그래서 Waveshare_fbcp.zip 파일을 다른 경로에 풀었다면, 스크립트 내의 경로를 보다 알맞는 경로로 수정해 줘야 합니다. 스크립트 내의 경로수정이 끝났다면 다음의 명령어를 통해 초기 컴파일을 진행해 줍니다. sudo ./shell/waveshare-1inch69 일단 컴파일이 진행되면 build 디렉터리에 fbcp 바이너리가 생성됩니다. fbcp 는 컴파일 이전의 cmake 시점에서 DMA 의 사용여부를 결정할 수가 있습니다. build 디렉터리에서 안쪽의 파일을 모두 지운다음 다음의 commane line 을 참고해 주세요. ##DMA ##NODMA 첫번째 line 은 DMA 를 사용하는 경우를 의미합니다. DMA 를 사용하지 않는다고 해도 에뮬레이터정도를 돌리는데는 큰 성능차이가 없습니다. 다만 동영상 출력의 경우는 차이가 좀 있으니 향후 활용도를 생각하면 DMA 는 사용하는쪽이 좋습니다. -DSPI_BUS_CLOCK_DIVISOR 값은 느슨하게 가려면 30이상, 좀 타이트하게 가려면 20 정도를 사용하는게 좋다고 합니다... -DSTATISTICS 값은 모니터링 용도로 LCD 에 overlay 에 내용출력되는 여부에 대한 값입니다. 0은 출력안함, 1은 출력함입니다. 일단 이런 기준으로 컴파일을 해두고 fbcp 를 실행하면 hdmi 로 출력되는 화면을 SPI LCD 에서 볼 수 있습니다. SPI LCD 를 사용하기 위해서는 /boot/config.txt 파일에 수정해야 할 부분이 필요합니다. edit::/boot/config.txt 일단 이 정도를 입력하고 재부팅 한 다음에 fbcp 를 사용하면 됩니다. 위의 내용에서 참고할 부분이 읐습니다. * hdmi_force_hotplug=1 : 무조건적으로 HDMI 가 꼽혀있는 것으로 처리합니다.
일반적으로는 picomac 이라는 프로그램의 경우 특정 LCD 에 맞는 SPI 출력을 기본으로 하고 있습니다. 다만 제가 프로그래머가 아닌지라 picomac 의 소스코드를 뜯어 알맞게 처리하기도 힘들뿐더러 fbcp 의 동작은 라즈베리파이의 framebuffer 를 spi 를 통해 고속복사를 하는게 핵심인데.. 그렇게 하려면 차라리 spi 를 제어하는것보다는 차라리 xorg 에서 동작하는 에뮬레이터가 필요했습니다. 차라리 minivmac 을 사용하는게 맞다고 생각합니다. (그리고 이 방식대로라면 macintosh 가 아닌 다른 에뮬레이터도 linux/xorg 에서 동작한다면 충분히 사용가능하다는 점이 장점이죠. 여튼! minivmac 은 gnu make 또는 cmake 등을 사용하지 않습니다. 자체적으로 별도의 독특한 빌드 시스템을 사용합니다.
wget https://www.gryphel.com/d/minivmac/minivmac-36.04/minivmac-36.04.src.tgz 디렉터리 안에서 컴파일을 위한 세팅툴을 컴파일하고. 세팅을 진행합니다. 컴파일 툴의 이름은 "setup_tool" 로 지정합니다. 컴파일툴을 컴파일하고 minivmac 을 컴파일하기 위한 설정값을 준비합니다. gcc setup/tool.c -o setup_tool echo 에서 사용되는 설정값에 대한 자세한 내용은 다음의 URL 에서 확인할 수 있습니다. * https://www.gryphel.com/c/minivmac/options.html 이제 설정값을 적용하고 컴파일을 진행해 보겠습니다. ./setup_tool -t larm > setup.sh 컴파일을 진행하면 결과물로 minivmac 이라는 실행가능한 바이너리가 만들어집니다. 여기서 잠깐의 작업을 해주시는 것이 좋습니다. raspi-config 에서 부팅시에 X 가 아닌 콘솔에 자동로그인이 되도록 설정해줍니다. 이렇게 설정한다음 라즈베리파이의 콘솔에서 다음과 같은 쉘스크립트를 하나 만들어줍니다. edit::osrun.sh 위의 스크립트에 보이는 ROM 파일과 dsk 파일은 인터넷에서 구해주도록 합니다. ROM 파일은 다음의 URL 에서 구하는게 조금 더 편합니다. * https://github.com/nyteshade/mini-vmac-setup/tree/master 일단 다른 x-windows 가 뜨지 않고, minivmac 이 full screen 으로 동작하는걸 확인한 이후.. 저는 이렇게 처리했습니다. exit 0 위에 다음의 위의 script 를 넣어줍니다. ============================= /root/minivmac/osrun.sh 자.. 이제 재부팅해서 바로 minivmac 의 화면으로 진입한다면 성공입니다. 단 fbcp 를 사용하면 한가지 단점이 있습니다. 일정 시간이 지나면 화면에 움직임이 없는데.. 이는 라즈베리파이의 gpu driver 가 hardware cursor 를 지원히지 않기 때문입니다. 이때 키보드등을 이용해서 alt+i(info) 등으로 화면에 일정 크기 이상의 큰 변화가 생기면 이후부터는 다시 마우스 커서를 볼 수 있습니다. ==================================== etc1. fbcp-ili9341 를 컴파일할때 사용할 cmake command line 정보 : https://github.com/juj/fbcp-ili9341/pull/242 cmake -DST7789VW=ON -DUSE_DMA_TRANSFERS=ON -DGPIO_TFT_DATA_CONTROL=25 -DGPIO_TFT_RESET_PIN=27 -DSPI_BUS_CLOCK_DIVISOR=40 -DBACKLIGHT_CONTROL=ON -DDMA_TX_CHANNEL=0 -DDMA_RX_CHANNEL=5 -DSTATISTICS=0 -DDISPLAY_ROTATE_180_DEGREES=ON -DDISPLAY_BREAK_ASPECT_RATIO_WHEN_SCALING=ON .. cmake -DST7789VW=ON -DUSE_DMA_TRANSFERS=OFF -DGPIO_TFT_DATA_CONTROL=25 -DGPIO_TFT_RESET_PIN=27 -DSPI_BUS_CLOCK_DIVISOR=40 -DBACKLIGHT_CONTROL=ON -DSTATISTICS=0 -DDISPLAY_ROTATE_180_DEGREES=ON .. 아래는 1.69인치 LCD 를 gpio 에 꼽은 pin map 을 기반으로 한 fbcp-ili9341 의 cmake 컴파일시 사용할 값입니다. 단 fbcp-ili9341 로 컴파일한 경우 fbcp 의 출력이 LCD vender 에서 제공받은것과는 조금 다르게 동작합니다. * GPIO_TFT_DATA_CONTROL=25
|
Next | cisco cp-7821 전화기의 ssh 사용에 대한 몇가지 참고사항 |
---|
댓글 0개