Raspberry Pi는 USB 저장 장치를 어떻게 에뮬레이트 할 수 있습니까?


46

USB 스틱 및 하드 드라이브와 같은 USB 저장 장치는 모든 종류의 컴퓨터에 외부 저장 장치를 연결하는 데 일반적입니다. Raspberry Pi는 USB 저장소를 어떻게 에뮬레이트 할 수 있습니까? 가장 쉬운 응용 프로그램은 USB를 통해 SD 카드에 직접 액세스하는 것이었지만 이더넷을 통해 파일에 액세스 할 수도 있습니다. " USB 클라우드 스틱 " 에 대한 다음 레이아웃에 대해 생각했습니다 .

Computer <---USB---> |Raspberry Pi| <---Ethernet---> Cloud, NAS etc.

컴퓨터는 파일을 읽고 쓰는 일반적인 USB 스틱 만 보여야합니다. Raspberry Pi는 클라우드 스토리지에 요청하기 위해 디렉토리 목록과 파일 액세스를 매핑하는 프로그래밍 가능한 브리지 역할을합니다. 컴퓨터에 추가 소프트웨어를 설치하지 않고도 USB를 통해 모든 컴퓨터 (블랙 박스 미디어 플레이어 포함)의 클라우드 스토리지 호스팅 업체에 액세스 할 수 있습니다 . Raspberry Pi USB 브리지는 파일을 즉시 암호화 / 복호화 할 수 있어야하므로 클라우드에 암호화 된 파일을 저장하고 일반 USB 드라이브와 같은 모든 장치에서 액세스 할 수 있습니다.

편집 : 유사하지만 기능이 제한적인 기존 제품 에는 Wireless Media StickUSB-over-Network가 있습니다. 클라우드 드라이브 또는 이와 유사한 소프트웨어로 가상 스토리지를 마운트 하고 TrueCrypt 또는 EncFS로 암호화 하여 클라우드의 파일에 액세스 할 수 있습니다. 비밀번호는 Raspberry Pi의 SD 카드에만 저장되지만 컴퓨터 없이도 스토리지에 액세스 할 수 있습니다. 신뢰할 수없는 컴퓨터에서 암호를 입력하십시오.


1
그가 원하는 것은 다른 컴퓨터의 USB를 통해 마운트 할 수있는 Pi의 파티션 또는 공유 폴더를 갖는 것입니다. raspi를 모든 컴퓨터에 꽂을 수 있고 폴더 / 파티션은 플래시 드라이브처럼 작동하며 추가 소프트웨어 없이도 쓸 수 있다는 아이디어입니다.
wmarbut

3
Pi는 블랙 박스를 포함한 모든 컴퓨터와 Amazon 클라우드 사이의 게이트웨이 역할 만해야합니다 . 게이트웨이는 파일을 즉시 암호화 할 수도 있습니다.
Jakob

1
그것을 긁어 라- 이것은 완벽 할 것이다!
Alex Chamberlain

1
@AlexChamberlain-아니요, 할 수 없습니다. USB 대용량 저장소 장치에는 호스트 운영 체제에서 지원하는 특정 프로토콜이 있습니다. 물론 특정 운영 체제에 일종의 저장 장치처럼 보이도록 드라이버를 만들 수 있지만 "USB 대용량 저장 장치"장치가 아니라 "USB를 통해 연결된 사용자 지정 저장 장치"
Chris Stratton

1
@ppumkin : "드라이브를 매핑"하거나 "LAN에 연결"하려면 PC (또는 미디어 플레이어)를 구성해야합니다. USB 포트에 꽂기 만하면 관리가 필요하지 않으며 PC에 암호를 노출 할 필요가 없습니다. 클라우드 드라이브에서 스토리지를 공유하고 싶습니다. 여기 에는 항상 비밀번호가 필요하거나 심지어 클라이언트 소프트웨어 설치가 필요합니다.
야콥

답변:


12

문제는 PC에 Pi의 USB 연결에 데이터 핀이 연결되어 있지 않고 전원 핀만 있다는 것입니다. 따라서 USB가 연결되어 있지 않기 때문에이 기능을 사용하여 USB를 말할 수 없습니다.

Pi의 유일한 옵션은 GPIO 핀을 사용하여 USB를 '비트 뱅 (bit bang)'하는 것이지만 이것은 매우 느리고 잠재적으로 신뢰할 수 없습니다. 나는 실제로 키보드 나 마우스를 에뮬레이트 할 수 있다고 생각합니다 .USB와 같은 비트 뱅킹의 엄격한 타이밍 요구 사항을 감안할 때 CPU가 처리하기에는 대역폭이 높을 수 있습니다.

또 다른 대안은 USB를 통해 두 대의 컴퓨터를 연결하여 일종의 네트워크를 만들 수있는 장치를 찾는 것입니다. 그러나 이더넷 연결을 사용할 수도 있습니다 ...


1
이전에 GP32를 사용하여 클라이언트로 허브에 연결했을 때 호스트처럼 동작 할 수있었습니다. Raspberry가 USB 포트의 호스트처럼 작동 할 수 있다면 (전원이 아닌) 유사한 트릭도 가능합니다. USB-to-go가 가능할까요?
Thorbjørn Ravn Andersen

2
응? 전원 어댑터에 사용 된 마이크로 USB 포트로 착각했습니다. 적절한 USB 포트 2 개는 어떻습니까? 일부 에뮬레이션 소프트웨어를 사용하면 USB를 PC에 꽂고 USB를 꽂을 때 Android 전화와 같은 저장소를 에뮬레이션 할 수 있습니다. -그러나 Pi를 네트워크에 연결하고 삼바 또는 무엇이든 (wifi 또는 lan)을 통해 "클라우드"폴더를 공유하고 동시에 원하는 작업을 클라우드 동기화를 수행 할 이유가 없습니다. . LAN은 다양한 포트에서 많은 요청을 처리 할 수 ​​있습니다.
Piotr Kula

2
@ppumkin : 왜 마이크로 USB 포트로 착각합니까? 데이터 핀이 연결되어 있지 않으므로 데이터 핀을 통해 데이터를 보낼 수 없습니다. 다운 스트림 "적절한"USB 포트는 '호스트'포트이므로 중간에 변환기 장치가 없으면 PC에 연결할 수 없습니다. USB 프로토콜이 작동하는 방식 때문에 소프트웨어 에뮬레이션으로는 충분하지 않습니다. 두 장치를 함께 연결할 수있는 이더넷을 생각할 수도 있지만 USB는 이와 같이 작동하지 않습니다. 당신이 나를 믿지 않는다면, USB 사양, 특히 USB 호스트와 주변 장치에 관한 부분을 읽으십시오.
Malvineous

1
"비트 뱅잉"USB는 옵션이 아니라고 덧붙였다. USB는 비트 뱅킹이 가능한 I2C와 같은 것에서 멀고 먼 길입니다. 아마도 가장 실용적인 방법은 USB 장치 포트가 내장 된 AVR 마이크로 중 하나를 사용하고 Pi의 직렬 포트를 통해 통신하는 것입니다. (예 : olimex.com/Products/AVR/Proto/AVR-USB-162 )
greggo

1
@Malvineous 12MHz 또는 1.5? 클럭주기는 12Mhz의 경우 [83.33 +/- 0.2us]이고 1.5MHz의 경우 [666.6 +/- 10us]입니다. 수신시 클럭을 복구해야한다는 것을 명심하십시오. 이는 아마도 클럭 속도의 5-10 배 이상을 샘플링하는 것을 의미합니다. 이러한 구현이 USB 장치와 통신하는 동안 인터럽트를 허용합니까?
greggo

8

BCM2835 데이터 시트 (http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf) 15 장의 빠른 설명을 바탕으로 USB OTG가 지원되는 것처럼 보입니다. 이론적으로, 제안 된 계획을 지원하는 것은 SW의 문제 일 수있다. 나는 USB 프로토콜 전문가 (또는 초보자)는 아니지만이 기능을 사용하는 것이 좋습니다.

BeagleBone (http://elinux.org/BeagleBone)에 대한 설명을 보면이 모드를 지원하는 커넥터에 대한 특정 언급이 있지만 유사한 것을 지원하는 것으로 보입니다. 라즈베리 파이가 커넥터 선택으로 인해 제한된다면 불행 할 것입니다.

이것이 도움이 되길 바랍니다.


2
SOC가이를 지원하더라도 모델 B의 LAN9512 허브 장치는 장치 모드에서 USB 포트를 "뒤로"실행하는 데 방해가 될 수 있습니다. 모델 A에서 (또는 제거하고 R37 & R38을 설치하는 경우) SOC USB 포트를 외부 잭으로 가져올 수 있지만 이더넷이없고 잠재적 스토리지를위한 sdcard 만 있습니다.
Chris Stratton


4

불행히도 이것이 내가 말할 수있는 한 간단 해 보이지만 아직 완료되지 않았습니다. 자세한 내용은이 스레드와 매우 자세한 답변을 참조하십시오

https://unix.stackexchange.com/questions/2683/serve-files-over-usb

그리고 Pi 관련 답변은 여기에 있습니다 : http://www.raspberrypi.org/phpBB3/viewtopic.php?f=8&t=4938


1
링크 주셔서 감사합니다. 처럼 보이는 이 장치는 내가 원하는 걸의 일부를 수행하지만 독점 한 방향으로 만 (가상 읽기 전용 USB 저장)에서 작동 할 수 있습니다.
Jakob

3

특히 성능에 관심이 없다면 USB 대용량 저장 코드가있는 USB 가능 마이크로 컨트롤러 (예 : $ 10 STM32F0 감지 평가 모듈에서 STM32F103 디버그 인터페이스를 다시 프로그래밍 할 수 있음)를 얻을 수 있습니다. 파이의 직렬 포트에 조심스럽게 연결하십시오 백엔드로 수백 킬로 보드에서 실행됩니다.

이더넷을 통해 클라이언트 PC와 인터페이스하면 성능이 향상 될 수 있지만 호스트 운영 체제에 대한 사용자 지정 드라이버 또는 다른 프레젠테이션이 필요합니다. 즉, 네트워크에 연결된 저장 장치 또는 공유 서버가됩니다.

기성품 파일 전송 케이블은 이미 언급 한 바 있지만 클라이언트 PC에 적합한 소프트웨어와 파이 엔드에 대한 소스 레벨 Linux 드라이버 지원이 필요합니다.



3

Arduino가 USB 장치 인 Arduino Leonardo를 즉시 에뮬레이트 할 수 있다는 것을 알았습니다 . LUFA의 USB 스택 의 Arduino에 사용될 수 있고, 이는 USB 대용량 저장 장치 드라이버 (참조 구현 이 학습 ). 이 설정은 USB를 SD 카드 리더가 이해하는 SCSI 명령 에 매핑하는 데 사용할 수 있습니다 . SCSI에 대해서는 잘 모르지만 Raspberry Pi의 SD 카드처럼 보이며 USB via Arduino를 동일한 버스에서 함께 사용할 수 있습니다. 이 아이디어가 완전한 해결책은 아닙니다 ...


-1 주제는 Arduino가 아닌 Raspberry Pi에 관한 것입니다.

1
나는이 대답이 완전한 해결책이 아니라는 것을 알고있다! Raspberry Pi가 도구가 아닌 도구로서의 질문이 주제에 관한 것이며 관련 프로젝트에 대한 견해를 넓히는 데 도움이되기를 바랍니다. 이 경우이 자습서 에서 SD 카드를 USB 대용량 저장 장치로 사용하는 방법을 찾았습니다 . 어쩌면 Arduino 또는 다른 ATMEGA32U4를 사용하여 Raspberry Pi에서도 사용 가능한 SIP 버스로 USB를 가져올 수 있습니까?
Jakob

2
아니요, 전기 스위칭 이외의 다른 SD 카드에 대한 액세스는 실제로 공유 할 수 없습니다. 한 번에 하나의 호스트 만 지정된 파일 시스템을 "마운트"할 수 있습니다 (카드에 사용되는 파일 시스템 유형의 경우 네트워크 파일 시스템은 이와 관련하여 다릅니다).
Chris Stratton

1

이것은 USB가 어떻게 작동하는지에 달려 있습니다. 두 가지가 USB에 연결될 때마다 USB 호스트와 USB 장치가 있으며 트웨인은 장소를 바꾸지 않아야합니다. USB 호스트는 USB 버스에 연결된 모든 장치 간의 데이터 전송을 동기화하기 위해 USB 장치가 대부분 할 수없는 모든 종류의 작업을 수행합니다. 자세한 정보USB wikipedia 페이지를 확인하십시오 .

당신이 말하는 것은 불행히도 USB 표준에 의해 지원되지 않는 두 개의 USB 호스트 (Raspberry Pi와 컴퓨터)를 강제로 통신하는 것입니다. 두 개의 USB 호스트간에 데이터 전송을 위조 할 수있는 장치가 있지만 Malvineous가 언급했듯이 이더넷을 사용하는 것이 좋습니다.

귀하의 질문은 특히 Raspberry Pi를 사용하여 USB 스토리지 를 에뮬레이트하는 것에 대해 언급 하지만 Raspberry Pi를 NAS로 설정하는 것을 고려 했습니까? Raspberry Pi를 NAS 상자로 사용하면 기본적으로 요청한대로 정확하게 수행되지만 USB를 사용하는 대신 네트워크를 사용하게됩니다. 관심이있는 경우이 작업을 수행하는 방법에 대한 훌륭한 지침 이 있습니다.


포인터 주셔서 감사합니다. 그래서 내 질문은 Raspberry Pi를 사용하여 USB 장치를 구현하는 방법에 관한 것 입니다. 그러나 NAS는이 질문에 대한 답이 아닙니다.
Jakob

3
Raspberry Pi가 USB 장치가 될 수 있도록하려면 ftdichip.com 의 제품을 조사 하여 Pi의 GPIO 핀을 사용하여 FTDI 칩과 인터페이스하는 보드를 배선 할 수있을 것보다 USB 장치 기능을 제공합니다. FTDI 장치와 통신하려면 드라이버를 작성해야 할 수도 있습니다.
Dan B

USB OTG 장치 인 경우 "트웨인이 장소를 전환해야합니다"를 제외하고 ...
Chris Stratton

1

주식 Nokia 커널에 포함 된 USB 가젯 드라이버를 사용하여 기존 Nokia N900 Phone에서이를 수행 할 수 있습니다. 에뮬레이트 된 장치는 실제 장치와 똑같이 동작하며 PC에서 부팅 할 수도 있습니다.


1
자세한 내용을 알려 주시겠습니까? 대부분의 다른 스마트 폰에서 할 수있는 것처럼 USB를 통해 휴대 전화에 저장 공간을 제공하는 것에 대해 이야기하지 않습니다. 내가 이해하는 한 USB 가제트 드라이버 는 SCSI에서 USB 로의 매핑 만 제공 하므로 SCSI를 일부 클라우드 스토리지 API에 매핑해야합니다.
야콥

1

Pi Zero 및 Pi Zero W를 사용할 수 있으며 가제트 인터페이스 ( Kernal.org , linux-sunxi.org )를 지원 하여 USB 대용량 스토리지 및 가상 네트워킹을 포함한 여러 가지 프로파일을 허용합니다.

OP의 요청에 가장 가까운 솔루션은 Pi와 호스트 PC간에 네트워킹 프로토콜을 사용한 다음 Pi에서 클라우드 / 네트워크 공급자에 이르는 다른 형태의 네트워킹 프로토콜을 사용하는 것입니다. Pi Zero W에는 Wi-Fi가 내장되어 있으므로 클라우드 / 네트워크 제공 업체에 직접 연결할 수도 있습니다. 이 두 링크를 네트워킹하는 것이 가장 쉬운 방법입니다. 사용 가능한 네트워킹 프로토콜과 클라우드 공급자가 많이 있습니다.

USB 대용량 저장 장치를 사용하는 것은 나쁜 생각입니다. USB Mass Storage와 Pi 사이의 드라이버 수준 적응을 쓰거나 다시 써야합니다. MTP로 시작 하거나 비슷한 것으로 시작하십시오. MTP에는 심각한 성능 문제 ( Reddit , XDA , HowToGeek , Reddit )가 있으므로 네트워킹 방식을 제안합니다.

그 방향으로 많은 프로그램과 프로젝트가 있어야합니다. Pi의 관점에서 보면 파일 서버 / 동기화 서버처럼 작동하므로 유사한 자습서를 시작해야합니다. Pi 기반 Seafile , Syncthing , SugarSyncOwnCloud 서버 와 같은 것을 살펴보면 시작해야합니다.

USB 가제트로서 Pi Zero에 대한 몇 가지 유용한 안내서 :


0

USB 표준은 호스트 기반입니다. 즉, 하나의 장치가 연결된 장치와의 모든 통신을 제어해야합니다. 클라이언트는 간단한 장치 또는 허브 일 수 있습니다. 허브는 허브에 연결된 클라이언트의 호스트 프록시이며 연결된 호스트 (또는 허브)와 통신합니다.

원래 USB 디자인으로 두 호스트 (PC와 RPi)를 함께 연결할 수 없습니다.

그러나 USB On-The-Go 는 USB 연결이 호스트 또는 클라이언트에 연결되어 있는지 확인하고 그에 따라 역할을 조정할 수있는 확장 기능이 있습니다. 이렇게하려면 하드웨어를 지원해야합니다. 나는 RPi가 그렇게하도록 믿어지지 않는다.

자세한 내용은 http://www.usb.org/home 또는 http://en.wikipedia.org/wiki/Universal_Serial_Bus를 참조하십시오 .

요컨대, 나는 그것이 가능하다는 것을 믿지 않습니다.


또 다른 대답은 OTG 지원 의견이 없다는 데 반하는 것입니다.
Alex Chamberlain

1
@Alex, 날짜 스탬프를보십시오. Anders는 Pi Zero 또는 A +를 사용할 수 있기 전에 2012 년에 이것을 게시했습니다.
YetAnotherRandomUser

@YetAnotherRandomUser 날짜 스탬프를 확인하십시오. Anders가 자신의 의견을 쓴 다음날 내 답변을 게시했습니다.
Alex Chamberlain

@AlexChamberlain과 2012 년에는 Raspberry 및 Rasbperian (또는 내가 아는 다른 소프트웨어)에 대한 지원이 없었습니다. 그렇습니다. 그 시간 틀에서 저는 옳았습니다. RPi Zero는 몇 년 후에 나왔습니다 ... 이제 우리는 RPi Zero를 지원합니다.
Anders
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.