RetroArch의 경우엔 hot key와의 조합으로 여러가지 특수 기능들을 동작시킵니다.
때문에 hot key의 존재는 필수입니다.
단, 대부분의 게임패드들엔 hot key가 따로 존재하지 않기 때문에, 임의로 한 키를 지정해서 hot key 역할을 겸하게 만듭니다.
주로 select 키를 이 용도로 할당하는데, 이는 게임 중에 select 키를 사용하는 빈도가 떨어지기 때문이지만, 어디까지나 궁여지책일 뿐, hot key 사용시 원치 않는 select 키 입력이 발생한다는 문제가 있습니다.
아케이드 게임의 경우엔 단순히 coin 입력으로만 쓰이기 때문에 원치 않는 크레디트가 입력되는 정도이겠지만, 다른 게임기의 에뮬레이티 시에는 그렇지 않죠.
때문에 어지간하면 별도로 분리 된 hot key가 있는 것이 확실히 좋습니다.

기본적으로 라즈베리파이를 내장하여 바탑을 만들 때 조이스틱 및 버튼 입력을 위해 다음 2가지 방법 중 하나를 많이 씁니다.
2번의 경우엔 별도의 부품도 필요하고 추가로 전원도 약간 소모하며, USB 단자도 하나 점유한다는 단점이 있긴 하지만 별다른 세팅 없이 바로 사용할 수 있고, 배선도 좀 더 단순하게 할 수 있다라는 장점이 있습니다.
반면 1번은 별도의 장치 없이 바로 사용 가능하다라는 장점이 있지만, 배선도 좀 복잡해지고 별도의 세팅도 필요하며, 사용할 수 있는 키도 제한이 있다는 단점이 있습니다.
덤으로... 제작 과정에서 실수하면 GPIO를 날려 먹을 수도 있다라는 주의사항도 있습니다.
두가지의 장단점이 모두 결정적이지 않기에, 사실상 둘 중 어느 것을 선택하는가는 거의 취향에 따라 갈립니다.
제 경우엔 상황에 따라 2가지를 혼용하긴 하지만, 그래도 최소의 부품으로 만드는 것을 선호하기 때문에 1인용 바탑은 GPIO쪽을 주로 사용하는 편입니다. (2인용의 경우엔 GPIO 입력은 사용 가능한 GPIO를 모조리 소진해 버린다는 문제 때문에 아두이노를 쓰거나 74HC165를 이용해 별도 입력 보드를 만들어 쓰는 편입니다.)
GPIO를 사용할 경우, 앞서 상술한 바와 같이 mk_arcade_joystick_rpi 드라이버를 주로 사용하는 편인데... 설치도 쉽고 비교적 안정적으로 동작하긴 하지만 좀 문제가 있습니다.
이런 문제가 있음에도, mk_arcade_joystick_rpi는 오랫동안 업데이트가 안 이루어져서, 아무래도 제작자가 손을놔버린 것이 아닌가 하는 추측을 하게 만듭니다.
다행이 mk_arcade_joystick_rpi는 오픈소스이기 때문에, 소스를 직접 수정하여 원하는 기능을 추가할 수가 있습니다.
mk_arcade_joystick_rpi의 소스는 github에서 얻을 수 있습니다.
이 소스를 받아서 다음의 2가지 처리를 해 줘야 합니다.
실제로 1번은 이미 mk_arcade_joystick_rpi 측에서 사전에 작업을 해 놓았습니다. (hotkeybtn 브랜치)
기본적으로 hot key로 배정 된 핀은 1P의 경우엔 GPIO2, 2P의 경우엔 GPIO3 입니다.

반드시 이에 맞춰 배선을 해야 하는 것은 아니지만, 2P의 경우엔 남는 핀이 저게 전부이기에 선택의 여지가 없습니다. 하지만 1P용으로 한다면 다른 핀을 골라서 Hot Key를 배정하는 것이 좋습니다. 왜냐하면 GPIO 2와 3은 I2C를 위해 배정되어 있으며, 내부 풀업 저항값도 다르며, 혹 safety-shutdown 등의 기능을 추가한다면 해당 핀을 이용하는 것이 유리하기 때문입니다.
일단 배선 작업이 끝났다면, 다음은 드라이버를 설치할 차례입니다.
드라이버는 mk_arcade_joystick_rpi를 수정해서 사용해도 되지만, 그보다는 해당 문제들이 모두 수정 된 다른 입력 드라이버를 쓰는 것이 더 편합니다.
여기서 추천하는 드라이버는 am_joyin 입니다.
http://https://github.com/amos42/am_joyin
드라이버 설치를 위해서는 먼저 사전 작업으로 2가지를 해야 합니다.
레트로파이 설정 메뉴에서 retropie-setup으로 들어가, 드라이버 항목에서 mk_arcade_joystick_rpi 를 제거합니다. (그렇지 않으면 드라이버가 충돌해서 정상적으로 am_joyin이 로드되지 않습니다.)
이제 본격적으로 설치 작업을 진행합니다.
$ wget https://github.com/amos42/am_joyin/releases/download/v0.3.3/am_joyin-0.3.3.deb > sudo dpkg -i am_joyin-0.3.3.deb이렇게 하면 일단 드라이버는 설치 됩니다.
다음으로는 드라이버 설정을 진행해야 합니다.
$ sudo nano /etc/modprobe.d/am_joyin.confoptions am_joyin device1="gpio;;0,default1,13"여기에서 끝 부분의 13이라는 숫자가 입력 핀 13개를 쓰겠다는 것입니다. 별도로 지정하지 않으면 이 13개의 핀은 mk_arcade_joystick_rpi와 동일한 순서의 핀으로 지정됩니다. 만약 Hot Key를 다른 핀으로 지정하고 싶다면 다음과 같이 입력합니다. (Hot Key를 GPIO 11을 사용할 경우)
options am_joyin device1="gpio;;0,default1,12;0,custom,,{11,0x13C,1}"이렇게 지정하면 Hot Key 바로 직전까지인 앞의 12개까지는 기존의 설정을 사용하고, 0x13C (Hot Key의 key code)는 GPIO 11로 지정되게 됩니다.
이제 이 드라이버를 쓸 수 있게 활성화를 합니다.
$ sudo nano /etc/modules-load.d/modules.conf.
.
.
am_joyin이제 리부팅 하면 됩니다.
이후 에뮬레이션 스테이션 등에서 키설정을 할 때 핫키 설정에서 새로 추가 한 핫키를 입력해 주시면 됩니다.
마지막으로... 주의사항입니다.
GPIO 중 일부는 펌 배포본에 따라서는 기본 모드가 OUTPUT으로 되어 있는 경우가 있곤 합니다.
이런 펌 기반에서 작업을 하신다면 완전히 드라이버 세팅이 끝나기 전엔 절대 키를 함부로 막 누르면 안 됩니다.
그렇지 않으면 잘 못 하면 해당 GPIO가 죽을 수도 있습니다.