iPad + Raspberry Pi 기반 개발환경 구축 #5. USB-C로 라즈베리파이 다이렉트 접속하기
iPad에서 USB-C를 이용하여 라즈베리파이의 전원과 이더넷 네트워크 데이터 전송을 한번에 처리하는 내용을 소개한다.

iPad와Raspberry Pi 개발환경 구축 시리즈 글을 연재한 최종 목적은 iPad와 라즈베리파이 기기 2개만 간단히 휴대하면서 언제 어디서나 개발환경을 가질수 있는 것이다. 휴대성을 높이기 위해서 라즈베리파이를 위해 따로 전원 어댑터를 가지지 않게 했고, 접근성은 높이기 위해서 Wi-Fi 없이도 Ethernet을 사용하여 다이렉트로 연결할 수 있는 환경을 구축했었다.
iPad에서 이더넷을 이용해서 라즈베리파이로 다이렉트로 연결할 때 USB-C to Ethernet Adapter가 필요하고 두 기기가 서로 네트워크를 위해서 이더넷선이 필요하다. 라즈베리파이의 전원 어댑터 휴대 문제는 USB-C to Ethernet + Charge Adapter로 해결할 수 있지만, 휴대성 목적에 Ethernet 어댑터와 랜선을 모두 들고 다닌다는 것은 꽤 번거러운 일이다.
이번 포스팅에서는 iPad에서 Raspberry Pi 로 USB-C 케이블 하나만 가지고 전원도 공급하면서 동시에 Ethernet 네트워크 연결까지 한번에 해결할 수 있는 방법을 소개한다.
Rasberry Pi의 USB-C Gadget설정
USB-C 타입은 구조자체가에 전원과 데이터를 전송할 수 있는 회로가 설계되어 있다. 라즈베리파이는 기본적으로 USB-C를 전원포트로 사용하게 되어 있는데 USB-C를 데이터통신도 같이 할 수 있게 커널을 변경하는 작업을 해서 전원과 데이터를 동시에 처리할 수 있게 하는 것이 핵심이다.
우선 Raspberry Pi로 접속한다. 이더넷선을 이용해서 접속해도 되고, 모니터를 연결해서 작업해도 된다. 나는 이더넷으로 연결해서 작업을 진행한다.
ssh pi@raspberrypi
Raspberry Pi 부트 cmdline.txt 파일 수정
가정 먼저 라즈베리파이의 부트 파일 중 cmdline.txt 파일을 수정한다.
sudo vi /boot/firmeare/cmdline.txt
파일을 열면 다음 내용이 있다.
console=serial0,115200 console=tty1 root=PARTUUID=39fb6a92-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=GB
여기서 rootwait
바로 뒤에 modules-load=dwc2,g_ether
내용을 추가해서 수정한다.
console=serial0,115200 console=tty1 root=PARTUUID=39fb6a92-02 rootfstype=ext4 fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=GB

Raspberry Pi 부트 config.txt 파일 수정
다음은 라즈베리파이 부트 파일 중 config.txt 파일을 수정한다.
sudo vi /boot/firmware/config.txt
파일을 열어서 otg_mode=1
을 찾아서 주석이 되어 있으면 주석을 풀어준다. 그리고 파일 가장 아래에 있는 [all]
섹션 밑에 dtoverlay=dwc2
를 추가한다.

Raspberry Pi 네트워크에 ethernet-usb0 이더넷 추가
라즈베리파이에서 nmcli
명령어를 사용하여 새로운 이더넷 네트워크를 추가한다.
sudo nmcli con add type ethernet con-name ethernet-usb0

위 명령러를 실행하면 라즈베리파이 운영체제의 네트워크 메니저 설정 디렉토리 밑에 새로운 ethernet-usb0.connection
파일이 생성된다. 이 파일을 다음 내용으로 수정한다.
sudo vi /etc/NetworkManager/system-connections/ethernet-usb0.nmconnection
수정할 때 주의 사항은 uuid는 생성되는 시점마다 다르게 발생하기 때문에 자신이 생성한 uuid 그대로 두고 나머지를 수정한다. IP 정보는 192.168.2.3 으로 지정했다. 앞에 글들에서 iPad와 라즈베리파이의 네트워크를 192.168.2.x 로 정의해서 설정했고, Ethernet 포트에 할당되어 있는 192.168.2.2 와 중복되지 않게 설정했다.
[connection]
id=ethernet-usb0
uuid=자신의 UUID
type=ethernet
autoconnect=true
interface-name=usb0
[ethernet]
[ipv4]
address1=192.168.2.3/24
method=manual
[ipv6]
addr-gen-mode=default
method=auto
[proxy]

Raspberry Pi 이더넷 가젯을 시스템 서비스 등록
앞에서 라즈베리파이에서 USB-C로 이더넷을 사용하는 설정을 추가했고, 이 설정을 시스템 서비스에서 자동으로 실행하고 관리할 수 있게 시스템 서비스로 등록한다.
ethernet-usb 네트워크 설정 활성화 usb-gagdet.sh 파일 추가
라즈베리파이 운영체제에 앞에서 추가한 ethernet-usb0 네트워크를 활성화하는 쉘 파일을 추가한다.
sudo vi /usr/local/sbin/usb-gadget.sh
#!/bin/bash
nmcli con up ethernet-usb0
이 파일은 시스템 서비스로 등록해서 실행하기 위해서 실행 권한을 파일에 추가한다.
sudo chmod a+rx /usr/local/sbin/usb-gadget.sh
시스템 서비스 파일 usbgadget.service 추가
위 네트워크 활성화 파일을 서비스 파일로 등록해 운영체제에서 서비스로 관리할 수 있게 다음 내용을 usbgadget.service
파일을 추가한다.
sudo vi /lib/systemd/system/usbgadget.service

마지막으로 추가한 서비스 파일을 활성화 한다.
systemctl enable usbgadget.service

이제 모든 설정이 끝났다. 라즈베리파이를 완전히 전원을 종료한다.
sudo shutdown -h now
iPad 와 Raspberry Pi USB-C 연결 설정
USB-C to Ethernet 어댑터와 랜선 제거
USB-C to Ethernet Adapter와 랜선을 제거한다. 오직 iPad에 USB-C 선만 Raspberry Pi에 연결해서 다시 라즈베리파이를 부팅한다.

iPad 에서 Ethernet 설정
기존에 USB-C to Ethernet으로 라즈베리파이와 연결할 때는 iPad의 Ethernet 인터페이스에 Belkin Ethernet 어댑터 또는 10/100/1000 Ethernet 어댑터와 같이 설정이 나왔다. 라즈베리파이 USB-C에 gadget설정 추가한 뒤 USB-C만 가지고 iPad와 연결하면, iPad의 Ethernet 인터페이스에 다음과 같이 RNDIS/Ethernet Gadget이라고 나타난다.

iPad 이더넷을 192.168.2.x 대역으로 설정한다.

iPad에서 USB-C 이더넷으로 Raspberry Pi 접속
iPad에서 Blink 앱을 열어 SSH로 라즈베리파이에 설정한 USB-C 이더넷에 설정한 192.168.2.3으로 접속한다.
ssh pi@192.168.2.3

이젠 iPad에서 USB-C 선 하나로 Raspberry Pi에 연결해서 전원과 네트워크 데이터를 전송할 수 있게 되었다. 라즈베리파이에 설정된 네트워크 인터페이서를 살펴보면 usb0 인터페이스가 새롭게 추가된 것을 확인할 수 있다.

결론
지금까지 iPad + Raspberry Pi 개발환경 구축하는 방법을 소개했다. 라즈베리파이에 VSCode Server remote 를 사용하여 iPad 에서 VSCode로 코딩을 하고 node.js나 Python 같은 런타임을 라즈베리파이 운영체제(리눅스 기반) 위에서 동작할 수 있다. 라즈베에파이 운영체제에 Python3.11 버전이 기본적으로 설치되어 있어 아래와 같이 최신 머신러닝 작업도 iPad에서 라즈베리파이를 통해서 테스트해볼 수 있다.

라즈베리파이 기기 크기는 손바닥보다 작기 때문에 가볍고 항상 휴대할 수 있다. 라즈베리파이 4 전원은 USB-C 공급이 가능하기 때문에 따로 전원 어댑터 없이 iPad에 바로 연결해서 전원 공급을 할 수 있고, USB-C ethernet gadget 설정을 커널에 추가해서 따로 이더넷 어댑터나 랜선없이 USB-C선 하나로 전원공급과 네트워크 데이터 전송을 처리할 수 있어 휴대성을 극대화 할 수 있다.

질문 및 의견을 남겨주세요 >