https://ndb796.tistory.com/479
이글을 통해 안경잡이개발자 님께 감사합니다.
https://ahyuo79.blogspot.com/2020/11/
USB 장치는 한개의 기능을 제공하도록 되어있다 (Device or Host )
멀티 가젯 USB 장치를 만드는 법을 소개
1. 환경 설정
가장먼저 USB OTG 기능을 제공하기 위한 라즈베리파이 /boot/config.txt 열어서 제일 마지막줄에 코드를 추가한다.
dwc2 USB 드라이버를 사용할 수 있도록 하는 것
dtoverlay=dwc2
이어서 /etc/modules 의 마지막줄에 다음 두개의 커널 모듈을 넣어줍니다.
이때 libcomposite 커널 모듈이 핵심적인 역할을 수행
이모듈은 여러개의 가젯을 한꺼번에 활성화할 수 있도록 합니다.
일반적으로 USB 가젯모드 란 리눅스 시스템을 호스트 컴퓨터의 입장에서 보았을 때 USB 장치 (DEVICE) 인것처럼 보이게 하는 방법 을 의미
우리의 라즈베리파이를 HID장치나 Mass Storage Class (MSC) 처럼 보이게 만들 수 있다.
이러한 배경에서 USB 가젯 기능 제공하되 한번에 여러개의 USB Device 기능을 제공하려면 libcomposite 모듈을 사용할 수 있다.
이를 이용하면 나의 Raspberry Pi Zero 가 동시에 3개의 USB 대용량 저장소 이면서 동시에 마우스와 키보드의 역할을 수행하도록 만들 수 있다.
2. 멀티 가젯 (Multi Gadget)모드 확인
/sys/kernel/config/usb_gadget/ 폴더를 활성화 해야한다.
이 폴더 안에서 규칙에 맞게 생성된 파일들을 통해 실제로 multi gadget 역할을 수행할 수 있다.
이폴더는 libcomposite 모듈을 커널에 적재함으로써 활성화 할 수 있다.
앞서 우리는 재부팅했을 때 리눅스 커널 모듈 중에서 libcomposite 이 불러와 지도록 만들었다.
자동으로 모듈을 불러오도록 설정하지 않았다면 modprobe 명령을 이용해 수동으로 적재하자.
modprobe 명령어는 커널 모듈을 리눅스 커널에 추가하거나 커널로부터 제거할 때 사용
원래 모듈을 추가하거나 제거할 때는 insmod 나 rmmod 를 사용할 수 있는데,
modprobe 는 더욱 다양한 기능을 제공. modprobe 는 모듈을 올릴 때 여러개의 모듈을 한꺼번에 올릴 수 있으며, 의존성이 있는 모듈도 같이 적재할 수 있다.
재부팅하지 않고 바로 libcomposite 을 적재하기 위해서는 다음과 같은 명령어를 입력하면 된다. (/etc/modules 에 libcomposite 을 추가했다면 sudo reboot 명령을 통해 재부팅 하자)
sudo modprobe libcomposite
이후에 /sys/kernel/config/usb_gadget 경로 가 생긴것을 확인할 수 있다.
이제 이경로에 각종 환경 설정 파일을 생성하여 라즈베리파이가 USB 가젯으로 동작하게 만들 수 있다.
3. 환경 스크립트 만들기
vim /usr/bin/my_usb 을 통해
을 만들어 줍니다.
#!/bin/bash
cd /sys/kernel/config/usb_gadget/
mkdir -p my_usb
cd my_usb
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB # USB2
mkdir -p strings/0x409
echo "0123456789abcdef" > strings/0x409/serialnumber
echo "LEEHANDS LTD" > strings/0x409/manufacturer
echo "My USB" > strings/0x409/product
mkdir -p configs/c.1/strings/0x409
echo "My USB Config 1" > configs/c.1/strings/0x409/configuration
echo 250 > configs/c.1/MaxPower
FILE1=/home/pi/images/usbdisk1.img
mkdir -p ${FILE1/img/d}
mount -o loop,ro, -t vfat $FILE1 ${FILE1/img/d}
mkdir -p functions/mass_storage.usb0
echo 1 > functions/mass_storage.usb0/stall
echo 0 > functions/mass_storage.usb0/lun.0/cdrom
echo 0 > functions/mass_storage.usb0/lun.0/ro
# ?몄뒪???낆옣?먯꽌???곌린 媛??
echo 0 > functions/mass_storage.usb0/lun.0/nofua
echo $FILE1 > functions/mass_storage.usb0/lun.0/file
# ?대?吏 ?뚯씪 紐낆떆?섍린 # 留뚮뱾?댁쭊 湲곕뒫(function) ?ъ슜?????덈룄濡??ㅼ젙
ln -s functions/mass_storage.usb0 configs/c.1/
ls /sys/class/udc > UDC
'SBC (Single Board Computer) > Raspberry Pi Zero' 카테고리의 다른 글
Raspberry Pi Zero , 소비전력 (0) | 2021.07.13 |
---|---|
라즈베리파이, 모니터없고 유선랜없고 무선랜 연결하기 (0) | 2021.05.27 |
라즈베리파이, 모니터없이 SSH 활성화 하기 (0) | 2021.05.27 |
<라즈베리파이 제로> ST7789 LCD 구동하기 (OLED) (0) | 2021.03.02 |
<라즈베리파이 제로> INA260 (0) | 2021.02.26 |