기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
보통 하드웨어 디바이스를 사용하려면 리눅스커널에 그에 대응하는 디바이스파일이 있어야하는데
file_stroage.c, udc 파일을 살펴보면 usb 클라이언트포트의 디바이스파일을 open하는 부분이 전혀 보이지 않는데
어떤 방식으로 장치에 접근하는건지 궁금합니다.
또다른 질문은 현재 udc와 가젯을 올리고 난후 USBLyzer로 확인해보면 enumeration of device failed가 뜨는데
file_storage.c 코드를 보면 fsg_setup이라는 함수에서 device 디스크립터를 memcpy함수를 통해
넘겨주게 되어있는데 enumeration 과정의 첫단계라고 생각되는 이 함수가 동작하지 않고 있는것 같습니다.
혹시 host pc측에서 board로 날라오는 packet을 보드 클라이언트쪽에서 못 받아들이고 있는건지 확인해
볼수있는 방법이 없을까요?
현재 usb device controller로는 s3c-udc-hs.c 파일을 컴파일하여 사용하고 있습니다.
보드의 mcu가 s3c2443이여서 device 2.0 스펙이여서 high speed인 것으로 구해서 올렸습니다.
레지스터의 어드레스 매핑도 맞구요...
헌데 usblyzer로 보게되면 서로 패킷을 주고 받는 듯하다가 enumeration of device failed가 뜨고 마는 상황입니다.
udc는 디바이스 파일을 open하는 코드가 들어가야 있어야 하는 것인지도 궁금하고
가젯을 사용하기 위해 필요한 것이 udc 말고 더 확인해줘야 하는 것이 있는지도 궁금합니다
우선 가젯에 대한 접근 개념이 처음부터 잘못된것 같습니다.
USB 가젯은 리눅스 운영체제를 운용하는 타깃보드에서 어떤 모습으로 USB Host 쪽에 보여줄지를 결정하는 것 입니다.
간단하게 레이어를 설명하면 다음과 같습니다.
CPU에 의존적인 USB Client(Device) Driver <-> File Storage Gadget or Serial Gadget ... etc
즉, 가젯은 USB Device 컨트롤러와 직접 통신하는게 아닌, USB Device Driver와 통신을 합니다.
만약 가젯을 동작 시킨다면 다음과 같은 형식을 취해야 겠조.
첫째. CPU에 맞는 USB Device Driver를 로드한다.
둘째. USB 가젯을 로드한다.
셋째. 호스트 PC와 연결한다.