기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하세요 꼭 무슨 문제 있을때만 찾아오게 되네요..
이번에도 질문드리기가 너무 죄송스러울 뿐이네요..ㅠㅠ
USB 드라이버를 사용하기 위해 포팅중인데요
하드웨어 스펙으로 인해 Endpoint가 모자라
Interface Endpoint가 없는 NCM 네트웍 드라이버를 포팅중입니다.
Device와 HOST 간 연결시에 bind() 에러가 나면서 인터페이스 등록이 안됩니다.
1. 혹시 Interrupt Endpoint를 제거한 NCM 드라이버를 포팅해보신적이 있으신 분 혹시 계신가요??
Device 드라이버쪽은 타 업체 제품이고(물론 Endpoint 가 없는 NCM Device Driver가 올라가 있습니다),
HOST 드라이버에서 이를 처리해서 연결할수 있는 드라이버를 포팅하려고 합니다.
2. kernel-버전/driver/net/usb/cdc_ncm.c 파일에서 cdc_bind 부분에 보니 usbnet_link_change(dev, 1, 2) 가 있는데
요녀석이 어떤 역할을 하는 녀석인지도 혹시 아시는 분 답변 부탁드립니다.
감사합니다.
저도 좀더 세심하게 보다 보니 2번의 경우 usbnet_link호출 부분 위쪽에 아래와 같이 주석도 달려 있었네요..
/*
* We should get an event when network connection is "connected" or
* "disconnected". Set network connection in "disconnected" state
* (carrier is OFF) during attach, so the IP network stack does not
* start IPv6 negotiation and more.
*/
감사합니다.
그나저나 bind 후 인터페이스가 올라가야 다른 테스트를 해볼수 있을텐데 쉽지가 않네요..
우선 ncm 드라이버에서 bind 에러가 발생되는 원인은 endpoint가져오기에서 문제가 발생되서 그런것 같습니다.
cdc_ncm_find_endpoints()를 실행 후 in, out, status를 가져와야 되는데 in, out,은 정상으로 가져오는것으로 보이고, status값이 없는걸로 봐서 이쪽이 문제인것 같습니다.
인터럽트 endpoint가 없는 상황이라 그냥 스킵하도록 수정해봐야겠네요..ㅎㅎ 뭐 어찌 동작할지는 모르겠지만 우선 ncm드라이버부터 올려봐야겠습니다.
---------------------------------------------------------------------
음.. 아직까지는 잘모르겠네요.. 좀더 소스를 파봐야겠습니다. ㅠㅠ
연말에 처리할 일이 넘 많아서 아직 친구들한테 물어보지는 못했습니다.....ㅠ.ㅠ
크리스마스는 오랜만에 하루 푹 쉬었습니다.
당연히 24일은 과메기와 술과 함께.............알콜과 보냈고요....ㅎㅎ
usb는 일반 프로토콜을 본 적이 거의 없고, 주로 chip level에서의 phy 설정은 꽤 봤었습니다.
일도 그쪽으로 할 일 밖에 없어서요.....
modem관련 드라이버를 디버깅하느라 좀 보기는 했는데, 아직도 usb stack이 확 눈에 들어오지는 않습니다.
예전 firmware로 구현한 적이 있는데, 참.........어려운 녀석이더군요.
오픈소스나 커널쪽에 참여하실 때는 세가지 정도가 필요하다라고 볼 수 있겠네요.
1. 특정 영역에 대한 전문가에 가까운 지식
2. 영어
3. 약간의 끈질김....^^
일단, 커널이나 특정 오픈소스를 잘 파악하고 거기에 있는 버그나 아니면 새로운 디바이스 혹은
새로운 stack을 올릴 수 있어야 참여가 쉬울겁니다.
그리고, 그것에 대한 질답 혹은 영어로 글 싸움....정도를 잘 해야할 수도 있고요.
저같은 경우는 주변에 커널에 이름 올리는 경우 이렇게 했던 것으로 기억이 납니다.
1. 커널 메인테이너 급과 인맥이 형성되어서
2. 새로운 특정 보드 혹은 cpu에 대한 코드를 작성을 해서 해당 인물의 도움으로 올리는 방법.
혹은
1. 새로운 특정 보드 혹은 cpu 코드 및 주변 device에 대한 코드를 세계 최초로 작성을 해서
(이게 재미있는게 내가 코드를 작성해도 안올리는 사람이 꽤 많습니다.....노력이 필요하기도 하고, 궂이
안올리는 경우도 많고요)
2. github나 다른 활동을 혼자서 열씨미 할 경우 누가 해당 코드를 기반으로 올리는 경우도 있습니다.
3. 물론, 이 경우는 코드를 베껴다가 자기것인양 올리는 경우도 있습니다....^^;;;
(메일링 리스트 감시가 필요한 케이스죠)
가장 좋은 것은 직접 한번 오픈소스를 운영해 보시는 것입니다.
저는 영어가 너무 젬병이라 제 말을 외국사람들과 소통이 불가능 해서..................포기했습니다...ㅠ.ㅠ
gadget(device)쪽에서 interrupt endpoint를 갖지 않는 변태(?) cdc-ncm 드라이버를 이용하시려면, host쪽 cdc-ncm쪽도 변경해야 합니다.
cdc_ncm_status()가 interrupt endpoint 를 통해서 host와 device가 status를 변경하고 ethernet channel을 setup하기 때문에 둘다 바꿔야 합니다. ncm driver가 probe는 되더라도 정상동작 안되는 이유가 그겁니다. 하지만, net driver 구조는 tty 만큼 헬이기 때문에 naver...
일단,
2번에 대한 부분을 찾아봤는데, 다음과 같은 자료들이 나오네요.
https://patchwork.ozlabs.org/patch/235774/
간단하게 말씀드리면, usb network을 power management나 아니면 bus bandwidth를 줄일 때 사용하는 듯 합니다. 예를 들어......cpu가 sleep이 아니고 run-time pm 상황에서도 usb network의 bandwidth를 줄이는 역할을 합니다.
대략 쫓아가 보니..........rx packet을 떨구는 역할을 하는 듯 하네요.